Started work on Ember
This commit is contained in:
26
ui/ember_application.py
Normal file
26
ui/ember_application.py
Normal file
@ -0,0 +1,26 @@
|
||||
from PyQt5.QtWidgets import QApplication
|
||||
from PyQt5.QtGui import QFontDatabase
|
||||
from ui.main_window import MainWindow
|
||||
from business.project_manager import ProjectManager
|
||||
from storage.appdata_storage import AppDataStorage
|
||||
|
||||
class EmberApplication(QApplication):
|
||||
|
||||
def __init__(self, argv):
|
||||
super().__init__(argv)
|
||||
|
||||
def start(self):
|
||||
|
||||
QFontDatabase.addApplicationFont(":/FontAwesome-Solid.otf")
|
||||
QFontDatabase.addApplicationFont(":/FontAwesome-Regular.otf")
|
||||
|
||||
# setup resources
|
||||
appDataStorage = AppDataStorage()
|
||||
projectManager = ProjectManager(appDataStorage)
|
||||
projectManager.debug_populateRecentProjects()
|
||||
|
||||
# show main window
|
||||
mainwindow = MainWindow(projectManager)
|
||||
mainwindow.show()
|
||||
|
||||
exit(self.exec_())
|
31
ui/main_window.py
Normal file
31
ui/main_window.py
Normal file
@ -0,0 +1,31 @@
|
||||
from PyQt5.QtWidgets import QMainWindow, QVBoxLayout, QWidget
|
||||
|
||||
from ui.project.project_panel import ProjectPanel
|
||||
from ui.welcome.welcome_dialog import WelcomeDialog
|
||||
|
||||
class MainWindow(QMainWindow):
|
||||
|
||||
def __init__(self, projectManager):
|
||||
super().__init__()
|
||||
self.__projectManager = projectManager
|
||||
self.setupUi()
|
||||
self.initializeApp()
|
||||
|
||||
def setupUi(self):
|
||||
self.projectPanel = ProjectPanel()
|
||||
|
||||
layout = QVBoxLayout()
|
||||
layout.addWidget(self.projectPanel)
|
||||
|
||||
cwidget = QWidget()
|
||||
cwidget.setLayout(layout)
|
||||
|
||||
self.setCentralWidget(cwidget)
|
||||
|
||||
def initializeApp(self):
|
||||
|
||||
# Show welcome dialog
|
||||
welcome = WelcomeDialog(self.__projectManager)
|
||||
res = welcome.exec()
|
||||
|
||||
print("Dialog result:", res)
|
12
ui/project/project_panel.py
Normal file
12
ui/project/project_panel.py
Normal file
@ -0,0 +1,12 @@
|
||||
from PyQt5 import QtCore, QtWidgets, uic
|
||||
import os
|
||||
|
||||
from ui.project.project_panel_ui import Ui_Form
|
||||
|
||||
class ProjectPanel(QtWidgets.QWidget):
|
||||
|
||||
def __init__(self):
|
||||
super(ProjectPanel, self).__init__()
|
||||
self.ui = Ui_Form()
|
||||
self.ui.setupUi(self)
|
||||
|
58
ui/project/project_panel.ui
Normal file
58
ui/project/project_panel.ui
Normal file
@ -0,0 +1,58 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>Form</class>
|
||||
<widget class="QWidget" name="Form">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>400</width>
|
||||
<height>300</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>90</x>
|
||||
<y>40</y>
|
||||
<width>84</width>
|
||||
<height>34</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>PushButton</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>80</x>
|
||||
<y>150</y>
|
||||
<width>86</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>CheckBox</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBox_2">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>80</x>
|
||||
<y>180</y>
|
||||
<width>86</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>CheckBox</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
34
ui/project/project_panel_ui.py
Normal file
34
ui/project/project_panel_ui.py
Normal file
@ -0,0 +1,34 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
# Form implementation generated from reading ui file 'ui/project/project_panel.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_Form(object):
|
||||
def setupUi(self, Form):
|
||||
Form.setObjectName("Form")
|
||||
Form.resize(400, 300)
|
||||
self.pushButton = QtWidgets.QPushButton(Form)
|
||||
self.pushButton.setGeometry(QtCore.QRect(90, 40, 84, 34))
|
||||
self.pushButton.setObjectName("pushButton")
|
||||
self.checkBox = QtWidgets.QCheckBox(Form)
|
||||
self.checkBox.setGeometry(QtCore.QRect(80, 150, 86, 22))
|
||||
self.checkBox.setObjectName("checkBox")
|
||||
self.checkBox_2 = QtWidgets.QCheckBox(Form)
|
||||
self.checkBox_2.setGeometry(QtCore.QRect(80, 180, 86, 22))
|
||||
self.checkBox_2.setObjectName("checkBox_2")
|
||||
|
||||
self.retranslateUi(Form)
|
||||
QtCore.QMetaObject.connectSlotsByName(Form)
|
||||
|
||||
def retranslateUi(self, Form):
|
||||
_translate = QtCore.QCoreApplication.translate
|
||||
Form.setWindowTitle(_translate("Form", "Form"))
|
||||
self.pushButton.setText(_translate("Form", "PushButton"))
|
||||
self.checkBox.setText(_translate("Form", "CheckBox"))
|
||||
self.checkBox_2.setText(_translate("Form", "CheckBox"))
|
||||
|
33
ui/welcome/recent_project.py
Normal file
33
ui/welcome/recent_project.py
Normal file
@ -0,0 +1,33 @@
|
||||
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QToolButton, QLayout
|
||||
from PyQt5.QtGui import QFont
|
||||
|
||||
class RecentProjectWidget(QWidget):
|
||||
def __init__(self, recentProject):
|
||||
super().__init__()
|
||||
self.setupUi()
|
||||
self.setProject(recentProject)
|
||||
|
||||
def setupUi(self):
|
||||
layout = QHBoxLayout()
|
||||
|
||||
# label
|
||||
self.__text = QLabel()
|
||||
layout.addWidget(self.__text)
|
||||
|
||||
# space
|
||||
layout.addStretch()
|
||||
|
||||
# pin button
|
||||
self.__button = QToolButton()
|
||||
self.__button.setFont(QFont("Font Awesome 5 Free"))
|
||||
self.__button.setText("\uf08d")
|
||||
self.__button.setCheckable(True)
|
||||
layout.addWidget(self.__button)
|
||||
|
||||
# done
|
||||
layout.setSizeConstraint(QLayout.SetMinimumSize)
|
||||
self.setLayout(layout)
|
||||
|
||||
def setProject(self, project):
|
||||
self.__text = project['name']
|
||||
self.__button.setChecked(project['pinned'])
|
65
ui/welcome/welcome_dialog.py
Normal file
65
ui/welcome/welcome_dialog.py
Normal file
@ -0,0 +1,65 @@
|
||||
import os
|
||||
import functools
|
||||
from enum import Enum
|
||||
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QWidget, QCommandLinkButton, QListWidgetItem
|
||||
from PyQt5.QtGui import QPixmap
|
||||
from PyQt5.QtCore import Qt
|
||||
from PyQt5 import uic
|
||||
|
||||
from util import str_compare
|
||||
from ui.welcome.recent_project import RecentProjectWidget
|
||||
from ui.welcome.welcome_dialog_ui import Ui_WelcomeDialog
|
||||
|
||||
class WelcomeDialogResult(Enum):
|
||||
NewProject = 0
|
||||
OpenProject = 1
|
||||
OpenRecentProject = 2
|
||||
|
||||
class WelcomeDialog(QDialog):
|
||||
|
||||
def __init__(self, projectManager):
|
||||
super().__init__()
|
||||
self.__projectManager = projectManager
|
||||
self.__resultAction = None
|
||||
self.setResult(QDialog.Rejected)
|
||||
self.setupUi()
|
||||
self.setupActions()
|
||||
self.populateRecentProjects()
|
||||
|
||||
def setupUi(self):
|
||||
self.ui = Ui_WelcomeDialog()
|
||||
self.ui.setupUi(self)
|
||||
self.image = QPixmap(self.ui.picture.pixmap())
|
||||
|
||||
def setupActions(self):
|
||||
self.ui.buttonNewProject.pressed.connect(self.newProjectPressed)
|
||||
self.ui.buttonOpenProject.pressed.connect(self.openProjectPressed)
|
||||
|
||||
def resizeEvent(self, event):
|
||||
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):
|
||||
projects = list(self.__projectManager.getRecentProjects())
|
||||
projects = sorted(projects, key=lambda x: (x['pinned'], x['date']), reverse=True)
|
||||
|
||||
for project in projects:
|
||||
item = QListWidgetItem(project['name'])
|
||||
item.setData(Qt.UserRole, project)
|
||||
widget = RecentProjectWidget(project)
|
||||
item.setSizeHint(widget.sizeHint())
|
||||
|
||||
self.ui.listRecentProjects.addItem(item)
|
||||
self.ui.listRecentProjects.setItemWidget(item, widget)
|
||||
|
||||
def newProjectPressed(self):
|
||||
self.__resultAction = WelcomeDialogResult.NewProject
|
||||
self.accept()
|
||||
|
||||
def openProjectPressed(self):
|
||||
self.__resultAction = WelcomeDialogResult.OpenProject
|
||||
self.accept()
|
146
ui/welcome/welcome_dialog.ui
Normal file
146
ui/welcome/welcome_dialog.ui
Normal file
@ -0,0 +1,146 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>WelcomeDialog</class>
|
||||
<widget class="QDialog" name="WelcomeDialog">
|
||||
<property name="windowModality">
|
||||
<enum>Qt::WindowModal</enum>
|
||||
</property>
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>667</width>
|
||||
<height>601</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Welcome</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QLabel" name="picture">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Ignored" vsizetype="Fixed">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<property name="minimumSize">
|
||||
<size>
|
||||
<width>0</width>
|
||||
<height>120</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="maximumSize">
|
||||
<size>
|
||||
<width>16777215</width>
|
||||
<height>120</height>
|
||||
</size>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string/>
|
||||
</property>
|
||||
<property name="pixmap">
|
||||
<pixmap resource="../../resources.qrc">:/WelcomeBanner.jpg</pixmap>
|
||||
</property>
|
||||
<property name="scaledContents">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="panelRecentProjects" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>2</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="labelRecentProjects">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>13</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>Recent projects</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QListWidget" name="listRecentProjects">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Minimum" vsizetype="Minimum">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>1</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="panelButtons" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Preferred">
|
||||
<horstretch>1</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<spacer name="verticalSpacer">
|
||||
<property name="orientation">
|
||||
<enum>Qt::Vertical</enum>
|
||||
</property>
|
||||
<property name="sizeType">
|
||||
<enum>QSizePolicy::MinimumExpanding</enum>
|
||||
</property>
|
||||
<property name="sizeHint" stdset="0">
|
||||
<size>
|
||||
<width>20</width>
|
||||
<height>40</height>
|
||||
</size>
|
||||
</property>
|
||||
</spacer>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCommandLinkButton" name="buttonNewProject">
|
||||
<property name="text">
|
||||
<string>&New Project</string>
|
||||
</property>
|
||||
<property name="description">
|
||||
<string>Create a new project.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QCommandLinkButton" name="buttonOpenProject">
|
||||
<property name="text">
|
||||
<string>&Open Project</string>
|
||||
</property>
|
||||
<property name="description">
|
||||
<string>Open an existing project.</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources>
|
||||
<include location="../../resources.qrc"/>
|
||||
</resources>
|
||||
<connections/>
|
||||
</ui>
|
90
ui/welcome/welcome_dialog_ui.py
Normal file
90
ui/welcome/welcome_dialog_ui.py
Normal file
@ -0,0 +1,90 @@
|
||||
# -*- 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
|
Reference in New Issue
Block a user