Example #1
0
 def mouseMoveEvent(self, event):
     if not self.image_list.drag_icon:
         return
     if qt_version_info >= (6, 0):
         pos = event.position()
     else:
         pos = event.pos()
     if ((pos - self.drag_start_pos).manhattanLength() <
             QtWidgets.QApplication.startDragDistance()):
         return
     if not self.get_selected():
         # user has started dragging an unselected image
         self.image_list.select_image(self)
     paths = []
     for image in self.image_list.get_selected_images():
         paths.append(image.path)
     if not paths:
         return
     drag = QtGui.QDrag(self)
     # construct icon
     count = min(len(paths), 8)
     src_icon = self.image_list.drag_icon
     src_w = src_icon.width()
     src_h = src_icon.height()
     margin = (count - 1) * 4
     if count == 1:
         icon = src_icon
     else:
         icon = QtGui.QPixmap(src_w + margin, src_h + margin)
         icon.fill(Qt.transparent)
         try:
             paint = QtGui.QPainter(icon)
             for i in range(count):
                 paint.drawPixmap(QtCore.QPoint(margin - (i * 4), i * 4),
                                  src_icon)
         finally:
             del paint
     drag.setPixmap(icon)
     if self.image_list.drag_hotspot:
         x, y = self.image_list.drag_hotspot
     else:
         x, y = src_w // 2, src_h
     drag.setHotSpot(QtCore.QPoint(x, y + margin))
     mimeData = QtCore.QMimeData()
     mimeData.setData(DRAG_MIMETYPE, repr(paths).encode('utf-8'))
     drag.setMimeData(mimeData)
     if qt_version_info >= (6, 0):
         drag.exec(Qt.CopyAction)
     else:
         drag.exec_(Qt.CopyAction)
Example #2
0
 def _do_layout(self, origin):
     left, top, right, bottom = self.getContentsMargins()
     width_hint = left + right
     height_hint = top + bottom
     if self.item_list:
         item_size = self.item_list[0].sizeHint()
         item_h = item_size.height()
         item_w = item_size.width()
         multi_row = self.viewport_size.height() - height_hint > item_h
         if multi_row:
             columns = max(
                 (self.viewport_size.width() - width_hint) // item_w, 1)
             rows = (len(self.item_list) + columns - 1) // columns
         else:
             columns = len(self.item_list)
             rows = 1
         width_hint += columns * item_w
         height_hint += rows * item_h
     self.size_hint = QtCore.QSize(width_hint, height_hint)
     if not self.item_list:
         return
     x = origin.x() + left
     y = origin.y() + top
     for n, item in enumerate(self.item_list):
         i, j = n % columns, n // columns
         item.setGeometry(
             QtCore.QRect(QtCore.QPoint(x + (i * item_w), y + (j * item_h)),
                          item_size))
     self.scroll_area.set_multi_row(multi_row)
Example #3
0
 def mouseMoveEvent(self, event):
     if not self.image_list.drag_icon:
         return
     if ((event.pos() - self.drag_start_pos).manhattanLength() <
                                 QtWidgets.QApplication.startDragDistance()):
         return
     paths = []
     for image in self.image_list.get_selected_images():
         paths.append(image.path)
     if not paths:
         return
     drag = QtGui.QDrag(self)
     # construct icon
     count = min(len(paths), 8)
     src_icon = self.image_list.drag_icon
     src_w = src_icon.width()
     src_h = src_icon.height()
     margin = (count - 1) * 4
     if count == 1:
         icon = src_icon
     else:
         icon = QtGui.QPixmap(src_w + margin, src_h + margin)
         icon.fill(Qt.transparent)
         with QtGui.QPainter(icon) as paint:
             for i in range(count):
                 paint.drawPixmap(
                     QtCore.QPoint(margin - (i * 4), i * 4), src_icon)
     drag.setPixmap(icon)
     if src_h == src_w:
         # round marker used in Bing maps version 8
         drag.setHotSpot(QtCore.QPoint(src_w // 2, (src_h // 2) + margin))
     else:
         drag.setHotSpot(QtCore.QPoint(src_w // 2, src_h + margin))
     mimeData = QtCore.QMimeData()
     mimeData.setData(DRAG_MIMETYPE, repr(paths).encode('utf-8'))
     drag.setMimeData(mimeData)
     dropAction = drag.exec_(Qt.CopyAction)
Example #4
0
 def _do_layout(self, rect, test_only):
     left, top, right, bottom = self.getContentsMargins()
     effective_rect = rect.adjusted(left, top, -right, -bottom)
     x = effective_rect.x()
     y = effective_rect.y()
     row_height = 0
     for item in self.item_list:
         item_size = item.sizeHint()
         if x + item_size.width() > effective_rect.right() and row_height > 0:
             x = effective_rect.x()
             y += row_height
             row_height = 0
         if not test_only:
             item.setGeometry(QtCore.QRect(QtCore.QPoint(x, y), item_size))
         x += item_size.width()
         row_height = max(row_height, item_size.height())
     return y + row_height - rect.y() + bottom
Example #5
0
 def set_viewport_size(self, size):
     self.viewport_size = size
     self._do_layout(QtCore.QPoint(0, 0))
Example #6
0
 def __init__(self, scroll_area=None, **kw):
     super(ThumbsLayout, self).__init__(**kw)
     self.scroll_area = scroll_area
     self.item_list = []
     self.viewport_size = QtCore.QSize()
     self._do_layout(QtCore.QPoint(0, 0))