Worked on welcome dialog implementation.
This commit is contained in:
@ -1,11 +1,20 @@
|
||||
from PyQt5.QtWidgets import QWidget, QHBoxLayout, QLabel, QToolButton, QLayout
|
||||
from PyQt5.QtCore import pyqtSignal
|
||||
from PyQt5.QtGui import QFont
|
||||
|
||||
class RecentProjectWidget(QWidget):
|
||||
|
||||
deleted = pyqtSignal()
|
||||
pinned = pyqtSignal(bool)
|
||||
|
||||
def __init__(self, recentProject):
|
||||
super().__init__()
|
||||
self.project = recentProject
|
||||
self.__selected = False
|
||||
self.setupUi()
|
||||
self.setProject(recentProject)
|
||||
self.setupActions()
|
||||
self.__setProject(recentProject)
|
||||
self.setSelected(False)
|
||||
|
||||
def setupUi(self):
|
||||
layout = QHBoxLayout()
|
||||
@ -18,16 +27,46 @@ class RecentProjectWidget(QWidget):
|
||||
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)
|
||||
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 setProject(self, project):
|
||||
def setupActions(self):
|
||||
self.__pin_button.toggled.connect(self.__pinnedToggled)
|
||||
self.__del_button.pressed.connect(self.deleted)
|
||||
|
||||
def setSelected(self, selected = 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 = True):
|
||||
self.__pin_button.setChecked(isPinned)
|
||||
|
||||
def __setProject(self, project):
|
||||
self.__text = project['name']
|
||||
self.__button.setChecked(project['pinned'])
|
||||
self.setPinned(project['pinned'])
|
||||
|
||||
def __pinnedToggled(self, isPinned):
|
||||
self.__pin_indicator.setVisible(not self.__selected and isPinned)
|
||||
if (isPinned != self.project['pinned']):
|
||||
self.pinned.emit(isPinned)
|
@ -1,27 +1,21 @@
|
||||
import os
|
||||
import functools
|
||||
from enum import Enum
|
||||
import traceback
|
||||
|
||||
from PyQt5.QtWidgets import QDialog, QVBoxLayout, QWidget, QCommandLinkButton, QListWidgetItem
|
||||
from PyQt5.QtWidgets import QDialog, 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):
|
||||
NEW_PROJECT = 0
|
||||
OPEN_PROJECT = 1
|
||||
|
||||
def __init__(self, projectManager):
|
||||
super().__init__()
|
||||
self.__projectManager = projectManager
|
||||
self.__resultAction = None
|
||||
self.resultAction = None
|
||||
self.projectToOpen = None
|
||||
self.setResult(QDialog.Rejected)
|
||||
self.setupUi()
|
||||
self.setupActions()
|
||||
@ -35,6 +29,8 @@ class WelcomeDialog(QDialog):
|
||||
def setupActions(self):
|
||||
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):
|
||||
super().resizeEvent(event)
|
||||
@ -48,18 +44,52 @@ class WelcomeDialog(QDialog):
|
||||
projects = sorted(projects, key=lambda x: (x['pinned'], x['date']), reverse=True)
|
||||
|
||||
for project in projects:
|
||||
|
||||
widget = RecentProjectWidget(project)
|
||||
widget.pinned.connect(self.__projectPinned)
|
||||
widget.deleted.connect(self.__projectDeleted)
|
||||
|
||||
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.resultAction = WelcomeDialog.NEW_PROJECT
|
||||
self.accept()
|
||||
|
||||
def openProjectPressed(self):
|
||||
self.__resultAction = WelcomeDialogResult.OpenProject
|
||||
self.accept()
|
||||
# TODO: show open dialog
|
||||
self.resultAction = WelcomeDialog.OPEN_PROJECT
|
||||
self.accept()
|
||||
|
||||
def listRecentProjectsCurrentChanged(self, current, previous):
|
||||
if not current is None:
|
||||
recentProjectWidget = self.ui.listRecentProjects.itemWidget(current)
|
||||
recentProjectWidget.setSelected(True)
|
||||
|
||||
if not previous is None:
|
||||
recentProjectWidget = self.ui.listRecentProjects.itemWidget(previous)
|
||||
if not recentProjectWidget is None:
|
||||
recentProjectWidget.setSelected(False)
|
||||
|
||||
def listRecentProjectsItemActivated(self, item):
|
||||
project = item.data(Qt.UserRole)
|
||||
self.resultAction = WelcomeDialog.OPEN_PROJECT
|
||||
self.projectToOpen = project['path']
|
||||
self.accept()
|
||||
|
||||
def __projectPinned(self, isPinned):
|
||||
project = self.ui.listRecentProjects.currentItem().data(Qt.UserRole)
|
||||
self.__projectManager.pinRecentProject(project, isPinned)
|
||||
|
||||
def __projectDeleted(self):
|
||||
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()
|
Reference in New Issue
Block a user