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