Started work on Ember
This commit is contained in:
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