from gamiki.qt.utils import makeMouseAware
from gamiki.qt.flow_layout import FlowLayout
-class CoverMode(IntFlag):
- LIST = 1,
- COVER = 2,
- FIXED = 4
-
-class Cover(QWidget):
+class ListItem(QWidget):
onClick = pyqtSignal(Game)
- def __init__(self, game: Game, mode: CoverMode = None, size: int = 0):
+ def __init__(self, game: Game, coverSize: int = 0):
super().__init__()
self.game = game
- self.cover_mode = mode if (mode) else (CoverMode.LIST|CoverMode.FIXED)
-
- if (size > 0):
- self.cover_size = size
- else:
- self.cover_size = 48 if (CoverMode.LIST in self.cover_mode) else 200
-
+ self.coverSize = coverSize if (coverSize > 0) else 48
self.pixmap=QPixmap(self.game["Icon"] if ("Icon" in self.game) else "")
self.initUI()
makeMouseAware(self, [self, self.cover])
-
- def _resetMinMax(self):
- if (CoverMode.LIST in self.cover_mode):
- self.line1.setMinimumWidth(self.cover_size)
- else:
- self.line1.setMaximumWidth(self.cover_size)
-
- if (CoverMode.LIST in self.cover_mode):
- self.line2.setMinimumWidth(self.cover_size)
- else:
- self.line2.setMaximumWidth(self.cover_size)
- def _initUI_text(self):
+ def initUI(self):
self.line1 = QLabel(self.game.name)
self.line1.setStyleSheet("font-size: 20px; font-weight: bold;")
-
+ self.line1.setMinimumWidth(self.coverSize)
self.line2 = QLabel(self.game.tags[0] if (self.game.tags) else "")
self.line2.setStyleSheet("")
self.line2.setAlignment(Qt.AlignRight)
+ self.line2.setMinimumWidth(self.coverSize)
- self._resetMinMax()
-
- def _resetPixmap(self):
- crop = self.pixmap
+ self.cover = QLabel()
+ self.cover.setScaledContents(True)
+ self.cover.setMinimumSize(self.coverSize, self.coverSize)
+ self.cover.setMaximumSize(self.coverSize, self.coverSize)
w = self.pixmap.width()
h = self.pixmap.height()
int((h - w) / 2) if h > w else 0,
min(w, h), min(w, h)
)
-
self.cover.setPixmap(crop)
+ line1sub = QWidget()
+ hlay = QHBoxLayout()
+ hlay.setContentsMargins(0, 0, 0, 0)
+ hlay.addWidget(self.line1)
+ hlay.addStretch()
+ line1sub.setLayout(hlay)
+
+ sub = QWidget()
+ hlay = QVBoxLayout()
+ hlay.setContentsMargins(0, 0, 0, 0)
+ hlay.addWidget(line1sub)
+ hlay.addWidget(self.line2)
+ sub.setLayout(hlay)
+
+ layout = QHBoxLayout()
+ layout.setContentsMargins(0, 0, 0, 0)
+ layout.addWidget(self.cover)
+ layout.addWidget(sub)
+
+ self.setLayout(layout)
+
+ def mouseReleaseEvent(self, event):
+ if event.button() == Qt.LeftButton:
+ self.onClick.emit(self.game)
+
+class GridItem(QWidget):
+ onClick = pyqtSignal(Game)
+
+ def __init__(self, game: Game, coverSize: int = 0, fixed: bool = False):
+ super().__init__()
+
+ self.game = game
+ self.coverSize = coverSize if (coverSize > 0) else 200
+ self.fixed = fixed
+ self.pixmap=QPixmap(self.game["Icon"] if ("Icon" in self.game) else "")
+
+ self.initUI()
+ makeMouseAware(self, [self, self.cover])
+
def initUI(self):
- self._initUI_text()
+ self.line1 = QLabel(self.game.name)
+ self.line1.setStyleSheet("font-size: 20px; font-weight: bold;")
+ self.line1.setMaximumWidth(self.coverSize)
+ self.line2 = QLabel(self.game.tags[0] if (self.game.tags) else "")
+ self.line2.setStyleSheet("")
+ self.line2.setAlignment(Qt.AlignRight)
+ self.line2.setMaximumWidth(self.coverSize)
self.cover = QLabel()
self.cover.setScaledContents(True)
- self.cover.setMinimumSize(self.cover_size, self.cover_size)
- self.cover.setMaximumSize(self.cover_size, self.cover_size)
- self._resetPixmap()
+ self.cover.setMinimumSize(self.coverSize, self.coverSize)
+ self.cover.setMaximumSize(self.coverSize, self.coverSize)
+
+ w = self.pixmap.width()
+ h = self.pixmap.height()
+ crop = self.pixmap.copy(
+ int((w - h) / 2) if w > h else 0,
+ int((h - w) / 2) if h > w else 0,
+ min(w, h), min(w, h)
+ )
+ self.cover.setPixmap(crop)
line1sub = QWidget()
hlay = QHBoxLayout()
hlay.addWidget(self.line2)
sub.setLayout(hlay)
- if CoverMode.LIST in self.cover_mode:
- layout = QHBoxLayout()
- layout.setContentsMargins(0, 0, 0, 0)
- layout.addWidget(self.cover)
- layout.addWidget(sub)
- else:
- layout = QVBoxLayout()
- layout.addWidget(self.cover)
- layout.addWidget(sub)
- layout.addStretch()
+ layout = QVBoxLayout()
+ layout.addWidget(self.cover)
+ layout.addWidget(sub)
+ layout.addStretch()
self.setLayout(layout)
-
+
def resizeEvent(self, event):
- self.overlay[0].setFixedSize(event.size())
-
- if (CoverMode.FIXED in self.cover_mode):
+ if (self.fixed):
return super().resizeEvent(event)
m = self.contentsMargins()
s = event.size()
petit = min(s.width() - diff_w, s.height() - diff_h)
self.cover.setMaximumSize(petit, petit)
- self.overlay[1].setFixedSize(self.cover.size())
- self._resetMinMax()
-
+ self.line1.setMaximumWidth(self.coverSize)
+ self.line2.setMaximumWidth(self.coverSize)
+ self.line1.setMinimumWidth(self.coverSize)
+ self.line2.setMinimumWidth(self.coverSize)
super().resizeEvent(event)
-
+
def mouseReleaseEvent(self, event):
if event.button() == Qt.LeftButton:
self.onClick.emit(self.game)
layout = QVBoxLayout()
#layout.setSpacing(0)
- for cover in self._gen_covers(CoverMode.LIST|CoverMode.FIXED):
+ for game in self.games:
+ cover = ListItem(game, self.icon_size)
+ cover.onClick.connect(lambda game: self.onClick.emit(game))
layout.addWidget(cover)
+
layout.addStretch()
self.setLayout(layout)
- def _gen_covers(self, mode: CoverMode) -> list[Cover]:
- covers = []
- for game in self.games:
- cover = Cover(game, mode, self.icon_size)
- cover.onClick.connect(lambda game: self.onClick.emit(game))
- covers.append(cover)
- return covers
-
-class Grid(List):
+class Grid(QWidget):
+ onClick = pyqtSignal(Game)
+
def __init__(self, games: list[Game], icon_size: int = 0):
- super().__init__(games, icon_size)
+ super().__init__()
+
+ self.games = games
+ self.icon_size = icon_size
+
+ self.initUI()
def initUI(self):
layout = FlowLayout()
- for cover in self._gen_covers(CoverMode.COVER|CoverMode.FIXED):
+ for game in self.games:
+ cover = GridItem(game, self.icon_size, True)
+ cover.onClick.connect(lambda game: self.onClick.emit(game))
layout.addWidget(cover)
self.setLayout(layout)
game3["Icon"] = "./fluffy.jpg"
game3._init()
- #game_widget1 = Cover(game1) ; game_widget1.show()
- #game_widget2 = Cover(game3, CoverMode.COVER) ; game_widget2.show()
+ #game_widget1 = ListItem(game1) ; game_widget1.show()
+ #game_widget2 = GridItem(game3) ; game_widget2.show()
list1 = List([ game1, game2, game3 ]) ; list1.show()
grid = Grid([ game1, game2, game3 ]) ; grid.show()