Converted project to C++.
This commit is contained in:
		@@ -1,175 +0,0 @@
 | 
			
		||||
import traceback
 | 
			
		||||
 | 
			
		||||
from PyQt5.QtWidgets import QDialog, QCommandLinkButton, QListWidgetItem, QFileDialog, QWidget, QHBoxLayout, QLabel, QToolButton, QLayout
 | 
			
		||||
from PyQt5.QtGui import QPixmap, QResizeEvent, QFont
 | 
			
		||||
from PyQt5.QtCore import Qt, pyqtSignal
 | 
			
		||||
 | 
			
		||||
from ui.welcome.welcome_dialog_ui import Ui_WelcomeDialog
 | 
			
		||||
from model import RecentProject
 | 
			
		||||
from business import ProjectManager
 | 
			
		||||
from properties.config import PROJECT_EXTENSION
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class RecentProjectListWidget(QWidget):
 | 
			
		||||
    
 | 
			
		||||
    deleted = pyqtSignal()
 | 
			
		||||
    pinned = pyqtSignal(bool)
 | 
			
		||||
 | 
			
		||||
    def __init__(self, recentProject : RecentProject):
 | 
			
		||||
        super().__init__()
 | 
			
		||||
        self.project = recentProject
 | 
			
		||||
        self.__selected = False
 | 
			
		||||
        self.setupUi()
 | 
			
		||||
        self.setupActions()
 | 
			
		||||
        self.__setProject(recentProject)
 | 
			
		||||
        self.setSelected(False)
 | 
			
		||||
 | 
			
		||||
    def setupUi(self):
 | 
			
		||||
        layout = QHBoxLayout()
 | 
			
		||||
 | 
			
		||||
        # label
 | 
			
		||||
        self.__text = QLabel()
 | 
			
		||||
        layout.addWidget(self.__text)
 | 
			
		||||
 | 
			
		||||
        # space
 | 
			
		||||
        layout.addStretch()
 | 
			
		||||
 | 
			
		||||
        # pin button
 | 
			
		||||
        self.__pin_button = QToolButton()
 | 
			
		||||
        self.__pin_button.setFont(QFont("Font Awesome 5 Free"))
 | 
			
		||||
        self.__pin_button.setText("\uf08d")
 | 
			
		||||
        self.__pin_button.setCheckable(True)
 | 
			
		||||
        layout.addWidget(self.__pin_button)
 | 
			
		||||
 | 
			
		||||
        # delete button
 | 
			
		||||
        self.__del_button = QToolButton()
 | 
			
		||||
        self.__del_button.setFont(QFont("Font Awesome 5 Free"))
 | 
			
		||||
        self.__del_button.setText("\uf2ed")
 | 
			
		||||
        layout.addWidget(self.__del_button)
 | 
			
		||||
 | 
			
		||||
        # pin indicator
 | 
			
		||||
        self.__pin_indicator = QLabel()
 | 
			
		||||
        self.__pin_indicator.setFont(QFont("Font Awesome 5 Free"))
 | 
			
		||||
        self.__pin_indicator.setText("\uf08d")
 | 
			
		||||
        layout.addWidget(self.__pin_indicator)
 | 
			
		||||
 | 
			
		||||
        # done
 | 
			
		||||
        layout.setSizeConstraint(QLayout.SetMinimumSize)
 | 
			
		||||
        self.setLayout(layout)
 | 
			
		||||
 | 
			
		||||
    def setupActions(self):
 | 
			
		||||
        self.__pin_button.toggled.connect(self.__pinnedToggled)
 | 
			
		||||
        self.__del_button.pressed.connect(self.deleted)
 | 
			
		||||
        
 | 
			
		||||
    def setSelected(self, selected : bool = True):
 | 
			
		||||
        self.__selected = selected
 | 
			
		||||
        self.__pin_button.setVisible(selected)
 | 
			
		||||
        self.__del_button.setVisible(selected)
 | 
			
		||||
        self.__pin_indicator.setVisible(not self.__selected and self.__pin_button.isChecked())
 | 
			
		||||
 | 
			
		||||
    def setPinned(self, isPinned : bool = True):
 | 
			
		||||
        self.__pin_button.setChecked(isPinned)
 | 
			
		||||
 | 
			
		||||
    def __setProject(self, project : RecentProject):
 | 
			
		||||
        self.__text = project.name
 | 
			
		||||
        self.setPinned(project.pinned)
 | 
			
		||||
 | 
			
		||||
    def __pinnedToggled(self, isPinned : bool):
 | 
			
		||||
        self.__pin_indicator.setVisible(not self.__selected and isPinned)
 | 
			
		||||
        if (isPinned != self.project.pinned):
 | 
			
		||||
            self.pinned.emit(isPinned)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class WelcomeDialog(QDialog):
 | 
			
		||||
    NEW_PROJECT = 0
 | 
			
		||||
    OPEN_PROJECT = 1
 | 
			
		||||
 | 
			
		||||
    def __init__(self, projectManager : ProjectManager, parent : QWidget = None):
 | 
			
		||||
        super().__init__(parent)
 | 
			
		||||
        self.__projectManager = projectManager
 | 
			
		||||
        self.resultAction : int = None
 | 
			
		||||
        self.projectToOpen : str = None
 | 
			
		||||
        self.setResult(QDialog.Rejected)
 | 
			
		||||
        self.setupUi()
 | 
			
		||||
        self.setupActions()
 | 
			
		||||
        self.populateRecentProjects()
 | 
			
		||||
 | 
			
		||||
    def setupUi(self) -> None:
 | 
			
		||||
        self.ui = Ui_WelcomeDialog()
 | 
			
		||||
        self.ui.setupUi(self)
 | 
			
		||||
        self.image = QPixmap(self.ui.picture.pixmap())
 | 
			
		||||
 | 
			
		||||
    def setupActions(self) -> None:
 | 
			
		||||
        self.ui.buttonNewProject.pressed.connect(self.newProjectPressed)
 | 
			
		||||
        self.ui.buttonOpenProject.pressed.connect(self.openProjectPressed)
 | 
			
		||||
        self.ui.listRecentProjects.currentItemChanged.connect(self.listRecentProjectsCurrentChanged)
 | 
			
		||||
        self.ui.listRecentProjects.itemActivated.connect(self.listRecentProjectsItemActivated)
 | 
			
		||||
 | 
			
		||||
    def resizeEvent(self, event : QResizeEvent) -> None:
 | 
			
		||||
        super().resizeEvent(event)
 | 
			
		||||
        
 | 
			
		||||
        picSize = self.ui.picture.size()
 | 
			
		||||
        pic = self.image.scaled(picSize, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation)
 | 
			
		||||
        self.ui.picture.setPixmap(pic)
 | 
			
		||||
 | 
			
		||||
    def populateRecentProjects(self) -> None:
 | 
			
		||||
        projects = list(self.__projectManager.getRecentProjects())
 | 
			
		||||
        projects = sorted(projects, key=lambda x: (x.pinned, x.dateAccessed), reverse=True)
 | 
			
		||||
        
 | 
			
		||||
        for project in projects:
 | 
			
		||||
 | 
			
		||||
            widget = RecentProjectListWidget(project)
 | 
			
		||||
            widget.pinned.connect(self.__projectPinned)
 | 
			
		||||
            widget.deleted.connect(self.__projectDeleted)
 | 
			
		||||
 | 
			
		||||
            item = QListWidgetItem(project.name)
 | 
			
		||||
            item.setData(Qt.UserRole, project)
 | 
			
		||||
            item.setSizeHint(widget.sizeHint())
 | 
			
		||||
 | 
			
		||||
            self.ui.listRecentProjects.addItem(item)
 | 
			
		||||
            self.ui.listRecentProjects.setItemWidget(item, widget)
 | 
			
		||||
 | 
			
		||||
    def newProjectPressed(self) -> None:
 | 
			
		||||
        self.resultAction = WelcomeDialog.NEW_PROJECT
 | 
			
		||||
        self.accept()
 | 
			
		||||
 | 
			
		||||
    def openProjectPressed(self) -> None:
 | 
			
		||||
        proj = QFileDialog.getOpenFileName(
 | 
			
		||||
            self, 
 | 
			
		||||
            self.tr('Open project'), 
 | 
			
		||||
            '', 
 | 
			
		||||
            self.tr(f'Project files (*.{PROJECT_EXTENSION});;All files (*.*)'))
 | 
			
		||||
 | 
			
		||||
        if proj[0]:
 | 
			
		||||
            self.projectToOpen = proj[0]
 | 
			
		||||
            self.resultAction = WelcomeDialog.OPEN_PROJECT
 | 
			
		||||
            self.accept()
 | 
			
		||||
 | 
			
		||||
    def listRecentProjectsCurrentChanged(self, current : QListWidgetItem, previous : QListWidgetItem) -> None:
 | 
			
		||||
        if not current is None:
 | 
			
		||||
            RecentProjectListWidget = self.ui.listRecentProjects.itemWidget(current)
 | 
			
		||||
            RecentProjectListWidget.setSelected(True)
 | 
			
		||||
            
 | 
			
		||||
        if not previous is None:
 | 
			
		||||
            RecentProjectListWidget = self.ui.listRecentProjects.itemWidget(previous)
 | 
			
		||||
            if not RecentProjectListWidget is None:
 | 
			
		||||
                RecentProjectListWidget.setSelected(False)
 | 
			
		||||
 | 
			
		||||
    def listRecentProjectsItemActivated(self, item : QListWidgetItem) -> None:
 | 
			
		||||
        project : RecentProject = item.data(Qt.UserRole)
 | 
			
		||||
        self.resultAction = WelcomeDialog.OPEN_PROJECT
 | 
			
		||||
        self.projectToOpen = project.path
 | 
			
		||||
        self.accept()
 | 
			
		||||
 | 
			
		||||
    def __projectPinned(self, isPinned : bool) -> None:
 | 
			
		||||
        project = self.ui.listRecentProjects.currentItem().data(Qt.UserRole)
 | 
			
		||||
        self.__projectManager.pinRecentProject(project, isPinned)
 | 
			
		||||
 | 
			
		||||
    def __projectDeleted(self) -> None:
 | 
			
		||||
        project = self.ui.listRecentProjects.currentItem().data(Qt.UserRole)
 | 
			
		||||
        try:
 | 
			
		||||
            self.__projectManager.deleteRecentProject(project)
 | 
			
		||||
            self.ui.listRecentProjects.takeItem(self.ui.listRecentProjects.currentRow())
 | 
			
		||||
        except:
 | 
			
		||||
            print("Error while deleting! ")
 | 
			
		||||
            traceback.print_exc()
 | 
			
		||||
@@ -1,90 +0,0 @@
 | 
			
		||||
# -*- coding: utf-8 -*-
 | 
			
		||||
 | 
			
		||||
# Form implementation generated from reading ui file 'ui/welcome/welcome_dialog.ui'
 | 
			
		||||
#
 | 
			
		||||
# Created by: PyQt5 UI code generator 5.10.1
 | 
			
		||||
#
 | 
			
		||||
# WARNING! All changes made in this file will be lost!
 | 
			
		||||
 | 
			
		||||
from PyQt5 import QtCore, QtGui, QtWidgets
 | 
			
		||||
 | 
			
		||||
class Ui_WelcomeDialog(object):
 | 
			
		||||
    def setupUi(self, WelcomeDialog):
 | 
			
		||||
        WelcomeDialog.setObjectName("WelcomeDialog")
 | 
			
		||||
        WelcomeDialog.setWindowModality(QtCore.Qt.WindowModal)
 | 
			
		||||
        WelcomeDialog.resize(667, 601)
 | 
			
		||||
        self.verticalLayout = QtWidgets.QVBoxLayout(WelcomeDialog)
 | 
			
		||||
        self.verticalLayout.setObjectName("verticalLayout")
 | 
			
		||||
        self.picture = QtWidgets.QLabel(WelcomeDialog)
 | 
			
		||||
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Ignored, QtWidgets.QSizePolicy.Fixed)
 | 
			
		||||
        sizePolicy.setHorizontalStretch(0)
 | 
			
		||||
        sizePolicy.setVerticalStretch(0)
 | 
			
		||||
        sizePolicy.setHeightForWidth(self.picture.sizePolicy().hasHeightForWidth())
 | 
			
		||||
        self.picture.setSizePolicy(sizePolicy)
 | 
			
		||||
        self.picture.setMinimumSize(QtCore.QSize(0, 120))
 | 
			
		||||
        self.picture.setMaximumSize(QtCore.QSize(16777215, 120))
 | 
			
		||||
        self.picture.setText("")
 | 
			
		||||
        self.picture.setPixmap(QtGui.QPixmap(":/WelcomeBanner.jpg"))
 | 
			
		||||
        self.picture.setScaledContents(False)
 | 
			
		||||
        self.picture.setAlignment(QtCore.Qt.AlignCenter)
 | 
			
		||||
        self.picture.setObjectName("picture")
 | 
			
		||||
        self.verticalLayout.addWidget(self.picture)
 | 
			
		||||
        self.horizontalLayout = QtWidgets.QHBoxLayout()
 | 
			
		||||
        self.horizontalLayout.setObjectName("horizontalLayout")
 | 
			
		||||
        self.panelRecentProjects = QtWidgets.QWidget(WelcomeDialog)
 | 
			
		||||
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
 | 
			
		||||
        sizePolicy.setHorizontalStretch(2)
 | 
			
		||||
        sizePolicy.setVerticalStretch(0)
 | 
			
		||||
        sizePolicy.setHeightForWidth(self.panelRecentProjects.sizePolicy().hasHeightForWidth())
 | 
			
		||||
        self.panelRecentProjects.setSizePolicy(sizePolicy)
 | 
			
		||||
        self.panelRecentProjects.setObjectName("panelRecentProjects")
 | 
			
		||||
        self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.panelRecentProjects)
 | 
			
		||||
        self.verticalLayout_3.setObjectName("verticalLayout_3")
 | 
			
		||||
        self.labelRecentProjects = QtWidgets.QLabel(self.panelRecentProjects)
 | 
			
		||||
        font = QtGui.QFont()
 | 
			
		||||
        font.setPointSize(13)
 | 
			
		||||
        self.labelRecentProjects.setFont(font)
 | 
			
		||||
        self.labelRecentProjects.setObjectName("labelRecentProjects")
 | 
			
		||||
        self.verticalLayout_3.addWidget(self.labelRecentProjects)
 | 
			
		||||
        self.listRecentProjects = QtWidgets.QListWidget(self.panelRecentProjects)
 | 
			
		||||
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Minimum)
 | 
			
		||||
        sizePolicy.setHorizontalStretch(0)
 | 
			
		||||
        sizePolicy.setVerticalStretch(1)
 | 
			
		||||
        sizePolicy.setHeightForWidth(self.listRecentProjects.sizePolicy().hasHeightForWidth())
 | 
			
		||||
        self.listRecentProjects.setSizePolicy(sizePolicy)
 | 
			
		||||
        self.listRecentProjects.setObjectName("listRecentProjects")
 | 
			
		||||
        self.verticalLayout_3.addWidget(self.listRecentProjects)
 | 
			
		||||
        self.horizontalLayout.addWidget(self.panelRecentProjects)
 | 
			
		||||
        self.panelButtons = QtWidgets.QWidget(WelcomeDialog)
 | 
			
		||||
        sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Preferred)
 | 
			
		||||
        sizePolicy.setHorizontalStretch(1)
 | 
			
		||||
        sizePolicy.setVerticalStretch(0)
 | 
			
		||||
        sizePolicy.setHeightForWidth(self.panelButtons.sizePolicy().hasHeightForWidth())
 | 
			
		||||
        self.panelButtons.setSizePolicy(sizePolicy)
 | 
			
		||||
        self.panelButtons.setObjectName("panelButtons")
 | 
			
		||||
        self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.panelButtons)
 | 
			
		||||
        self.verticalLayout_2.setObjectName("verticalLayout_2")
 | 
			
		||||
        spacerItem = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.MinimumExpanding)
 | 
			
		||||
        self.verticalLayout_2.addItem(spacerItem)
 | 
			
		||||
        self.buttonNewProject = QtWidgets.QCommandLinkButton(self.panelButtons)
 | 
			
		||||
        self.buttonNewProject.setObjectName("buttonNewProject")
 | 
			
		||||
        self.verticalLayout_2.addWidget(self.buttonNewProject)
 | 
			
		||||
        self.buttonOpenProject = QtWidgets.QCommandLinkButton(self.panelButtons)
 | 
			
		||||
        self.buttonOpenProject.setObjectName("buttonOpenProject")
 | 
			
		||||
        self.verticalLayout_2.addWidget(self.buttonOpenProject)
 | 
			
		||||
        self.horizontalLayout.addWidget(self.panelButtons)
 | 
			
		||||
        self.verticalLayout.addLayout(self.horizontalLayout)
 | 
			
		||||
 | 
			
		||||
        self.retranslateUi(WelcomeDialog)
 | 
			
		||||
        QtCore.QMetaObject.connectSlotsByName(WelcomeDialog)
 | 
			
		||||
 | 
			
		||||
    def retranslateUi(self, WelcomeDialog):
 | 
			
		||||
        _translate = QtCore.QCoreApplication.translate
 | 
			
		||||
        WelcomeDialog.setWindowTitle(_translate("WelcomeDialog", "Welcome"))
 | 
			
		||||
        self.labelRecentProjects.setText(_translate("WelcomeDialog", "Recent projects"))
 | 
			
		||||
        self.buttonNewProject.setText(_translate("WelcomeDialog", "&New Project"))
 | 
			
		||||
        self.buttonNewProject.setDescription(_translate("WelcomeDialog", "Create a new project."))
 | 
			
		||||
        self.buttonOpenProject.setText(_translate("WelcomeDialog", "&Open Project"))
 | 
			
		||||
        self.buttonOpenProject.setDescription(_translate("WelcomeDialog", "Open an existing project."))
 | 
			
		||||
 | 
			
		||||
import resources_rc
 | 
			
		||||
							
								
								
									
										14
									
								
								ui/welcome/welcomedialog.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								ui/welcome/welcomedialog.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#include "welcomedialog.h"
 | 
			
		||||
#include "ui_welcomedialog.h"
 | 
			
		||||
 | 
			
		||||
WelcomeDialog::WelcomeDialog(QWidget *parent) :
 | 
			
		||||
    QDialog(parent),
 | 
			
		||||
    ui(new Ui::WelcomeDialog)
 | 
			
		||||
{
 | 
			
		||||
    ui->setupUi(this);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
WelcomeDialog::~WelcomeDialog()
 | 
			
		||||
{
 | 
			
		||||
    delete ui;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										22
									
								
								ui/welcome/welcomedialog.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										22
									
								
								ui/welcome/welcomedialog.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
#ifndef WELCOMEDIALOG_H
 | 
			
		||||
#define WELCOMEDIALOG_H
 | 
			
		||||
 | 
			
		||||
#include <QDialog>
 | 
			
		||||
 | 
			
		||||
namespace Ui {
 | 
			
		||||
class WelcomeDialog;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class WelcomeDialog : public QDialog
 | 
			
		||||
{
 | 
			
		||||
    Q_OBJECT
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
    explicit WelcomeDialog(QWidget *parent = 0);
 | 
			
		||||
    ~WelcomeDialog();
 | 
			
		||||
 | 
			
		||||
private:
 | 
			
		||||
    Ui::WelcomeDialog *ui;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // WELCOMEDIALOG_H
 | 
			
		||||
@@ -41,7 +41,7 @@
 | 
			
		||||
      <string/>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="pixmap">
 | 
			
		||||
      <pixmap resource="../../resources.qrc">:/WelcomeBanner.jpg</pixmap>
 | 
			
		||||
      <pixmap resource="../../resources/appresources.qrc">:/WelcomeBanner.jpg</pixmap>
 | 
			
		||||
     </property>
 | 
			
		||||
     <property name="scaledContents">
 | 
			
		||||
      <bool>false</bool>
 | 
			
		||||
@@ -140,7 +140,7 @@
 | 
			
		||||
  </layout>
 | 
			
		||||
 </widget>
 | 
			
		||||
 <resources>
 | 
			
		||||
  <include location="../../resources.qrc"/>
 | 
			
		||||
  <include location="../../resources/appresources.qrc"/>
 | 
			
		||||
 </resources>
 | 
			
		||||
 <connections/>
 | 
			
		||||
</ui>
 | 
			
		||||
		Reference in New Issue
	
	Block a user