mirror of
https://github.com/qgis/QGIS.git
synced 2025-02-23 00:02:38 -05:00
93 lines
3.8 KiB
Python
93 lines
3.8 KiB
Python
# -*- coding:utf-8 -*-
|
|
"""
|
|
/***************************************************************************
|
|
Module to generate prepared APIs for calltips and auto-completion.
|
|
-------------------
|
|
begin : 2012-09-10
|
|
copyright : (C) 2012 Larry Shaffer
|
|
email : larrys (at) dakotacarto (dot) com
|
|
***************************************************************************/
|
|
|
|
/***************************************************************************
|
|
* *
|
|
* This program is free software; you can redistribute it and/or modify *
|
|
* it under the terms of the GNU General Public License as published by *
|
|
* the Free Software Foundation; either version 2 of the License, or *
|
|
* (at your option) any later version. *
|
|
* *
|
|
***************************************************************************/
|
|
Portions of this file contain code from Eric4 APIsManager module.
|
|
"""
|
|
|
|
import os
|
|
|
|
from qgis.PyQt.Qsci import QsciAPIs, QsciLexerPython
|
|
from qgis.PyQt.QtWidgets import QDialog, QDialogButtonBox
|
|
from qgis.PyQt.QtCore import QCoreApplication
|
|
|
|
from .ui_console_compile_apis import Ui_APIsDialogPythonConsole
|
|
|
|
|
|
class PrepareAPIDialog(QDialog):
|
|
|
|
def __init__(self, api_lexer, api_files, pap_file, parent=None):
|
|
QDialog.__init__(self, parent)
|
|
self.ui = Ui_APIsDialogPythonConsole()
|
|
self.ui.setupUi(self)
|
|
self.setWindowTitle(QCoreApplication.translate("PythonConsole", "Compile APIs"))
|
|
self.ui.plainTextEdit.setVisible(False)
|
|
self.ui.textEdit_Qsci.setVisible(False)
|
|
self.adjustSize()
|
|
self._api = None
|
|
self.ui.buttonBox.rejected.connect(self._stopPreparation)
|
|
self._api_files = api_files
|
|
self._api_lexer = api_lexer
|
|
self._pap_file = pap_file
|
|
|
|
def _clearLexer(self):
|
|
# self.ui.textEdit_Qsci.setLexer(0)
|
|
self.qlexer = None
|
|
|
|
def _stopPreparation(self):
|
|
if self._api is not None:
|
|
self._api.cancelPreparation()
|
|
self._api = None
|
|
self._clearLexer()
|
|
self.close()
|
|
|
|
def _preparationFinished(self):
|
|
self._clearLexer()
|
|
if os.path.exists(self._pap_file):
|
|
os.remove(self._pap_file)
|
|
self.ui.label.setText(QCoreApplication.translate("PythonConsole", "Saving prepared file…"))
|
|
prepd = self._api.savePrepared(self._pap_file)
|
|
rslt = self.tr("Error")
|
|
if prepd:
|
|
rslt = QCoreApplication.translate("PythonConsole", "Saved")
|
|
self.ui.label.setText('{0} {1}'.format(self.ui.label.text(), rslt))
|
|
self._api = None
|
|
self.ui.progressBar.setVisible(False)
|
|
self.ui.buttonBox.button(QDialogButtonBox.Cancel).setText(
|
|
QCoreApplication.translate("PythonConsole", "Done"))
|
|
self.adjustSize()
|
|
|
|
def prepareAPI(self):
|
|
# self.ui.textEdit_Qsci.setLexer(0)
|
|
exec('self.qlexer = {0}(self.ui.textEdit_Qsci)'.format(self._api_lexer))
|
|
# self.ui.textEdit_Qsci.setLexer(self.qlexer)
|
|
self._api = QsciAPIs(self.qlexer)
|
|
self._api.apiPreparationFinished.connect(self._preparationFinished)
|
|
for api_file in self._api_files:
|
|
self._api.load(api_file)
|
|
try:
|
|
self._api.prepare()
|
|
except Exception as err:
|
|
self._api = None
|
|
self._clearLexer()
|
|
self.ui.label.setText(QCoreApplication.translate("PythonConsole", "Error preparing file…"))
|
|
self.ui.progressBar.setVisible(False)
|
|
self.ui.plainTextEdit.setVisible(True)
|
|
self.ui.plainTextEdit.insertPlainText(err)
|
|
self.ui.buttonBox.button(QDialogButtonBox.Cancel).setText(self.tr("Done"))
|
|
self.adjustSize()
|