Started work on Ember

This commit is contained in:
2018-07-28 23:56:23 +03:00
commit ac582a8b0b
32 changed files with 239149 additions and 0 deletions

View 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'])

View 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()

View 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>&amp;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>&amp;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>

View 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