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