included ipython widget via qtconsole

This commit is contained in:
Faisal Shahzad 2023-12-22 22:17:57 +01:00
parent bc121722a7
commit d6b28aef5c
12 changed files with 207 additions and 70 deletions

1
.gitignore vendored
View file

@ -124,6 +124,7 @@ celerybeat.pid
# Environments # Environments
.env .env
.venv .venv
.venv10
env/ env/
venv/ venv/
ENV/ ENV/

View file

@ -73,9 +73,7 @@ extras_require = {
"mkdocstrings[python]", "mkdocstrings[python]",
"pymdown-extensions", "pymdown-extensions",
], ],
"gui": [ "gui": ["pyqt5", "qtconsole"],
"pyqt5",
],
} }
extras_require["all"] = list( extras_require["all"] = list(
{rq for target in extras_require.keys() for rq in extras_require[target]} {rq for target in extras_require.keys() for rq in extras_require[target]}

View file

@ -27,4 +27,4 @@ specific language governing rights and limitations under the License.
# INTERNAL IMPORTS # INTERNAL IMPORTS
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++


from .mainwindow import main from .main import main

View file

@ -69,7 +69,7 @@ from ..core.constants import (
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++




class ConfigTabBar(QTabBar): class SWConfigTabBar(QTabBar):
def __init__(self, *args, **kwargs) -> None: def __init__(self, *args, **kwargs) -> None:
super().__init__(*args, **kwargs) super().__init__(*args, **kwargs)
return return
@ -102,15 +102,15 @@ class ConfigTabBar(QTabBar):
return return




class ConfigDialog(QDialog): class SWConfigDialog(QDialog):
def __init__(self, parent=None): def __init__(self, parent=None):
super(ConfigDialog, self).__init__(parent=parent) super(SWConfigDialog, self).__init__(parent=parent)
self.app_configurations = QSettings( self.app_configurations = QSettings(
CONFIGS["APPLICATION_NAME"], CONFIGS["APPLICATION_NAME"] CONFIGS["APPLICATION_NAME"], CONFIGS["APPLICATION_NAME"]
) )


self.tabswidget_configs = QTabWidget() self.tabswidget_configs = QTabWidget()
self.tabswidget_configs.setTabBar(ConfigTabBar()) self.tabswidget_configs.setTabBar(SWConfigTabBar())
self.tabswidget_configs.setTabPosition(QTabWidget.West) self.tabswidget_configs.setTabPosition(QTabWidget.West)


self.tab_general = QWidget() self.tab_general = QWidget()

View file

@ -0,0 +1,61 @@
# -*- coding: utf-8 -*-

"""
STATIC WORDPRESS: WordPress as Static Site Generator
A Python Package for Converting WordPress Installation to a Static Website
https://github.com/serpwings/staticwordpress

src\staticwordpress\gui\editor.py
Copyright (C) 2020-2023 Faisal Shahzad <info@serpwings.com>

<LICENSE_BLOCK>
The contents of this file are subject to version 3 of the
GNU General Public License (GPL-3.0). You may not use this file except in
compliance with the License. You may obtain a copy of the License at
https://www.gnu.org/licenses/gpl-3.0.txt
https://github.com/serpwings/staticwordpress/blob/master/LICENSE


Software distributed under the License is distributed on an "AS IS" basis,
WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the
specific language governing rights and limitations under the License.
</LICENSE_BLOCK>
"""


# +++++++++++++++++++++++++++++++++++++++++++++++++++++
# 3rd PARTY LIBRARY IMPORTS
# +++++++++++++++++++++++++++++++++++++++++++++++++++++

from qtconsole.rich_jupyter_widget import RichJupyterWidget
from qtconsole.inprocess import QtInProcessKernelManager
from IPython.lib import guisupport


# +++++++++++++++++++++++++++++++++++++++++++++++++++++
# IMPLEMENATIONS
# +++++++++++++++++++++++++++++++++++++++++++++++++++++


class SWIPythonWidget(RichJupyterWidget):
def __init__(self, interface_: dict = {"iface": None}, *args, **kwargs):
super(SWIPythonWidget, self).__init__(*args, **kwargs)

self.ipython_kernal_manager = QtInProcessKernelManager()
self.ipython_kernal_manager.start_kernel()
self.kernel_client = self.ipython_kernal_manager.client()
self.kernel_client.start_channels()

import_custom_modules = ["import requests"]
for module in import_custom_modules:
self._execute(module, hidden=True)

self.ipython_kernal_manager.kernel.shell.push(interface_)

def stop():
self.kernel_client.stop_channels()
self.ipython_kernal_manager.shutdown_kernel()
guisupport.get_app_qt4().exit()

self.exit_requested.connect(stop)

View file

@ -41,7 +41,7 @@ from PyQt5.QtCore import QObject, pyqtSignal
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++




class LoggerWidget(logging.Handler, QObject): class SWLoggerWidget(logging.Handler, QObject):
append_text_message = pyqtSignal(str) append_text_message = pyqtSignal(str)


def __init__(self, parent): def __init__(self, parent):

View file

@ -48,6 +48,7 @@ from PyQt5.QtWidgets import (
QProgressBar, QProgressBar,
QMenu, QMenu,
QToolBar, QToolBar,
QDockWidget,
) )
from PyQt5.QtGui import QIcon, QDesktopServices from PyQt5.QtGui import QIcon, QDesktopServices
from PyQt5.QtCore import Qt, QThread, QSize, QSettings, QUrl from PyQt5.QtCore import Qt, QThread, QSize, QSettings, QUrl
@ -69,19 +70,20 @@ from ..core.utils import (
get_remote_content, get_remote_content,
extract_urls_from_raw_text, extract_urls_from_raw_text,
) )
from ..gui.workflow import WorkflowGUI from .workflow import SWWorkflowObject
from ..gui.logger import LoggerWidget from .logger import SWLoggerWidget
from ..gui.rawtext import RawTextDialog from .editor import SWIPythonWidget
from ..gui.config import ConfigDialog from .rawtext import SWRawTextDialog
from ..gui.project import ProjectDialog from .config import SWConfigDialog
from ..gui.utils import GUI_SETTINGS, logging_decorator from .project import SWProjectDialog
from .utils import GUI_SETTINGS, logging_decorator


# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++
# IMPLEMENATIONS # IMPLEMENATIONS
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++




class StaticWordPressGUI(QMainWindow): class SWMainWindow(QMainWindow):
def __init__(self): def __init__(self):
super().__init__() super().__init__()
self.app_configurations = QSettings( self.app_configurations = QSettings(
@ -90,16 +92,16 @@ class StaticWordPressGUI(QMainWindow):


self._project = Project() self._project = Project()
self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()


self.text_edit_logging = LoggerWidget(self) self.text_edit_logging = SWLoggerWidget(self)
self.text_edit_logging.setFormatter( self.text_edit_logging.setFormatter(
logging.Formatter("%(asctime)s - %(levelname)s - %(message)s") logging.Formatter("%(asctime)s - %(levelname)s - %(message)s")
) )
logging.getLogger().addHandler(self.text_edit_logging) logging.getLogger().addHandler(self.text_edit_logging)
logging.getLogger().setLevel(logging.INFO) logging.getLogger().setLevel(logging.INFO)

self.setCentralWidget(self.text_edit_logging.plaintext_edit) self.setCentralWidget(self.text_edit_logging.plaintext_edit)

self.statusBar().showMessage(f"{CONFIGS['APPLICATION_NAME']} is Ready") self.statusBar().showMessage(f"{CONFIGS['APPLICATION_NAME']} is Ready")
self.progress_bar = QProgressBar() self.progress_bar = QProgressBar()
self.progress_bar.setAlignment(Qt.AlignCenter) self.progress_bar.setAlignment(Qt.AlignCenter)
@ -159,6 +161,13 @@ class StaticWordPressGUI(QMainWindow):
if current_toolbar: if current_toolbar:
current_toolbar.addAction(action) current_toolbar.addAction(action)


# docked widgets
self.dockwidget_ipython = QDockWidget("IPython Console", self)
self.dockwidget_ipython.setFloating(False)
self.dockwidget_ipython.hide()
self.addDockWidget(Qt.RightDockWidgetArea, self.dockwidget_ipython)
self.ipython_console = None

self.setWindowIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/static-wordpress.svg")) self.setWindowIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/static-wordpress.svg"))
self.setWindowTitle(f"{CONFIGS['APPLICATION_NAME']} Version - {VERISON}") self.setWindowTitle(f"{CONFIGS['APPLICATION_NAME']} Version - {VERISON}")
self.setMinimumSize(QSize(1366, 768)) self.setMinimumSize(QSize(1366, 768))
@ -229,14 +238,16 @@ class StaticWordPressGUI(QMainWindow):
@is_new_project @is_new_project
@logging_decorator @logging_decorator
def extract_url_from_raw_text(self): def extract_url_from_raw_text(self):
rtp = RawTextDialog( raw_text_dialog = SWRawTextDialog(
parent=self, src_url=self._project.src_url, dest_url=self._project.dst_url parent=self, src_url=self._project.src_url, dest_url=self._project.dst_url
) )
if rtp.exec_(): if raw_text_dialog.exec_():
raw_text = rtp.textedit_raw_text_with_links.toPlainText() raw_text = raw_text_dialog.textedit_raw_text_with_links.toPlainText()
if raw_text: if raw_text:
new_additional_links = extract_urls_from_raw_text( new_additional_links = extract_urls_from_raw_text(
raw_text, rtp.lineedit_dest_url.text(), rtp.linedit_src_url.text() raw_text,
raw_text_dialog.lineedit_dest_url.text(),
raw_text_dialog.linedit_src_url.text(),
) )
logging.info(f" {len(new_additional_links)} Additional Urls Found") logging.info(f" {len(new_additional_links)} Additional Urls Found")
self._project.additional += new_additional_links self._project.additional += new_additional_links
@ -251,31 +262,33 @@ class StaticWordPressGUI(QMainWindow):


def closeEvent(self, event): def closeEvent(self, event):
""" """ """ """
msgBox = QMessageBox(parent=self) message_box = QMessageBox(parent=self)
msgBox.setWindowTitle(f"Exiting {CONFIGS['APPLICATION_NAME']}") message_box.setWindowTitle(f"Exiting {CONFIGS['APPLICATION_NAME']}")
msgBox.setIcon(QMessageBox.Question) message_box.setIcon(QMessageBox.Question)
msgBox.setText( message_box.setText(
"Do you really want to exit?.<br>Any unsaved changes will be lost!", "Do you really want to exit?.<br>Any unsaved changes will be lost!",
) )


pushbuttonOk = msgBox.addButton("OK", QMessageBox.YesRole) pushbuttonOk = message_box.addButton("OK", QMessageBox.YesRole)
pushbuttonOk.setIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/ok.svg")) pushbuttonOk.setIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/ok.svg"))


pushbuttonNo = msgBox.addButton("Cancel", QMessageBox.NoRole) pushbuttonNo = message_box.addButton("Cancel", QMessageBox.NoRole)
pushbuttonNo.setIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/cancel.svg")) pushbuttonNo.setIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/cancel.svg"))


msgBox.setDefaultButton(pushbuttonOk) message_box.setDefaultButton(pushbuttonOk)


msgBox.setWindowIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/static-wordpress.svg")) message_box.setWindowIcon(
msgBox.setTextFormat(Qt.RichText) QIcon(f"{SHARE_FOLDER_PATH}/icons/static-wordpress.svg")
msgBox.exec_() )
message_box.setTextFormat(Qt.RichText)
message_box.exec_()


if msgBox.clickedButton() == pushbuttonOk: if message_box.clickedButton() == pushbuttonOk:
if self._bg_thread.isRunning(): if self._bg_thread.isRunning():
self._bg_thread.quit() self._bg_thread.quit()
del self._bg_thread del self._bg_thread
del self._bg_worker del self._bg_worker
super(StaticWordPressGUI, self).closeEvent(event) super(SWMainWindow, self).closeEvent(event)


event.accept() event.accept()


@ -313,38 +326,51 @@ class StaticWordPressGUI(QMainWindow):
if not QDesktopServices.openUrl(url): if not QDesktopServices.openUrl(url):
QMessageBox.warning(self, "Open Help URL", "Could not open Help URL") QMessageBox.warning(self, "Open Help URL", "Could not open Help URL")


def startIPython(self):
""" """
if self.findChild(QAction, "action_ipython_widget").isChecked():
if self.ipython_console is None:
self.ipython_console = SWIPythonWidget(interface_={"iface": self})
self.dockwidget_ipython.setWidget(self.ipython_console)

self.dockwidget_ipython.show()
else:
self.dockwidget_ipython.hide()

@logging_decorator @logging_decorator
def show_configs(self): def show_configs(self):
"""Interface with System Configurations""" """Interface with System Configurations"""
w = ConfigDialog(parent=self) config_dialog = SWConfigDialog(parent=self)
if w.exec_(): if config_dialog.exec_():
logging.info("Saved/Updated Default Configurations") logging.info("Saved/Updated Default Configurations")


def about(self): def about(self):
""" """ """ """
msgBox = QMessageBox(parent=self) message_box = QMessageBox(parent=self)
msgBox.setText( message_box.setText(
f"Copyright {date.today().year} - SERP Wings" f"Copyright {date.today().year} - SERP Wings"
f"<br><br>{CONFIGS['APPLICATION_NAME']} Version - {VERISON}" f"<br><br>{CONFIGS['APPLICATION_NAME']} Version - {VERISON}"
"<br><br>This work is an opensource project under <br>GNU General Public License v3 or later (GPLv3+)" "<br><br>This work is an opensource project under <br>GNU General Public License v3 or later (GPLv3+)"
f"<br>More Information at <a href='https://{CONFIGS['ORGANIZATION_DOMAIN']}/'>{CONFIGS['ORGANIZATION_NAME']}</a>" f"<br>More Information at <a href='https://{CONFIGS['ORGANIZATION_DOMAIN']}/'>{CONFIGS['ORGANIZATION_NAME']}</a>"
) )
msgBox.addButton(QMessageBox.Ok).setIcon( message_box.addButton(QMessageBox.Ok).setIcon(
QIcon(f"{SHARE_FOLDER_PATH}/icons/ok.svg") QIcon(f"{SHARE_FOLDER_PATH}/icons/ok.svg")
) )
msgBox.setWindowIcon(QIcon(f"{SHARE_FOLDER_PATH}/icons/static-wordpress.svg")) message_box.setWindowIcon(
msgBox.setTextFormat(Qt.RichText) QIcon(f"{SHARE_FOLDER_PATH}/icons/static-wordpress.svg")
msgBox.setWindowTitle("About Us") )
msgBox.exec() message_box.setTextFormat(Qt.RichText)
message_box.setWindowTitle("About Us")
message_box.exec()


@logging_decorator @logging_decorator
def new_project(self): def new_project(self):
"""Closing current project will automatically start a new project.""" """Closing current project will automatically start a new project."""
self.close_project() self.close_project()


proj_dialog = ProjectDialog(self, self._project, title_="New Project") project_dialog = SWProjectDialog(self, self._project, title_="New Project")
if proj_dialog.exec_(): if project_dialog.exec_():
self._project = proj_dialog._project self._project = project_dialog._project
self.app_configurations.setValue("last-project", self._project.output) self.app_configurations.setValue("last-project", self._project.output)


if Path(self._project.output).is_dir(): if Path(self._project.output).is_dir():
@ -377,7 +403,7 @@ class StaticWordPressGUI(QMainWindow):
if project_path.exists(): if project_path.exists():
self._project.open(project_path) self._project.open(project_path)
if self._project.is_open(): if self._project.is_open():
project_dialog = ProjectDialog( project_dialog = SWProjectDialog(
parent=self, project_=self._project, title_="Project Properties" parent=self, project_=self._project, title_="Project Properties"
) )


@ -418,7 +444,7 @@ class StaticWordPressGUI(QMainWindow):
def show_project(self): def show_project(self):
"""showing static-wordpress Project File""" """showing static-wordpress Project File"""
if self._project.is_open(): if self._project.is_open():
project_dialog = ProjectDialog( project_dialog = SWProjectDialog(
self, self._project, title_="Current Project" self, self._project, title_="Current Project"
) )
if project_dialog.exec_(): if project_dialog.exec_():
@ -500,7 +526,7 @@ class StaticWordPressGUI(QMainWindow):
if self._bg_thread.isRunning(): if self._bg_thread.isRunning():
self._bg_thread.quit() self._bg_thread.quit()


self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)


if self._project.src_type == SOURCE.ZIP: if self._project.src_type == SOURCE.ZIP:
@ -569,7 +595,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -583,7 +609,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -597,7 +623,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -611,7 +637,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -625,7 +651,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -639,7 +665,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -654,7 +680,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -689,7 +715,7 @@ class StaticWordPressGUI(QMainWindow):
if self._bg_thread.isRunning(): if self._bg_thread.isRunning():
self._bg_thread.quit() self._bg_thread.quit()


self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
@ -705,7 +731,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -720,7 +746,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -735,7 +761,7 @@ class StaticWordPressGUI(QMainWindow):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)
@ -791,7 +817,7 @@ class StaticWordPressGUI(QMainWindow):


def main(): def main():
app = QApplication(sys.argv) app = QApplication(sys.argv)
wind = StaticWordPressGUI() wind = SWMainWindow()
sys.exit(app.exec_()) sys.exit(app.exec_())




View file

@ -72,23 +72,23 @@ from ..core.constants import (


from ..core.project import Project from ..core.project import Project
from ..core.utils import is_url_valid from ..core.utils import is_url_valid
from ..gui.workflow import WorkflowGUI from ..gui.workflow import SWWorkflowObject


# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++
# IMPLEMENATIONS # IMPLEMENATIONS
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++




class ProjectDialog(QDialog): class SWProjectDialog(QDialog):
def __init__(self, parent, project_, title_="Project Settings"): def __init__(self, parent, project_, title_="Project Settings"):
super(ProjectDialog, self).__init__(parent=parent) super(SWProjectDialog, self).__init__(parent=parent)
self.appConfigurations = QSettings( self.appConfigurations = QSettings(
CONFIGS["APPLICATION_NAME"], CONFIGS["APPLICATION_NAME"] CONFIGS["APPLICATION_NAME"], CONFIGS["APPLICATION_NAME"]
) )


self._project = project_ self._project = project_
self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()


vertical_layout_project = QVBoxLayout() vertical_layout_project = QVBoxLayout()
groupbox_general_settings = QGroupBox("General Settings") groupbox_general_settings = QGroupBox("General Settings")
@ -390,7 +390,7 @@ class ProjectDialog(QDialog):
self._bg_thread.quit() self._bg_thread.quit()


self._bg_thread = QThread(parent=self) self._bg_thread = QThread(parent=self)
self._bg_worker = WorkflowGUI() self._bg_worker = SWWorkflowObject()
self._bg_worker.set_project(project_=self._project) self._bg_worker.set_project(project_=self._project)
self._bg_worker.moveToThread(self._bg_thread) self._bg_worker.moveToThread(self._bg_thread)
self._bg_thread.finished.connect(self._bg_worker.deleteLater) self._bg_thread.finished.connect(self._bg_worker.deleteLater)

View file

@ -51,9 +51,9 @@ from ..core.constants import CONFIGS, SHARE_FOLDER_PATH
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++




class RawTextDialog(QDialog): class SWRawTextDialog(QDialog):
def __init__(self, parent, src_url: str, dest_url: str): def __init__(self, parent, src_url: str, dest_url: str):
super(RawTextDialog, self).__init__(parent=parent) super(SWRawTextDialog, self).__init__(parent=parent)
self.appConfigurations = QSettings( self.appConfigurations = QSettings(
CONFIGS["APPLICATION_NAME"], CONFIGS["APPLICATION_NAME"] CONFIGS["APPLICATION_NAME"], CONFIGS["APPLICATION_NAME"]
) )

View file

@ -44,7 +44,7 @@ from ..gui.utils import logging_decorator, progress_decorator
# +++++++++++++++++++++++++++++++++++++++++++++++++++++ # +++++++++++++++++++++++++++++++++++++++++++++++++++++




class WorkflowGUI(QObject): class SWWorkflowObject(QObject):
emit_sitemap_location = pyqtSignal(str) emit_sitemap_location = pyqtSignal(str)
emit_progress = pyqtSignal(str, int) emit_progress = pyqtSignal(str, int)
emit_verification = pyqtSignal(dict) emit_verification = pyqtSignal(dict)

View file

@ -164,6 +164,19 @@
"seperator": false, "seperator": false,
"toolbar": "toolbar_edit" "toolbar": "toolbar_edit"
}, },
{
"icon": "/icons/python.svg",
"name": "action_ipython_widget",
"visible": true,
"text": "&IPython",
"shortcut": "F10",
"tooltip": "IPython (F10)",
"function": "self.startIPython",
"setCheckable": true,
"menu": "menu_edit",
"seperator": false,
"toolbar": "toolbar_edit"
},
{ {
"icon": "/icons/configs.svg", "icon": "/icons/configs.svg",
"name": "action_file_project_close", "name": "action_file_project_close",

View file

@ -0,0 +1,38 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
height="24"
viewBox="0 -960 960 960"
width="24"
version="1.1"
id="svg1"
sodipodi:docname="python.svg"
inkscape:version="1.3 (0e150ed6c4, 2023-07-21)"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs1" />
<sodipodi:namedview
id="namedview1"
pagecolor="#ffffff"
bordercolor="#000000"
borderopacity="0.25"
inkscape:showpageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:deskcolor="#d1d1d1"
inkscape:zoom="17.397773"
inkscape:cx="21.899355"
inkscape:cy="6.6962593"
inkscape:window-width="3440"
inkscape:window-height="1377"
inkscape:window-x="1912"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="svg1" />
<path
d="M 340.38781,-480 76.995746,-744.83136 157.5966,-825.43221 503.02881,-480 157.5966,-134.56779 76.995746,-215.16864 Z m 379.97543,0 -263.39206,-264.83136 80.60085,-80.60085 L 883.00425,-480 537.57203,-134.56779 456.97118,-215.16864 Z"
id="path1"
style="stroke-width:1.4393" />
</svg>

After

Width:  |  Height:  |  Size: 1.3 KiB