Example #1
0
 def setRequired(self, required):
     self.required = required
     brush = QBrush()
     if required:
         brush.setColor(QColor(255, 0, 0))
     else:
         brush.setColor(QColor(0, 0, 0))
     self.setForeground(0, brush)
Example #2
0
    def paint(self, painter, option, widget=None):
        brush = self.brush()

        if self.__hover:
            brush = QBrush(brush.color().darker(110))

        painter.setBrush(brush)
        painter.setPen(self.pen())
        painter.drawEllipse(self.rect())
Example #3
0
File: scj.py Project: Ptaah/SCJ
 def addLog(self, log):
     self.log.append(log)
     self.logbtn.show()
     palette = QPalette()
     brush = QBrush(QColor(240, 100, 100))
     brush.setStyle(Qt.SolidPattern)
     palette.setBrush(QPalette.Normal, QPalette.Background, brush)
     self.label.setPalette(palette)
     self.label.setAutoFillBackground(True)
Example #4
0
def brush_darker(brush, factor):
    """Return a copy of the brush darkened by factor.
    """
    grad = brush.gradient()
    if grad:
        return QBrush(gradient_darker(grad, factor))
    else:
        brush = QBrush(brush)
        brush.setColor(brush.color().darker(factor))
        return brush
Example #5
0
 def paint(self, painter, option, widget=0):
   # TODO: For a given zoom level and rotation and cell contents,
   # cache tile rendering in a bitmap.  Since many tiles are often identical
   # this should provide a substatial speedup.
   # TODO: Strategy: Using the given painter's transformation,
   # extract size and orientation, then reset the transform and
   # either blit from cache or manually scale and rotate painting into
   # a QPixMap, and then blit it.
   # TODO: Extend the above technique so that in the same way, alpha-masked
   # pixmaps of the various component drawing operations are cached.
   lod = option.levelOfDetailFromTransform(painter.worldTransform())
   if lod != GraphicsTileItem._oldLOD:
     GraphicsTileItem._oldLOD = lod
     print "GraphicsTileItem level of detail = {0}".format(lod)
   #painter.resetTransform()  # restore to device coordinates, 1 = 1 pixel
   #key = (self._renderSpec, lod, orientation)
   #if key in self._renderCache:
   #  bitBlt
   #else:
   #  pixm = QPixMap(svgr.defaultSize())
   #  painter = QPainter(pixm)
   if lod >= 23:
     painter.setClipPath(self.hexagon_qpainterpath)
   painter.setPen(QtCore.Qt.NoPen)
   for (renderObj, arg) in self._renderSpec:
     if renderObj == simulation.RenderObjects.BG:
       painter.setBrush(QBrush(QtGui.QColor.fromHsv(*Texture2HSV(arg, self._cell.Pos()))))
       if self.isSelected():
         painter.setPen(self.selectionPen)
       elif lod >= 23:
         painter.setPen(self.pen())
       painter.drawConvexPolygon(self.polygon())
       painter.setPen(QtCore.Qt.NoPen)
     elif renderObj == simulation.RenderObjects.TARGETING:
       brush = QBrush(QtGui.QColor(255,127,0), QtCore.Qt.Dense4Pattern)
       brush.setTransform(QtGui.QTransform.fromScale(.1,.1))
       painter.setBrush(brush)
       painter.drawConvexPolygon(self.polygon())
     elif renderObj == simulation.RenderObjects.NPC or renderObj == simulation.RenderObjects.PLAYER:
       painter.setBrush(QtGui.QColor.fromHsv(*arg))
       r = simulation.CELL_APOTHEM*3/4.0
       painter.drawEllipse(QPointF(0,0), r, r)
   if False:
     # paint some debugging text
     painter.setPen(QtCore.Qt.white)
     painter.setBrush(self.brush())
     #painter.setFont(QtGui.QFont("Helvetica", 8))
     scale = .02
     painter.scale(scale,scale)
     r = QtCore.QRectF(-.5/scale,-.5/scale,1/scale,1/scale)
     #txt = "{0},{1},{2}".format(self._cell.Pos().x, self._cell.Pos().y, self._cell.Pos().z)
     txt = "{0}".format( vexor5.uniform3coloring(self._cell.Pos()) )
     #txt = str(self._cell._region)
     painter.drawText(r, QtCore.Qt.AlignCenter, txt)
Example #6
0
 def drawPoints(self):
     img = qrcode.make('TestCode 001',image_factory=qrcode.image.svg.SvgImage )
     type(img)
     gitem =  QGraphicsScene()
     self.graphicsView.setScene(gitem)
     #gitem.addLine(0, 0, 2, 2)
     qbrush = QBrush()
     qbrush.setStyle(Qt.SolidPattern)
     qbrush.setColor(Qt.black)
     gitem.addRect(0, 0, 2, 2, brush=qbrush )
     self.graphicsView.show()
 def _setup(self):
     self.rod = QGraphicsLineItem(QLineF(0, 0, 0, 100))
     p = QPen(QColor(100, 100, 100))
     p.setWidth(5)
     self.rod.setPen(p)
     self.rod.setToolTip('This is the rod of the pendulum')
     self.ball = QGraphicsEllipseItem(QRectF(-20, 80, 40, 40))
     b = QBrush(Qt.SolidPattern)
     b.setColor(QColor(0, 255, 0))
     self.ball.setBrush(b)
     self.ball.setToolTip('This is the ball of the pendulum where the mass is concentrated')
     self.addToGroup(self.rod)
     self.addToGroup(self.ball)
     self.setFlags(QGraphicsItem.ItemIsSelectable)
 def __init__(self,
              font_loader,
              canvas,
              logger,
              opts,
              ruby_tags,
              link_activated,
              width=0,
              height=0):
     if hasattr(canvas, 'canvaswidth'):
         width, height = canvas.canvaswidth, canvas.canvasheight
     _Canvas.__init__(self,
                      font_loader,
                      logger,
                      opts,
                      width=width,
                      height=height)
     self.block_id = canvas.id
     self.ruby_tags = ruby_tags
     self.link_activated = link_activated
     self.text_width = width
     fg = canvas.framecolor
     bg = canvas.bgcolor
     if not opts.visual_debug and canvas.framemode != 'none':
         self.setPen(Pen(fg, canvas.framewidth))
     self.setBrush(QBrush(Color(bg)))
     self.items = []
     for po in canvas:
         obj = po.object
         item = object_factory(self, obj, respect_max_y=True)
         if item:
             self.items.append((item, po.x1, po.y1))
Example #9
0
    def __updatePen(self):
        self.prepareGeometryChange()
        self.__boundingRect = None
        if self.__dynamic:
            if self.__dynamicEnabled:
                color = QColor(0, 150, 0, 150)
            else:
                color = QColor(150, 0, 0, 150)

            normal = QPen(QBrush(color), 2.0)
            hover = QPen(QBrush(color.darker(120)), 2.1)
        else:
            normal = QPen(QBrush(QColor("#9CACB4")), 2.0)
            hover = QPen(QBrush(QColor("#7D7D7D")), 2.1)

        self.curveItem.setCurvePenSet(normal, hover)
Example #10
0
    def moveTo(self, pos):
        #data coordinates
        oldX, oldY = self.pos.x(), self.pos.y()
        x, y = pos.x(), pos.y()

        line = QGraphicsLineItem(oldX, oldY, x, y)
        line.setPen(
            QPen(QBrush(Qt.white), self.brushSize, Qt.SolidLine, Qt.RoundCap,
                 Qt.RoundJoin))
        self.scene.addItem(line)
        self._hasMoved = True

        #update bounding Box
        if not self.bb.isValid():
            self.bb = QRect(QPoint(oldX, oldY), QSize(1, 1))
        #grow bounding box
        self.bb.setLeft(min(self.bb.left(), max(0,
                                                x - self.brushSize / 2 - 1)))
        self.bb.setRight(
            max(self.bb.right(),
                min(self.sliceRect[0] - 1, x + self.brushSize / 2 + 1)))
        self.bb.setTop(min(self.bb.top(), max(0, y - self.brushSize / 2 - 1)))
        self.bb.setBottom(
            max(self.bb.bottom(),
                min(self.sliceRect[1] - 1, y + self.brushSize / 2 + 1)))

        #update/move position
        self.pos = pos
Example #11
0
 def __init__(self, parent, _name, path):
     QTreeWidgetItem.__init__(self, parent)
     self._parent = parent
     self.setText(0, _name)
     self.path = path
     self.isFolder = True
     self.setForeground(0, QBrush(QColor(255, 165, 0)))
     project = json_manager.read_ninja_project(path)
     self.name = project.get('name', '')
     if self.name == '':
         self.name = _name
     self.setText(0, self.name)
     self.projectType = project.get('project-type', '')
     self.description = project.get('description', '')
     self.url = project.get('url', '')
     self.license = project.get('license', '')
     self.mainFile = project.get('mainFile', '')
     self.preExecScript = project.get('preExecScript', '')
     self.postExecScript = project.get('postExecScript', '')
     self.indentation = project.get('indentation', settings.INDENT)
     self.useTabs = project.get('use-tabs', settings.USE_TABS)
     self.extensions = project.get('supported-extensions',
                                   settings.SUPPORTED_EXTENSIONS)
     self.pythonPath = project.get('pythonPath', settings.PYTHON_PATH)
     self.PYTHONPATH = project.get('PYTHONPATH', '')
     self.additional_builtins = project.get('additional_builtins', [])
     self.programParams = project.get('programParams', '')
     self.venv = project.get('venv', '')
     self.related_projects = project.get('relatedProjects', [])
     self.update_paths()
     self.addedToConsole = False
Example #12
0
 def __init__(self, parent, _name, path):
     QTreeWidgetItem.__init__(self, parent)
     self._parent = parent
     self.setText(0, _name)
     self.path = path
     self.isFolder = True
     self.setForeground(0, QBrush(Qt.darkGray))
     project = json_manager.read_ninja_project(path)
     self.name = project.get('name', '')
     if self.name == '':
         self.name = _name
     self.setText(0, self.name)
     self.projectType = project.get('project-type', '')
     self.description = project.get('description', '')
     self.url = project.get('url', '')
     self.license = project.get('license', '')
     self.mainFile = project.get('mainFile', '')
     self.preExecScript = project.get('preExecScript', '')
     self.postExecScript = project.get('postExecScript', '')
     self.extensions = project.get('supported-extensions',
                                   settings.SUPPORTED_EXTENSIONS)
     self.pythonPath = project.get('pythonPath', settings.PYTHON_PATH)
     self.programParams = project.get('programParams', '')
     self.venv = project.get('venv', '')
     self.addedToConsole = False
Example #13
0
    def _cat_desc_to_std_item(self, desc):
        """
        Create a QStandardItem for the category description.
        """
        item = QStandardItem()
        item.setText(desc.name)

        if desc.icon:
            icon = desc.icon
        else:
            icon = "icons/default-category.svg"

        icon = icon_loader.from_description(desc).get(icon)
        item.setIcon(icon)

        if desc.background:
            background = desc.background
        else:
            background = DEFAULT_COLOR

        background = NAMED_COLORS.get(background, background)

        brush = QBrush(QColor(background))
        item.setData(brush, self.BACKGROUND_ROLE)

        tooltip = desc.description if desc.description else desc.name

        item.setToolTip(tooltip)
        item.setFlags(Qt.ItemIsEnabled)
        item.setData(desc, self.CATEGORY_DESC_ROLE)
        return item
Example #14
0
    def paint(self, painter, option, widget):
        painter.save()
        dirtyColor = QColor(255,0,0)
        painter.setOpacity(0.5)
        painter.setBrush(QBrush(dirtyColor, Qt.SolidPattern))
        painter.setPen(dirtyColor)
        
        intersected = self._tiling.intersected(option.exposedRect)
        
        #print "pies are painting at ", option.exposedRect

        progress = 0.0
        for i in intersected:
            progress += self._indicate[i]
            
            if not(self._indicate[i] < 1.0): # only paint for less than 100% progress
                continue
            
            # Don't show unless a delay time has passed since the tile progress was reset.
            delta = datetime.datetime.now() - self._zeroProgressTimestamp[i]
            if delta < self.delay:
                t = QTimer.singleShot(int(delta.total_seconds()*1000.0), self.update)
                continue

            p = self._tiling.tileRectFs[i]
            w,h = p.width(), p.height()
            r = min(w,h)
            rectangle = QRectF(p.center()-QPointF(r/4,r/4), QSizeF(r/2, r/2));
            startAngle = 0 * 16
            spanAngle  = min(360*16, int((1.0-self._indicate[i])*360.0) * 16)
            painter.drawPie(rectangle, startAngle, spanAngle)

        painter.restore()
    def __init__(self, mapCanvas, feature, layer):
        super(FeatureHighlightItem, self).__init__(mapCanvas)

        self._mapCanvas = None  # QgsMapCanvas
        self._brush = QBrush()
        self._pen = QPen()
        self._feature = None  # QgsFeature()
        self._layer = None  # QgsMapLayer()
        self._buffer = 0.0
        self._minWidth = 0.0

        self._mapCanvas = mapCanvas
        if (not layer
                or not feature
                or not isinstance(feature, QgsFeature)
                or not feature.geometry()
                or feature.geometry().isEmpty()
                or not feature.geometry().isGeosValid()):
            return
        self._feature = QgsFeature(feature)  # Force deep copy
        self._layer = layer
        self.setLineColor(Application.highlightLineColor())
        self.setFillColor(Application.highlightFillColor())
        self._minWidth = Application.highlightMinimumWidth()
        self._buffer = Application.highlightBuffer()
        if self._mapCanvas.mapSettings().hasCrsTransformEnabled():
            ct = self._mapCanvas.mapSettings().layerTransform(self._layer)
            if ct:
                self._feature.geometry().transform(ct)
        self.updateRect()
        self.update()
Example #16
0
    def getSampleModel(spl, flags='peak', **kw):
        from gui.MetBaseGui import MSStandardItem
        if flags not in ('peak', 'cluster', 'id'):
            return
        model = QStandardItemModel()
        if flags == 'peak':
            from utils.misc import Hot
            areas = [peak.area for peak in spl.rawPeaks.ipeaks()]
            mxInt = max(areas)
            model.setHorizontalHeaderLabels(MSSample.peakModelLabel)

            for i, peak in enumerate(spl.rawPeaks.ipeaks()):
                model.setItem(i, 0, MSStandardItem(str(peak.mass())))
                model.item(i, 0).setBackground(
                    QBrush(Hot._get_color(areas[i] / mxInt, True, alpha=0.5)))

                model.setItem(i, 1, MSStandardItem(str(peak.rt)))
                model.item(i, 1).setBackground(
                    QBrush(Hot._get_color(areas[i] / mxInt, True, alpha=0.5)))

                model.setItem(i, 2, MSStandardItem(str(peak.area)))
                model.item(i, 2).setBackground(
                    QBrush(Hot._get_color(areas[i] / mxInt, True, alpha=0.5)))

                model.setItem(i, 3, MSStandardItem(str(peak.sn)))
                model.item(i, 3).setBackground(
                    QBrush(Hot._get_color(areas[i] / mxInt, True, alpha=0.5)))

                model.setItem(i, 4, MSStandardItem(str(peak.r_coef)))
                model.item(i, 4).setBackground(
                    QBrush(Hot._get_color(areas[i] / mxInt, True, alpha=0.5)))

        elif flags == 'cluster':
            model.setHorizontalHeaderLabels(MSSample.clusterModelLabel)
            for i, peak in enumerate(spl.mappedPeaks.ipeaks()):
                model.setItem(i, 0, MSStandardItem(str(peak.mass())))
                model.setItem(i, 1, MSStandardItem(str(peak.rt)))
                model.setItem(i, 2, MSStandardItem(str(peak.area)))
                info_iso = ""
                info_frag = ""
                for iso in peak.isoCluster:
                    info_iso += '%s/%s\t' % (str(iso.mass()), str(iso.rt))
                for add in peak.fragCluster:
                    info_frag += '%s/%s\t' % (str(add.mass()), str(add.rt))
                model.setItem(i, 3, MSStandardItem(info_iso))
                model.setItem(i, 4, MSStandardItem(info_frag))
        return model
Example #17
0
    def __init__(self, *args):
        QWidget.__init__(self, *args)
        self._messages = []
        self._defaultTimeout = 0
        self._defaultPixmap = QPixmap(":/enkiicons/infos.png")
        self._defaultBackground = QBrush(QColor(250, 230, 147))
        self._defaultForeground = QBrush(QColor(0, 0, 0))

        # pixmap
        self.lPixmap = QLabel(self)
        self.lPixmap.setAlignment(Qt.AlignCenter)
        self.lPixmap.setSizePolicy(
            QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred))

        # message
        self.lMessage = QLabel(self)
        self.lMessage.setAlignment(Qt.AlignVCenter | Qt.AlignLeft)
        self.lMessage.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred))
        self.lMessage.setWordWrap(True)
        self.lMessage.setOpenExternalLinks(True)
        self.lMessage.setTextInteractionFlags(Qt.TextBrowserInteraction)

        # button
        self.dbbButtons = QDialogButtonBox(self)

        # if false - buttons don't have neither text nor icons
        self.dbbButtons.setStyleSheet(
            "dialogbuttonbox-buttons-have-icons: true;")

        self.dbbButtons.setSizePolicy(
            QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred))

        self.setSizePolicy(
            QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Maximum))

        # layout
        self.hbl = QHBoxLayout(self)
        self.hbl.setMargin(0)
        self.hbl.addWidget(self.lPixmap, 0, Qt.AlignCenter)
        self.hbl.addWidget(self.lMessage)
        self.hbl.addWidget(self.dbbButtons, 0, Qt.AlignCenter)

        # connections
        self.lMessage.linkActivated.connect(self.linkActivated)
        self.lMessage.linkHovered.connect(self.linkHovered)
        self.dbbButtons.clicked.connect(self.buttonClicked)
Example #18
0
 def _paint_screen(self, painter):
     # Speed hacks: local name lookups are faster
     vars().update(QColor=QColor, QBrush=QBrush, QPen=QPen, QRect=QRect)
     background_color_map = self.background_color_map
     foreground_color_map = self.foreground_color_map
     char_width = self._char_width
     char_height = self._char_height
     painter_drawText = painter.drawText
     painter_fillRect = painter.fillRect
     painter_setPen = painter.setPen
     align = Qt.AlignTop | Qt.AlignLeft
     # set defaults
     background_color = background_color_map[14]
     foreground_color = foreground_color_map[15]
     brush = QBrush(QColor(background_color))
     painter_fillRect(self.rect(), brush)
     pen = QPen(QColor(foreground_color))
     painter_setPen(pen)
     y = 0
     text = []
     text_append = text.append
     for row, line in enumerate(self._screen):
         col = 0
         text_line = ""
         for item in line:
             if isinstance(item, str):
                 x = col * char_width
                 length = len(item)
                 rect = QRect(x, y, x + char_width * length,
                              y + char_height)
                 painter_fillRect(rect, brush)
                 painter_drawText(rect, align, item)
                 col += length
                 text_line += item
             else:
                 foreground_color_idx, background_color_idx, underline_flag = item
                 foreground_color = foreground_color_map[
                     foreground_color_idx]
                 background_color = background_color_map[
                     background_color_idx]
                 pen = QPen(QColor(foreground_color))
                 brush = QBrush(QColor(background_color))
                 painter_setPen(pen)
                 # painter.setBrush(brush)
         y += char_height
         text_append(text_line)
     self._text = text
Example #19
0
 def paint(self, painter, option, widget=None):
     rect = QRectF(-(ModelerGraphicItem.BOX_WIDTH + 2) / 2.0,
                   -(ModelerGraphicItem.BOX_HEIGHT + 2) / 2.0,
                   ModelerGraphicItem.BOX_WIDTH + 2,
                   ModelerGraphicItem.BOX_HEIGHT + 2)
     painter.setPen(QPen(Qt.gray, 1))
     color = QColor(125, 232, 232)
     if isinstance(self.element, ModelerParameter):
         color = QColor(179, 179, 255)
     elif isinstance(self.element, Algorithm):
         color = Qt.white
     painter.setBrush(QBrush(color, Qt.SolidPattern))
     painter.drawRect(rect)
     font = QFont('Verdana', 8)
     painter.setFont(font)
     painter.setPen(QPen(Qt.black))
     text = self.getAdjustedText(self.text)
     if isinstance(self.element, Algorithm) and not self.element.active:
         painter.setPen(QPen(Qt.gray))
         text = text + "\n(deactivated)"
     elif self.isSelected():
         painter.setPen(QPen(Qt.blue))
     fm = QFontMetricsF(font)
     text = self.getAdjustedText(self.text)
     h = fm.height()
     pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2 + 25, h / 2.0)
     painter.drawText(pt, text)
     painter.setPen(QPen(Qt.black))
     if isinstance(self.element, Algorithm):
         h = -(fm.height() * 1.2)
         h = h - ModelerGraphicItem.BOX_HEIGHT / 2.0 + 5
         pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2 + 25, h)
         painter.drawText(pt, 'In')
         i = 1
         if not self.element.paramsFolded:
             for param in self.element.algorithm.parameters:
                 if not param.hidden:
                     text = self.getAdjustedText(param.description)
                     h = -(fm.height() * 1.2) * (i + 1)
                     h = h - ModelerGraphicItem.BOX_HEIGHT / 2.0 + 5
                     pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2
                                  + 33, h)
                     painter.drawText(pt, text)
                     i += 1
         h = fm.height() * 1.2
         h = h + ModelerGraphicItem.BOX_HEIGHT / 2.0
         pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2 + 25, h)
         painter.drawText(pt, 'Out')
         if not self.element.outputsFolded:
             for i, out in enumerate(self.element.algorithm.outputs):
                     text = self.getAdjustedText(out.description)
                     h = fm.height() * 1.2 * (i + 2)
                     h = h + ModelerGraphicItem.BOX_HEIGHT / 2.0
                     pt = QPointF(-ModelerGraphicItem.BOX_WIDTH / 2
                                  + 33, h)
                     painter.drawText(pt, text)
     if self.pixmap:
         painter.drawPixmap(-(ModelerGraphicItem.BOX_WIDTH / 2.0) + 3, -8,
                            self.pixmap)
Example #20
0
    def View3(self):
        #Nueva vista 3
        palette = QPalette()
        palette.setBrush(
            QPalette.Background,
            QBrush(QPixmap(self.VIEW_3).scaled(self.size_x, self.size_y)))
        self.ui.setPalette(palette)

        #Acción Envía Vista 3
        self.ui.setCurrentWidget(self.ui.View3)

        if self.flag_Key == 3:
            #Vista 3
            self.ui.title_v3.move(int(self.size_x / 2 - self.t3x / 2),
                                  int(self.size_y / 9))
            self.ui.photo_ranger.move(int(self.size_x / 2 - self.fx / 2),
                                      int(self.size_y / 6))
            self.ui.name_v3.move(int(self.size_x / 2 - self.name_x / 2),
                                 int(self.size_y / 2 + 2 * self.name_y))
            self.ui.continue_btn_V3.move(int(self.size_x / 2 - self.c3x / 2),
                                         int(self.y_init_btn))

            #Vista 6
            self.ui.the_gif_validate.move(self.size_x + 1, self.size_y + 1)
            self.ui.title_V6.move(self.size_x + 1, self.size_y + 1)
            self.ui.acepto.move(self.size_x + 1, self.size_y + 1)
            self.ui.acepto_btn.move(self.size_x + 1, self.size_y + 1)
            self.ui.cancelar.move(self.size_x + 1, self.size_y + 1)

            for i in range(len(self.IsChecked)):
                if self.IsChecked[i][1] == True:
                    face_ranger = QPixmap(self.URL_FACES[i])
                    self.ui.photo_ranger.setPixmap(face_ranger)
                    break

        elif self.flag_Key == 5:
            #Vista 6
            #----------------------
            #Aqui se pone el gif :)
            self.ui.the_gif_validate.setMovie(self.movie)
            self.movie.start()
            #----------------------

            self.ui.the_gif_validate.move(
                int(self.size_x / 2 - self.gif2_x / 2), int(self.altura_gif2))
            self.ui.title_V6.move(int(self.size_x / 2 - self.mail_x / 2),
                                  int(self.altura_mail))
            self.ui.acepto.move(int(self.size_x / 2 - self.acepto_x / 2),
                                int(self.altura_acepto))
            self.ui.acepto_btn.move(int(0.26 * self.size_x),
                                    int(self.altura_acepto + 5))
            self.ui.continue_btn_V3.move(int(self.size_x / 2),
                                         int(self.y_init_btn))
            self.ui.cancelar.move(int(self.size_x / 25), int(self.y_init_btn))

            #Vista 3
            self.ui.title_v3.move(self.size_x + 1, self.size_y + 1)
            self.ui.photo_ranger.move(self.size_x + 1, self.size_y + 1)
            self.ui.name_v3.move(self.size_x + 1, self.size_y + 1)
Example #21
0
    def paint( self, painter, option, widget ):
        color = self.__settings.lineColor
        if self.color:
            color = self.color

        self.setBrush( QBrush( color ) )
        QGraphicsSimpleTextItem.paint( self, painter, option, widget )
        return
Example #22
0
    def brash(self, color):
        if color in self._brash:
            return self._brash[color]

        _color = self.background_color_map.get(color, color)
        brash = QBrush(QColor(_color))
        self._brash[color] = brash
        return brash
Example #23
0
    def setBrush(self, brush):
        """
	Sets the main background brush used for this widget to the inputed
	brush.
	
	:param      brush | <QBrush> || <QColor>
	"""
        self._brush = QBrush(brush)
Example #24
0
 def addExploitSuccess(self, exploit):
     if exploit not in self.__exploitsSuccess:
         self.__exploitsSuccess.append(exploit)
         root = self.treeWidget.invisibleRootItem()
         for i in range(root.childCount()):
             item = root.child(i)
             if item.text(0) == exploit.name:
                 item.setForeground(0, QBrush(QColor(Qt.green)))
Example #25
0
 def shape(self):
     if self.__shape is None:
         path = self.path()
         pen = QPen(QBrush(Qt.black),
                    max(self.pen().widthF(), 20),
                    Qt.SolidLine)
         self.__shape = stroke_path(path, pen)
     return self.__shape
Example #26
0
    def setCut(self):
        """ Called to indicate this instance is cut.

        @return None
        """
        self.cutSource = True
        self.copySource = False
        self.setForeground(QBrush(QColor(Qt.red)))
Example #27
0
    def paint(self, painter, option, index):
        painter.save()

        # set background color and text color
        if option.state & QStyle.State_Selected:
            painter.setBrush(QBrush(QColor("#FF9999")))
        else:
            painter.setBrush(QBrush(Qt.white))
        painter.drawRect(option.rect)
        painter.setPen(QPen(Qt.black))
        painter.setFont(self.font)
        text = index.data(Qt.DisplayRole)
        try:
            painter.drawText(option.rect, Qt.AlignLeft, text.toString())
        except:
            painter.drawText(option.rect, Qt.AlignLeft, text)
        painter.restore()
Example #28
0
 def paintEvent(self, event):
     qp = QPainter(self)
     qp.setBrush(QBrush(self.color))
     qp.setPen(self.color)
     qp.drawRect(0, 0, 25, 25)
     qp.setBrush(Qt.NoBrush)
     qp.setPen(Qt.black)
     qp.drawRect(1, 1, 24, 24)
Example #29
0
 def __init__(self, x, y):
     node.__init__(self)
     self.setRect(QRectF(int(x), int(y), 18, 18))
     self.moveBy(1, 1)
     self.setBrush(QBrush(eval(settings.player)))
     self.setPen(QPen(Qt.NoPen))
     self.setFlag(QGraphicsItem.ItemIsFocusable)
     self.steroidTaken = 0
Example #30
0
 def paint(self, painter, option, widget=None):
     # pylint: disable=missing-docstring
     dist_sum = sum(self.dist)
     start_angle = 0
     colors = self.scene().colors
     for i in range(len(self.dist)):
         angle = self.dist[i] * 16 * 360. / dist_sum
         if angle == 0:
             continue
         painter.setBrush(QBrush(colors[i]))
         painter.setPen(QPen(colors[i]))
         painter.drawPie(-self.r, -self.r, 2 * self.r, 2 * self.r,
                         int(start_angle), int(angle))
         start_angle += angle
     painter.setPen(QPen(Qt.black))
     painter.setBrush(QBrush())
     painter.drawEllipse(-self.r, -self.r, 2 * self.r, 2 * self.r)
Example #31
0
    def __init__(self, canvas):
        self._yaw = 0
        self._angle = 0
        self.size = 8
        self.halfsize = self.size / 2.0
        super(PostionMarker, self).__init__(canvas)

        self.canvas = canvas
        colorvalue = "#019633"
        colour = QColor(colorvalue)
        colour.setAlpha(50)
        self.conebrush = QBrush(colour)
        pencolour = QColor(colorvalue)
        self.pointpen = QPen(pencolour, 1)
        self.solidbrush = QBrush(pencolour)
        self.map_pos = QgsPoint()
        self.tracking = False
Example #32
0
    def __init__(self, parent=None, **kwargs):
        QGraphicsObject.__init__(self, parent, **kwargs)
        self.setFlag(QGraphicsObject.ItemSendsGeometryChanges)

        self.__path = QPainterPath()
        self.__brush = QBrush(Qt.NoBrush)
        self.__pen = QPen()
        self.__boundingRect = None
Example #33
0
    def basefinished(self):
        if self.basereply.error() != QNetworkReply.NoError:
            return
        self.basepixmap = QPixmap()
        self.basepixmap.loadFromData(self.basereply.readAll())
        if self.basepixmap.size() != self.rect.size():
            self.basepixmap = self.basepixmap.scaled(self.rect.size(),
                                                     Qt.KeepAspectRatio,
                                                     Qt.SmoothTransformation)
        self.setPixmap(self.basepixmap)

        # make marker pixmap
        self.mkpixmap = QPixmap(self.basepixmap.size())
        self.mkpixmap.fill(Qt.transparent)
        br = QBrush(QColor(Config.dimcolor))
        painter = QPainter()
        painter.begin(self.mkpixmap)
        painter.fillRect(0, 0, self.mkpixmap.width(), self.mkpixmap.height(),
                         br)
        for marker in self.radar['markers']:
            pt = getPoint(marker["location"], self.point, self.zoom,
                          self.rect.width(), self.rect.height())
            mk2 = QImage()
            mkfile = 'teardrop'
            if 'image' in marker:
                mkfile = marker['image']
            if os.path.dirname(mkfile) == '':
                mkfile = os.path.join('markers', mkfile)
            if os.path.splitext(mkfile)[1] == '':
                mkfile += '.png'
            mk2.load(mkfile)
            if mk2.format != QImage.Format_ARGB32:
                mk2 = mk2.convertToFormat(QImage.Format_ARGB32)
            mkh = 80  # self.rect.height() / 5
            if 'size' in marker:
                if marker['size'] == 'small':
                    mkh = 64
                if marker['size'] == 'mid':
                    mkh = 70
                if marker['size'] == 'tiny':
                    mkh = 40
            if 'color' in marker:
                c = QColor(marker['color'])
                (cr, cg, cb, ca) = c.getRgbF()
                for x in range(0, mk2.width()):
                    for y in range(0, mk2.height()):
                        (r, g, b, a) = QColor.fromRgba(mk2.pixel(x,
                                                                 y)).getRgbF()
                        r = r * cr
                        g = g * cg
                        b = b * cb
                        mk2.setPixel(x, y, QColor.fromRgbF(r, g, b, a).rgba())
            mk2 = mk2.scaledToHeight(mkh, 1)
            painter.drawImage(pt.x - mkh / 2, pt.y - mkh / 2, mk2)

        painter.end()

        self.wmk.setPixmap(self.mkpixmap)
Example #34
0
 def _makePixmap(self, width, height):
     pixmap = QPixmap(width, height)
     style = self.brushComboBox.itemData(
         self.brushComboBox.currentIndex()).toInt()[0]
     brush = QBrush(self.color, Qt.BrushStyle(style))
     painter = QPainter(pixmap)
     painter.fillRect(pixmap.rect(), Qt.white)
     painter.fillRect(pixmap.rect(), brush)
     return pixmap
Example #35
0
 def color_for_label(self, ind, light=100):
     color = Qt.lightGray
     if isinstance(self.variable, ContinuousVariable):
         color = self.label_colors[ind].lighter(light)
     elif isinstance(self.variable, DiscreteVariable):
         value = self.values[ind]
         if not isnan(value):
             color = QColor(*self.variable.colors[value])
     return QBrush(color)
Example #36
0
 def paintCell(self,
               painter,
               rect,
               date,
               _HIGHLIGHTED_BRUSH=QBrush(QColor(0xFF, 0xFF, 0, 0xAA),
                                         Qt.DiagCrossPattern)):
     super().paintCell(painter, rect, date)
     if self.minimumDate() <= date <= self.maximumDate():
         painter.fillRect(rect, _HIGHLIGHTED_BRUSH)
Example #37
0
 def data(self, index, role=Qt.DisplayRole):
     """获取index位置的数据"""
     if not index.isValid():
         return QVariant()
     if role == Qt.TextColorRole:
         node = self.node_from_index(index)
         string = node.text()
         if OrderTreeModel.order_reg.match(string):  # 订单结点
             profit_child = node.child(6)  # 第6个孩子结点是收益结点
             if '-' in profit_child.text():  # 收益为负,订单结点绿色,否则红色
                 return QBrush(QColor(0, 180, 0))
             else:
                 return QBrush(QColor(255, 0, 0))
     elif role == Qt.DisplayRole:
         node = self.node_from_index(index)
         return QVariant(node.text())
     else:
         return QVariant()
Example #38
0
    def setColor(self, blockColor):
        """
        Set color
        """
        color = QColor(0, 0, 0)
        color.setNamedColor(blockColor)
        self.setPen(QPen(color, 1))

        self.setBrush(QBrush(color))
Example #39
0
    def data(self, index, role):
        if not index.isValid():
            return None

        item = index.internalPointer()
        node = item.node()
        attributes = []
        attributeMap = node.attributes()
        
        if role == Qt.DisplayRole:
            if index.column() == 0:
                return attributeMap.namedItem("subject").nodeValue()
            elif index.column() == 1:
                return attributeMap.namedItem(
                                    "percentageComplete").nodeValue().toInt()[0]
            return None
            
        elif role == Qt.CheckStateRole:
            if index.column() == 0:
                if attributeMap.namedItem(
                                    "percentageComplete").nodeValue() == "100": 
                    return Qt.Checked
                else:
                    return Qt.Unchecked
                
        elif role == Qt.FontRole:
            if index.column() == 0:
                font = QFont()
                if attributeMap.namedItem(
                                    "percentageComplete").nodeValue() == "100":
                    font.setStrikeOut(True)
                else:
                    font.setStrikeOut(False)
                return font
            
        elif role == Qt.ForegroundRole:
            if index.column() == 0:            
                if attributeMap.namedItem(
                                    "percentageComplete").nodeValue() == "100":
                    brush = QBrush()
                    brush.setColor(QColor("grey"))
                    return brush
                
        return None
 def occu_color(self):
     for r in range(0, self.rowCount()):
         val = int(self.item(r, 2).text())
         if val == 0:
             color = QBrush(QColor(217, 214, 219))
             color.setStyle(Qt.SolidPattern)
             self.item(r, 2).setBackground(color)
         elif val == 1:
             color = QBrush(QColor(122, 125, 128))
             color.setStyle(Qt.SolidPattern)
             self.item(r, 2).setBackground(color)
         elif val == 2:
             color = QBrush(QColor(79, 74, 79))
             color.setStyle(Qt.SolidPattern)
             self.item(r, 2).setBackground(color)
Example #41
0
    def data(self, index, role=Qt.DisplayRole):
        column = index.column()

        if role == Qt.DisplayRole:
            field = self._mapping[index.row()]
            column_def = self.columns[column]
            value = field[column_def['name']]

            fieldType = column_def['type']
            if fieldType == QVariant.Type:
                if value == QVariant.Invalid:
                    return ''
                return self.fieldTypes[value]
            return value

        if role == Qt.EditRole:
            field = self._mapping[index.row()]
            column_def = self.columns[column]
            value = field[column_def['name']]
            return value

        if role == Qt.TextAlignmentRole:
            fieldType = self.columns[column]['type']
            if fieldType in [QVariant.Int]:
                hAlign = Qt.AlignRight
            else:
                hAlign = Qt.AlignLeft
            return hAlign + Qt.AlignVCenter

        if role == Qt.ForegroundRole:
            column_def = self.columns[column]
            if column_def['name'] == 'expression':
                brush = QBrush()
                if self._errors[index.row()]:
                    brush.setColor(Qt.red)
                else:
                    brush.setColor(Qt.black)
                return brush

        if role == Qt.ToolTipRole:
            column_def = self.columns[column]
            if column_def['name'] == 'expression':
                return self._errors[index.row()]
Example #42
0
 def __init__(self, parent=None):
     super(ColorPanel, self).__init__(parent)
     self.rect = QRectF(0, 0, 20, 20)
     self.setFlag(QGraphicsItem.ItemIgnoresTransformations)
     self.colordialog = QColorDialog()
     self.colordialog.setOption(QColorDialog.DontUseNativeDialog)
     self._colorIndex = 0
     self._color = self._colors[0]
     self._brush = QBrush(self._color)
     self.hide()
Example #43
0
    def data(self, idx, role=Qt.DisplayRole):
        d = self.data_list[idx.row()]
        if role == Qt.DisplayRole:
            if idx.column() == 1:
                return d.device_type()
            elif idx.column() == 0:
                dname = QString(d.device_name())
                if d.is_hide():
                    dname = QString("%1 (%2)").arg(dname).arg(self.tr("disable notification"))
                return dname
        elif role == Qt.DecorationRole:
            if d.device_type() == "net":
                return self.wifi_icon
            else:
                return self.hard_icon
        elif role == Qt.TextColorRole:
            if len(d.selected_driver()) != 0:
                blue_brush = QBrush()
                blue_brush.setColor(Qt.darkBlue)
                return blue_brush

        return QtCore.QVariant()
Example #44
0
class ColorPanel(QGraphicsItem):
    """docstring for ColorPanel"""
    _colors = styles.stapleColors
    _pen = Qt.NoPen  # QPen(styles.bluestroke, 2)

    def __init__(self, parent=None):
        super(ColorPanel, self).__init__(parent)
        self.rect = QRectF(0, 0, 20, 20)
        self.setFlag(QGraphicsItem.ItemIgnoresTransformations)
        self.colordialog = QColorDialog()
        self.colordialog.setOption(QColorDialog.DontUseNativeDialog)
        self._colorIndex = 0
        self._color = self._colors[0]
        self._brush = QBrush(self._color)
        self.hide()

    def boundingRect(self):
        return self.rect

    def paint(self, painter, option, widget=None):
        painter.setBrush(self._brush)
        painter.setPen(self._pen)
        painter.drawRect(self.boundingRect())

    def nextColor(self):
        """docstring for nextColor"""
        self._colorIndex += 1
        if self._colorIndex == len(self._colors):
            self._colorIndex = 0
        self._color = self._colors[self._colorIndex]
        self._brush.setColor(self._color)

    def colorName(self):
        """docstring for color"""
        return self._color.name()

    def mousePressEvent(self, event):
        self._color = self.colordialog.getColor(self._color)
        self._brush = QBrush(self._color)
Example #45
0
    def paint(self, painter, option, widget=None):
        painter.save()
        path = self.path()
        brush = QBrush(self.brush())
        pen = QPen(self.pen())

        if option.state & QStyle.State_Selected:
            pen.setColor(Qt.red)
            brush.setStyle(Qt.DiagCrossPattern)
            brush.setColor(QColor(40, 40, 40, 100))

        elif option.state & QStyle.State_MouseOver:
            pen.setColor(Qt.blue)

        if option.state & QStyle.State_MouseOver:
            brush.setColor(QColor(100, 100, 100, 100))
            if brush.style() == Qt.NoBrush:
                # Make sure the highlight is actually visible.
                brush.setStyle(Qt.SolidPattern)

        painter.setPen(pen)
        painter.setBrush(brush)
        painter.drawPath(path)
        painter.restore()
Example #46
0
    def __init__(self):
        super(Dial, self).__init__()
        
        self.angle = 0

        # Colors
        self.color               = QColor(120, 120, 120, 255)
        self.notchColor          = QColor(115, 115, 115, 255)
        self.normalBorderColor   = QColor(  255,  255,  255, 30  )
        self.selectedBorderColor = QColor( 255, 191,   0, 102 )
        self.textColor           = QColor(  30,  30,  30, 255 )
        self.shadowColor         = QColor(0, 0, 0, 75)
        self.selectedShadowColor = QColor( 100, 100, 100, 255 )

        # Settings
        self.width, self.height = 75, 75
        
        # Drop Shadow
        self.shadowBlurRadius = 8
        self.shadow = QGraphicsDropShadowEffect()
        self.shadow.setBlurRadius(self.shadowBlurRadius)
        self.shadow.setOffset(0, 0.5)
        self.shadow.setColor(self.shadowColor)
        self.setGraphicsEffect(self.shadow)
        
        # Painter Definitions
        self.pen = QPen()
        gradient = QRadialGradient(self.boundingRect().center() + QPointF(0, -20), 80)
        gradient.setColorAt(0, self.color.lighter(117))
        gradient.setColorAt(1, self.color)
        self.brush = QBrush(gradient)
        self.font  = QFont()
        self.pen.setWidth(1)
        self.pen.setColor(self.normalBorderColor)
        self.brush.setColor(self.color)
        self.font.setPointSize(10)
        
        # Nodegraph Definitions
        self.dragPoint  = None
        self.dragAngle  = 0
        self.dragFactor = 0

        # Notch Specifications
        self.notch = DialNotch()
        self.notch.setParentItem(self)
        self.updateNotch()
    def __init__(self, mapCanvas, geometry, layer):
        super(GeometryHighlightItem, self).__init__(mapCanvas)

        self._mapCanvas = None  # QgsMapCanvas
        self._geometry = None  # QgsGeometry()
        self._brush = QBrush()
        self._pen = QPen()

        self._mapCanvas = mapCanvas
        if not geometry or not isinstance(geometry, QgsGeometry) or geometry.isEmpty() or not geometry.isGeosValid():
            return
        self._geometry = QgsGeometry(geometry)  # Force deep copy
        self.setLineColor(Application.highlightLineColor())
        self.setFillColor(Application.highlightFillColor())
        if (layer and self._mapCanvas.mapSettings().hasCrsTransformEnabled()):
            ct = self._mapCanvas.mapSettings().layerTransform(layer)
            if ct:
                self._geometry.transform(ct)
        self.updateRect()
        self.update()
Example #48
0
    def __init__(self, channelname='masarService', parent=None):
        super(masarUI, self).__init__(parent)
        self.setupUi(self)
        self.__setDateTime()
        self.tabWindowDict = {'comment': self.commentTab}
        self.e2cDict = {} # event to config dictionary
        self.pv4cDict = {} # pv name list for each selected configuration
        self.data4eid = {}
        self.arrayData = {} # store all array data
        
        self.__service = 'masar'
        self.mc = masarClient.client(channelname)
        
        self.__initSystemBomboBox()
        
        self.currentConfigFilter = str(self.configFilterLineEdit.text())
        self.eventConfigFilter = str(self.eventFilterLineEdit.text())
        self.authorText = str(self.authorTextEdit.text())
        self.UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
        self.time_format = "%Y-%m-%d %H:%M:%S"
        self.previewId = None
        self.previewConfName = None
        self.isPreviewSaved = True

        # set bad pv row to grey
        self.brushbadpv = QBrush(QColor(128, 128, 128))
        self.brushbadpv.setStyle(Qt.SolidPattern)
        # DBR_TYPE definition
        #define DBF_STRING  0
        #define DBF_INT     1
        #define DBF_SHORT   1
        #define DBF_FLOAT   2
        #define DBF_ENUM    3
        #define DBF_CHAR    4
        #define DBF_LONG    5
        #define DBF_DOUBLE  6
        self.epicsLong   = [1, 4, 5]
        self.epicsString = [0, 3]
        self.epicsDouble = [2, 6]
        self.epicsNoAccess = [7]
# QT
from PyQt4.QtCore import *
from PyQt4.QtGui import QTableWidget, QTableWidgetItem, QBrush, QColor
# Python <2.7 suport
try:
    from collections import OrderedDict
except:
    from lib.ordered_dictionary import OrderedDict

# COLORS
red = QBrush(QColor(255, 0, 0))
red.setStyle(Qt.SolidPattern)
white = QBrush(QColor(255, 255, 255))
white.setStyle(Qt.SolidPattern)
blue = QBrush(QColor(51, 153, 255))
blue.setStyle(Qt.SolidPattern)

color = {"red": red, "white": white, "blue": blue}
# Tooltips
dic_orbital_space = OrderedDict([('btn_frozen', 'Frozen orbital'),
                               ('btn_active', 'Active orbital'),
    ('btn_inactive', 'Useless orbital')])


class OrbitalTable(QTableWidget):

    status = []

    def __init__(self, *args):
        QTableWidget.__init__(self, *args)
        self.setHorizontalHeaderLabels(['Energy', 'Occu', 'Orbital'])
class GeometryHighlightItem(QgsMapCanvasItem):
    # Code ported from QGIS QgsHighlight

    def __init__(self, mapCanvas, geometry, layer):
        super(GeometryHighlightItem, self).__init__(mapCanvas)

        self._mapCanvas = None  # QgsMapCanvas
        self._geometry = None  # QgsGeometry()
        self._brush = QBrush()
        self._pen = QPen()

        self._mapCanvas = mapCanvas
        if not geometry or not isinstance(geometry, QgsGeometry) or geometry.isEmpty() or not geometry.isGeosValid():
            return
        self._geometry = QgsGeometry(geometry)  # Force deep copy
        self.setLineColor(Application.highlightLineColor())
        self.setFillColor(Application.highlightFillColor())
        if (layer and self._mapCanvas.mapSettings().hasCrsTransformEnabled()):
            ct = self._mapCanvas.mapSettings().layerTransform(layer)
            if ct:
                self._geometry.transform(ct)
        self.updateRect()
        self.update()

    def remove(self):
        self._mapCanvas.scene().removeItem(self)

    def setLineWidth(self, width):
        self._pen.setWidth(width)

    def setLineColor(self, color):
        lineColor = QColor(color)
        lineColor.setAlpha(255)
        self._pen.setColor(lineColor)

    def setFillColor(self, fillColor):
        self._brush.setColor(fillColor)
        self._brush.setStyle(Qt.SolidPattern)

    def updatePosition(self):
        pass

    # protected:
    def paint(self, painter, option=None, widget=None):  # Override
        if not self._geometry:
            return

        painter.setPen(self._pen)
        painter.setBrush(self._brush)

        wkbType = self._geometry.wkbType()
        if wkbType == QGis.WKBPoint or wkbType == QGis.WKBPoint25D:
            self._paintPoint(painter, self._geometry.geometry())
        elif wkbType == QGis.WKBMultiPoint or wkbType == QGis.WKBMultiPoint25D:
            for point in self._geometry.geometry():
                self._paintPoint(painter, point)
        elif wkbType == QGis.WKBLineString or wkbType == QGis.WKBLineString25D:
            self._paintLine(painter, self._geometry.geometry())
        elif wkbType == QGis.WKBMultiLineString or wkbType == QGis.WKBMultiLineString25D:
            for line in self._geometry.geometry():
                self._paintLine(painter, line)
        elif wkbType == QGis.WKBPolygon or wkbType == QGis.WKBPolygon25D:
            self._paintPolygon(painter, self._geometry.geometry())
        elif wkbType == QGis.WKBMultiPolygon or wkbType == QGis.WKBMultiPolygon25D:
            for polygon in self._geometry.geometry():
                self._paintPolygon(painter, polygon)

    def updateRect(self):
        if self._geometry:
            r = self._geometry.boundingBox()
            if r.isEmpty():
                d = self._mapCanvas.extent().width() * 0.005
                r.setXMinimum(r.xMinimum() - d)
                r.setYMinimum(r.yMinimum() - d)
                r.setXMaximum(r.xMaximum() + d)
                r.setYMaximum(r.yMaximum() + d)
            self.setRect(r)
            self.setVisible(True)
        else:
            self.setRect(QgsRectangle())

    # private:

    def _paintPoint(self, painter, point):
        painter.drawEllipse(self.toCanvasCoordinates(point) - self.pos(), 2, 2)

    def _paintLine(self, painter, line):
        polyline = QPolygonF()
        for point in line:
            polyline.append(self.toCanvasCoordinates(point) - self.pos())
        painter.drawPolyline(polyline)

    def _paintPolygon(self, painter, polygon):
        path = QPainterPath()
        for line in polygon:
            ring = QPolygonF()
            for point in line:
                cur = self.toCanvasCoordinates(point) - self.pos()
                ring.append(cur)
            ring.append(ring[0])
            path.addPolygon(ring)
        painter.drawPath(path)
Example #51
0
 def __init__(self):
     super(NodeViewScene, self).__init__()
     
     backgroundBrush = QBrush(QColor(0, 0, 0, 20))
     backgroundBrush.setStyle(QtCore.Qt.CrossPattern)
     self.setBackgroundBrush(backgroundBrush)
class FeatureHighlightItem(QgsMapCanvasItem):
    # Code ported from QGIS QgsHighlight

    def __init__(self, mapCanvas, feature, layer):
        super(FeatureHighlightItem, self).__init__(mapCanvas)

        self._mapCanvas = None  # QgsMapCanvas
        self._brush = QBrush()
        self._pen = QPen()
        self._feature = None  # QgsFeature()
        self._layer = None  # QgsMapLayer()
        self._buffer = 0.0
        self._minWidth = 0.0

        self._mapCanvas = mapCanvas
        if (not layer
                or not feature
                or not isinstance(feature, QgsFeature)
                or not feature.geometry()
                or feature.geometry().isEmpty()
                or not feature.geometry().isGeosValid()):
            return
        self._feature = QgsFeature(feature)  # Force deep copy
        self._layer = layer
        self.setLineColor(Application.highlightLineColor())
        self.setFillColor(Application.highlightFillColor())
        self._minWidth = Application.highlightMinimumWidth()
        self._buffer = Application.highlightBuffer()
        if self._mapCanvas.mapSettings().hasCrsTransformEnabled():
            ct = self._mapCanvas.mapSettings().layerTransform(self._layer)
            if ct:
                self._feature.geometry().transform(ct)
        self.updateRect()
        self.update()

    def remove(self):
        self._mapCanvas.scene().removeItem(self)

    def setLineWidth(self, width):
        self._pen.setWidth(width)

    def setLineColor(self, color):
        self._pen.setColor(color)

    def setFillColor(self, fillColor):
        self._brush.setColor(fillColor)
        self._brush.setStyle(Qt.SolidPattern)

    def setBuffer(self, buff):
        self._buffer = buff

    def setMinWidth(self, width):
        self._minWidth = width

    def layer(self):
        return self._layer

    def updatePosition(self):
        pass

    # protected:
    def paint(self, painter, option=None, widget=None):  # Override
        if not self._feature:
            return

        mapSettings = self._mapCanvas.mapSettings()
        context = QgsRenderContext.fromMapSettings(mapSettings)
        renderer = self._getRenderer(context, self._pen.color(), self._brush.color())

        if renderer:
            context.setPainter(painter)
            renderer.startRender(context, self._layer.fields())
            renderer.renderFeature(self._feature, context)
            renderer.stopRender(context)

    def updateRect(self):
        if self._feature and self._feature.constGeometry():
            m2p = self._mapCanvas.mapSettings().mapToPixel()
            topLeft = m2p.toMapPoint(0, 0)
            res = m2p.mapUnitsPerPixel()
            imageSize = self._mapCanvas.mapSettings().outputSize()
            rect = QgsRectangle(topLeft.x(), topLeft.y(), topLeft.x() + imageSize.width()
                                * res, topLeft.y() - imageSize.height() * res)
            self.setRect(rect)
            self.setVisible(True)
        else:
            self.setRect(QgsRectangle())

    # private:
    def _setSymbol(self, symbol, context, color, fillColor):
        if not symbol:
            return

        for symbolLayer in reversed(symbol.symbolLayers()):
            if symbolLayer:
                if symbolLayer.subSymbol():
                    self._setSymbol(symbolLayer.subSymbol(), context, color, fillColor)
                else:
                    symbolLayer.setColor(color)
                    symbolLayer.setOutlineColor(color)
                    symbolLayer.setFillColor(fillColor)
                    if isinstance(symbolLayer, QgsSimpleMarkerSymbolLayerV2):
                        symbolLayer.setOutlineWidth(
                            self._getSymbolWidth(context, symbolLayer.outlineWidth(), symbolLayer.outlineWidthUnit()))
                    if symbolLayer.type() == QgsSymbolV2.Line:
                        symbolLayer.setWidth(
                            self._getSymbolWidth(context, symbolLayer.width(), symbolLayer.widthUnit()))
                    if symbolLayer.type() == QgsSymbolV2.Fill:
                        symbolLayer.setBorderWidth(
                            self._getSymbolWidth(context, symbolLayer.borderWidth(), symbolLayer.outputUnit()))
                    symbolLayer.removeDataDefinedProperty('color')
                    symbolLayer.removeDataDefinedProperty('color_border')

    def _getSymbolWidth(self, context, width, unit):
        scale = 1.0
        if unit == QgsSymbolV2.MapUnit:
            scale = QgsSymbolLayerV2Utils.lineWidthScaleFactor(
                context, QgsSymbolV2.MM) / QgsSymbolLayerV2Utils.lineWidthScaleFactor(context, QgsSymbolV2.MapUnit)
        width = max(width + 2 * self._buffer * scale, self._minWidth * scale)
        return width

    def _getRenderer(self, context, color, fillColor):
        renderer = None
        if self._layer and self._layer.rendererV2():
            renderer = self._layer.rendererV2().clone()
        if renderer:
            for symbol in renderer.symbols2(context):
                self._setSymbol(symbol, context, color, fillColor)
        return renderer
Example #53
0
    def setupUi(self, showprogress):
        showprogress.setObjectName("showprogress")
        showprogress.resize(335, 310)
        self.verticalLayout = QVBoxLayout(showprogress)
        self.verticalLayout.setObjectName("verticalLayout")
        self.barProgress = QProgressBar(showprogress)
        self.barProgress.setProperty("value", QVariant(0))
        self.barProgress.setObjectName("barProgress")
        self.verticalLayout.addWidget(self.barProgress)
        self.infoText = QTextEdit(showprogress)
        palette = QPalette()
        brush = QBrush(QColor(255, 255, 255))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Active, QPalette.Text, brush)
        brush = QBrush(QColor(0, 0, 0))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Active, QPalette.Base, brush)
        brush = QBrush(QColor(255, 255, 255))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Inactive, QPalette.Text, brush)
        brush = QBrush(QColor(0, 0, 0))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Inactive, QPalette.Base, brush)
        brush = QBrush(QColor(126, 125, 124))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Disabled, QPalette.Text, brush)
        brush = QBrush(QColor(255, 255, 255))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Disabled, QPalette.Base, brush)
        self.infoText.setPalette(palette)
        self.infoText.setObjectName("infoText")
        self.verticalLayout.addWidget(self.infoText)
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        self.fermer = QPushButton(showprogress)
        self.fermer.setObjectName("fermer")
        self.horizontalLayout.addWidget(self.fermer)
        self.verticalLayout.addLayout(self.horizontalLayout)

        self.retranslateUi(showprogress)
        QMetaObject.connectSlotsByName(showprogress)
Example #54
0
File: scj.py Project: Ptaah/SCJ
    def setupUi(self):
        self.setObjectName("SCJ")
        self.setFixedSize(600,260)
        #self.setSizePolicy(QSizePolicy.Minimum, QSizePolicy.Minimum)
        self.verticalLayout = QVBoxLayout(self)
        self.verticalLayout.setObjectName("verticalLayout")
        #self.infoText = QTextEdit(self)
        self.infoText = QLabel(self)
        palette = QPalette()
        brush = QBrush(QColor(245, 245, 245))
        brush.setStyle(Qt.SolidPattern)
        palette.setBrush(QPalette.Normal, QPalette.Background, brush)
        self.infoText.setPalette(palette)
        self.infoText.setAutoFillBackground(True)
        self.infoText.setFixedHeight(200)
        self.infoText.setObjectName("infoText")
        #self.infoText.setReadOnly(True)
        self.infoText.setWordWrap(True)
        self.verticalLayout.addWidget(self.infoText)
        # Manage Actions buttons
        self.horizontalLayout = QHBoxLayout()
        self.horizontalLayout.setObjectName("horizontalLayout")
        spacerItem = QSpacerItem(40, 20, QSizePolicy.Expanding,
                                 QSizePolicy.Minimum)
        self.horizontalLayout.addItem(spacerItem)
        ## Format de sortie
        self.outlabel = QLabel(self.trUtf8("Choix du format de destination"))
        self.horizontalLayout.addWidget(self.outlabel)
        self.output = QComboBox()
        self.output.addItems(self.modes)
        self.output.setCurrentIndex(self.output.findText(self.mode))
        self.horizontalLayout.addWidget(self.output)
        # Buttons
        self.fermer = QPushButton(self)
        self.fermer.setObjectName("fermer")
        self.horizontalLayout.addWidget(self.fermer)
        self.convertDir = QPushButton(self)
        self.convertDir.setObjectName("convertDir")
        self.horizontalLayout.addWidget(self.convertDir)
        self.convertFile = QPushButton(self)
        self.convertFile.setObjectName("convertFile")
        self.horizontalLayout.addWidget(self.convertFile)
        self.verticalLayout.addLayout(self.horizontalLayout)

        # Layout for allButtons
        self.allLayout = QHBoxLayout()
        # Add startAll bouton
        self.startallbtn = QPushButton(self)
        self.allLayout.addWidget(self.startallbtn)
        self.startallbtn.hide()
        self.verticalLayout.addLayout(self.allLayout)
        # Add delAll bouton
        self.delallbtn = QPushButton(self)
        self.allLayout.addWidget(self.delallbtn)
        self.delallbtn.hide()
        # Mode avec scroll
        self.frame = QFrame()
        self.frame.setMinimumSize(520,250)
        self.frame.setMaximumWidth(520)
        self.scroll = QScrollArea()
        self.scroll.setMinimumHeight(180)
        self.jobsLayout = QVBoxLayout(self.frame)
        self.jobsLayout.setSizeConstraint(QLayout.SetMinAndMaxSize)
        #self.jobsLayout.setSizeConstraint(QLayout.SetMinimumSize)
        #self.jobsLayout.setSizeConstraint(QLayout.SetMaximumSize)
        self.scroll.setWidget(self.frame)
        self.scroll.setWidgetResizable(False)
        self.verticalLayout.addWidget(self.scroll)
        self.scroll.hide()

        # Mode sans scroll
        #self.jobsLayout = QVBoxLayout()
        #self.verticalLayout.addLayout(self.jobsLayout)

        # Add a strech to the bottom of the window
        self.verticalLayout.insertStretch(-1)
Example #55
0
class masarUI(QMainWindow, ui_masar.Ui_masar):
    severityDict= {0: 'NO_ALARM',
                   1: 'MINOR_ALARM',
                   2: 'MAJOR_ALARM',
                   3: 'INVALID_ALARM',
                   4: 'ALARM_NSEV'
    }
    
    alarmDict = { 0: 'NO_ALARM',
                 1: 'READ_ALARM',
                 2: 'WRITE_ALARM',
                 3: 'HIHI_ALARM',
                 4: 'HIGH_ALARM',
                 5: 'LOLO_ALARM',
                 6: 'LOW_ALARM',
                 7: 'STATE_ALARM',
                 8: 'COS_ALARM',
                 9: 'COMM_ALARM',
                 10: 'TIMEOUT_ALARM',
                 11: 'HW_LIMIT_ALARM',
                 12: 'CALC_ALARM',
                 13: 'SCAN_ALARM',
                 14: 'LINK_ALARM',
                 15: 'SOFT_ALARM',
                 16: 'BAD_SUB_ALARM',
                 17: 'UDF_ALARM',
                 18: 'DISABLE_ALARM',
                 19: 'SIMM_ALARM',
                 20: 'READ_ACCESS_ALARM',
                 21: 'WRITE_ACCESS_ALARM',
                 22: 'ALARM_NSTATUS'
    }

    def __init__(self, channelname='masarService', parent=None):
        super(masarUI, self).__init__(parent)
        self.setupUi(self)
        self.__setDateTime()
        self.tabWindowDict = {'comment': self.commentTab}
        self.e2cDict = {} # event to config dictionary
        self.pv4cDict = {} # pv name list for each selected configuration
        self.data4eid = {}
        self.arrayData = {} # store all array data
        
        self.__service = 'masar'
        self.mc = masarClient.client(channelname)
        
        self.__initSystemBomboBox()
        
        self.currentConfigFilter = str(self.configFilterLineEdit.text())
        self.eventConfigFilter = str(self.eventFilterLineEdit.text())
        self.authorText = str(self.authorTextEdit.text())
        self.UTC_OFFSET_TIMEDELTA = datetime.datetime.utcnow() - datetime.datetime.now()
        self.time_format = "%Y-%m-%d %H:%M:%S"
        self.previewId = None
        self.previewConfName = None
        self.isPreviewSaved = True

        # set bad pv row to grey
        self.brushbadpv = QBrush(QColor(128, 128, 128))
        self.brushbadpv.setStyle(Qt.SolidPattern)
        # DBR_TYPE definition
        #define DBF_STRING  0
        #define DBF_INT     1
        #define DBF_SHORT   1
        #define DBF_FLOAT   2
        #define DBF_ENUM    3
        #define DBF_CHAR    4
        #define DBF_LONG    5
        #define DBF_DOUBLE  6
        self.epicsLong   = [1, 4, 5]
        self.epicsString = [0, 3]
        self.epicsDouble = [2, 6]
        self.epicsNoAccess = [7]

    def __initSystemBomboBox(self):
        self.systemCombox.addItem(_fromUtf8(""))
        self.systemCombox.setItemText(0, "all")
        results = self.getSystemList()
        if results:
            for i in range(len(results)):
                self.systemCombox.addItem(_fromUtf8(""))
                self.systemCombox.setItemText(i+1, results[i])
        self.system = str(self.systemCombox.currentText())

    def __setDateTime(self):
        self.eventStartDateTime.setDateTime(QDateTime.currentDateTime())
        self.eventEndDateTime.setDateTime(QDateTime.currentDateTime())
        
    def systemComboxChanged(self, qstring):
        self.system = str(qstring)
        
    def configFilterChanged(self):
        self.currentConfigFilter = str(self.configFilterLineEdit.text())

    def eventFilterChanged(self):
        self.eventConfigFilter = str(self.eventFilterLineEdit.text())

    def fetchConfigAction(self):
        self.setConfigTable()
        self.configTableWidget.resizeColumnsToContents()
        
    def authorTextChanged(self):
        self.authorText = str(self.authorTextEdit.text())
    
    def __getComment(self):
        cdlg = commentdlg.CommentDlg()
        cdlg.exec_()
        if cdlg.isAccepted:
            return (cdlg.result())
        else:
            return None
    
    def saveMachinePreviewAction(self):
        if self.isPreviewSaved:
            QMessageBox.warning(self,
                "Warning",
                "Preview (id: %s) for config (%s) has been save already." %(self.previewId, self.previewConfName))
            return
        elif self.previewId == None or self.previewConfName == None:
            QMessageBox.warning(self,
                "Warning",
                "No preview to save.")
        reply = QMessageBox.question(self, 'Message',
                             "Do you want to flag this preview as a good snapshot?",                                          
                             QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
        if reply == QMessageBox.Yes:
            comment = self.__getComment()
        else:
            return
        # comment result always returns a tuple
        # it return like (user, comment note)
        if comment and isinstance(comment, tuple):
            if comment[0] and comment[1]:
                self.saveMachinePreviewData(self.previewId, self.previewConfName, comment)
            else:
                QMessageBox.warning(self,
                    "Warning",
                    "Either user name or comment is empty.")
                return
        else:
            QMessageBox.warning(self,
                "Warning",
                "Comment is cancelled.")
            return
        self.isPreviewSaved = True

    def getMachinePreviewAction(self):
        selectedConfig = self.configTableWidget.selectionModel().selectedRows()
        lc = len(selectedConfig)
        if lc != 1:
            QMessageBox.warning(self,
                "Warning",
                "Please select one configuration, and one only.")
            return

        self.previewId = None
        self.previewConfName = None
        
        cname = str(self.configTableWidget.item(selectedConfig[0].row(), 0).text())
        result = self.getMachinePreviewData(cname)
        if result:
            eid = result[0]
            data = result[1]
            self.pv4cDict[str(eid)] = data['PV Name']
            self.data4eid[str(eid)] = data
            
            try:
                tabWidget = self.tabWindowDict['preview']
                index = self.snapshotTabWidget.indexOf(tabWidget)
            except:
                tabWidget = QTableWidget()
                index = self.snapshotTabWidget.count()
                self.tabWindowDict['preview'] = tabWidget
                QObject.connect(tabWidget, SIGNAL(_fromUtf8("cellDoubleClicked (int,int)")), self.__showArrayData)
            
            self.setSnapshotTable(data, tabWidget, eid)
            tabWidget.resizeColumnsToContents()
            label = QString.fromUtf8((cname+': Preview'))
            self.snapshotTabWidget.addTab(tabWidget, label)
    
            self.snapshotTabWidget.setTabText(index, label)        
            self.snapshotTabWidget.setCurrentIndex(index)
            
            self.previewId = eid
            self.previewConfName = cname
            self.isPreviewSaved = False
        
    def __find_key(self, dic, val):
        """return the key of dictionary dic given the value"""
        return [k for k, v in dic.iteritems() if v == val][0]

    def restoreSnapshotAction(self):
        curWidget = self.snapshotTabWidget.currentWidget()
        if not isinstance(curWidget, QTableWidget):
            QMessageBox.warning(self, 'Warning', 'No snapshot is selected yet.')
            return
        
        eid = self.__find_key(self.tabWindowDict, curWidget)
        if eid == 'comment' or eid == 'preview':
            QMessageBox.warning(self, 'Warning', 'No restore, preview is selected.')
            return
        selectedNoRestorePv = {}
        # get table rows
        rowCount = curWidget.rowCount()
        #Qt.Unchecked           0    The item is unchecked.
        #Qt.PartiallyChecked    1    The item is partially checked. 
        #                            Items in hierarchical models may be partially checked if some, 
        #                            but not all, of their children are checked.
        #Qt.Checked             2    The item is checked.
        for row in range(rowCount):
            selectedNoRestorePv[str(curWidget.item(row, 0).text())] = bool(curWidget.item(row, 8).checkState())
        pvlist = list(self.pv4cDict[str(eid)])
        data = self.data4eid[str(eid)]
        s_val = data['S_value']
        d_val = data['D_value']
        i_val = data['I_value']
        dbrtype = data['DBR']
        is_array = data['isArray']
        # is_connected = data['isConnected']
        # data['PV Name']
        array_value = data['arrayValue']
        
        r_pvlist = [] # restore all pv value in this list
        r_data = []   # value to be restored.
        no_restorepvs = []  # no restore from those pvs
        ignoreall = False # Ignore all pv those do not have any value.
        for index in range(len(pvlist)):
            try:
                # pv is unchecked, which means restore this pv
                if not selectedNoRestorePv[pvlist[index]]:
                    r_pvlist.append(pvlist[index])
                    if is_array[index]:
                        r_data.append(array_value[index])
                    elif dbrtype[index] in self.epicsDouble:
                        r_data.append(d_val[index])
                    elif dbrtype[index] in self.epicsLong:
                        r_data.append(i_val[index])
                    elif dbrtype[index] in self.epicsString:
                        r_data.append(s_val[index])
                    elif dbrtype[index] in self.epicsNoAccess:
                        if not ignoreall:
                            reply = QMessageBox.warning(self, 'Warning', 'Cannot restore pv: %s\nValue is invalid. \nDo you want to ignore it and continue?'%(pvlist[index]),
                                                        QMessageBox.Yes | QMessageBox.YesToAll | QMessageBox.Cancel, QMessageBox.Cancel)
                            if reply == QMessageBox.Yes:
                                no_restorepvs.append(pvlist[index])
                            elif reply == QMessageBox.YesToAll:
                                no_restorepvs.append(pvlist[index])
                                ignoreall = True
                            elif reply == QMessageBox.Cancel:
                                return
                        else:
                            no_restorepvs.append(pvlist[index])
                else:
                    no_restorepvs.append(pvlist[index])
            except:
                print (type(pvlist[index]), pvlist[index])
                QMessageBox.warning(self, 'Warning', 'PV name (%s) is invalid.'%(pvlist[index]))
                return
    
        if len(no_restorepvs) == rowCount:
            QMessageBox.warning(self, 'Warning', 'All pvs are checked, and not restoring.')
            return
        
        #cagetres = cav3.caget(r_pvlist, throw=False)
        #problempvlist=[]
        #for rtmp in cagetres:
        #    if not rtmp.ok:
        #        problempvlist.append(rtmp)
        #ignoreallconnection = False
        #forceall = False
        #if len(problempvlist) > 0:
        #    for problempv in problempvlist:
        #        if not ignoreall and not forceall:
        #            reply = QMessageBox.warning(self, 'Warning', 'There are a problem to connect pv %s. \nDo you want to ignore it and continue?'%(problempv),
        #                                        QMessageBox.Yes | QMessageBox.YesToAll | QMessageBox.No | QMessageBox.NoToAll | QMessageBox.Cancel, QMessageBox.Cancel)
        #            if reply == QMessageBox.Yes:
        #                # ignore this pv only
        #                no_restorepvs.append(problempv.name)
        #            elif reply == QMessageBox.No:
        #                # not ignore this pv
        #                pass
        #            elif reply == QMessageBox.YesToAll:
        #                # ignore all pvs that there might have potential connection problem
        #                # this does not overwrite all previous decisions
        #                no_restorepvs.append(problempv.name)
        #                ignoreallconnection = True
        #            elif reply == QMessageBox.NoToAll:
        #                # force restore pvs althouth there might have potential connection problem
        #                # this does not overwrites all previous decisions
        #                forceall = True
        #            elif reply == QMessageBox.Cancel:
        #                # cancel this operation
        #                return
        #        elif ignoreallconnection:
        #            no_restorepvs.append(problempv.name)
        #if ignoreall or ignoreallconnection:
        if ignoreall:
            str_no_restore = "\n"
            for no_restorepv in no_restorepvs:
                str_no_restore += ' - %s' %no_restorepv + '\n'
            print("No restore for the following pvs:\n"+str_no_restore+"\n========list end (not to restore pv)========")
        elif len(no_restorepvs) > 0:
            str_no_restore = "\n"
            for no_restorepv in no_restorepvs:
                str_no_restore += ' - %s' %no_restorepv + '\n'
            reply = QMessageBox.question(self, 'Message',
                                 "Partial pv will not be restored. Do you want to continue?\n(Please check terminal for a full list.)",                                          
                                 QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
            if reply == QMessageBox.No:
                return
            print("No restore for the following pvs:\n"+str_no_restore+"\n========list end (not to restore pv)========")
        
        bad_pvs = []
        try:
            final_restorepv = []
            final_restorepvval = []
            for i in range(len(r_pvlist)):
                if r_pvlist[i] not in no_restorepvs:
                    final_restorepv.append(r_pvlist[i])
                    final_restorepvval.append(r_data[i])
            if len(final_restorepv) > 0:
                results = cav3.caput(final_restorepv, final_restorepvval, wait=True, throw=False)
                for i in range(len(results)):
                    res = results[i]
                    if not res.ok:
                        # try 3 times again to set value to each pv
                        # first try wait 1 second, second try wait 2 seconds, and last try wait 3 seconds.
                        for j in range(1, 4):
                            ressub = cav3.caput(final_restorepv[i], final_restorepvval[i], wait=True, throw=False, timeout=j)
                            if ressub.ok:
                                break
                        if not ressub.ok:
                            # record as a bad pv if it still fails
                            bad_pvs.append(res)
        except:
            QMessageBox.warning(self, 'Warning', 'Error during restoring snapshot to live machine.')
            return
        
        if len(bad_pvs) > 0:
            message = "Failed to restore some pvs. PLease check the terminal for a full list."
            QMessageBox.warning(self, 'Warning', message)
            output = ""
            for bad_pv in bad_pvs:
                output += "\n  "+bad_pv.name + ": "+cav3.cadef.ca_message(bad_pv.errorcode)
            print ("Failed to restore the following pvs which is caused by:"+output+"\n========list end (failed to restore pv)========")
        else:
            QMessageBox.information(self, "Success", "Successfully restore machine with selected snapshot.")
        
    def __arrayTextFormat(self, arrayvalue):
        """
        display max 8 characters in a table cell
        """
        array_text = str(arrayvalue)

        if len(str(array_text)) > 8:
            array_text = str(array_text)[:8]+' ..., ...)'

        return array_text

    def getLiveMachineAction(self):
        curWidget = self.snapshotTabWidget.currentWidget()
        if isinstance(curWidget, QTableWidget):
            # get event id
            eid = self.__find_key(self.tabWindowDict, curWidget)
            # 2 special case:
            if eid == 'preview':
                eid = self.previewId # get event id for preview snapshot
            elif eid == 'comment':
                return # nothing should do here
            pvlist = self.pv4cDict[str(eid)]
            
            data = self.getLiveMachineData(pvlist)
            if data:
                channelName = data[0]
                s_value = data[1]
                d_value = data[2]
                i_value = data[3]
                dbrtype = data[4]
#                isConnected = data[5]
                is_array = data[6]
                array_value = data[7]

                dd = {}
                noMatchedPv = []
                
                # put channel name and its order into a dictionary
                for i in range(len(channelName)):
                    dd[str(channelName[i])] = i
                
                # get table rows
                rowCount = curWidget.rowCount()
                for i in range(rowCount):
                    try:
                        index = dd[str(curWidget.item(i, 0).text())]
                        if is_array[index]:
                            self.__setTableItem(curWidget, i, 6, self.__arrayTextFormat(array_value[index]))
                            self.arrayData[channelName[index]+"_"+str(eid)+'_live'] = array_value[index]
                        else:
                            if dbrtype[index] in self.epicsDouble:
                                self.__setTableItem(curWidget, i, 6, str(d_value[index]))
            
                                try:
                                    saved_val = float(str(curWidget.item(i, 5).text()))
                                    if d_value[index] != None:
                                        delta = d_value[index] - saved_val
                                        if abs(delta) < 1.0e-6:
                                            delta = 0
                                    else:
                                        delta = None
                                except:
                                    delta='N/A'
                                self.__setTableItem(curWidget, i, 7, str(delta))
                            elif dbrtype[index] in self.epicsLong:
                                self.__setTableItem(curWidget, i, 6, str(i_value[index]))
            
                                if dbrtype[index] in self.epicsNoAccess:
                                    pass
                                else:
                                    try:
                                        saved_val = int(float(str(curWidget.item(i, 5).text())))
                                        if i_value[index] != None:
                                            delta = i_value[index] - saved_val
                                        else:
                                            delta = None
                                    except:
                                        delta='N/A'
                                    self.__setTableItem(curWidget, i, 7, str(delta))
                            elif dbrtype[index] in self.epicsString:
                                self.__setTableItem(curWidget, i, 6, str(s_value[index]))
                    except:
                        noMatchedPv.append(str(curWidget.item(i, 0).text()))
                if len(noMatchedPv) > 0:
                    print ("Can not find the following pv for this snapshot: \n", noMatchedPv)
        else:
            QMessageBox.warning(self, "Warning", "Not a snapshot.")
            return
        
    def useTimeRange(self, state):
        if state == Qt.Checked:
            self.eventStartDateTime.setEnabled(True)
            self.eventEndDateTime.setEnabled(True)
        else:
            self.eventStartDateTime.setEnabled(False)
            self.eventEndDateTime.setEnabled(False)
            
    def fetchEventAction(self):
        selectedConfigs = self.configTableWidget.selectionModel().selectedRows()
        configIds=[]
        configNames = []
        for idx in selectedConfigs: 
            configIds.append(str(self.configTableWidget.item(idx.row(), 4).text()))
            configNames.append(str(self.configTableWidget.item(idx.row(), 0).text()))
        
        data = self.retrieveEventData(configids=configIds, confignames=configNames)
        if data:
            self.setEventTable(data)
            self.eventTableWidget.resizeColumnsToContents()
    
    def retrieveSnapshot(self):
        selectedItems = self.eventTableWidget.selectionModel().selectedRows()
        if len(selectedItems) <= 0:
            QMessageBox.warning(self,
                            "Warning",
                            "Please select at least one event.")
            return

        eventTs=[]
        eventNames=[]
        eventIds = []
        for idx in selectedItems: 
            eventNames.append(str(self.eventTableWidget.item(idx.row(), 0).text()))
            eventTs.append(str(self.eventTableWidget.item(idx.row(), 3).text()))
            eventIds.append(str(self.eventTableWidget.item(idx.row(), 4).text()))
            
        self.snapshotTabWidget.setStatusTip("Snapshot data")
        self.setSnapshotTabWindow(eventNames, eventTs, eventIds)
        
    def setConfigTable(self):
        data = self.retrieveConfigData()
        if data:
            self.setTable(data, self.configTableWidget)
    
    def setSnapshotTabWindow(self, eventNames, eventTs, eventIds):
        tabWidget = None
        isNew = True
        
        for i in range(len(eventIds)):
            if self.tabWindowDict.has_key(eventIds[i]):
                tabWidget = self.tabWindowDict[eventIds[i]]
            else:
                tabWidget = QTableWidget()
                self.tabWindowDict[eventIds[i]] = tabWidget
                QObject.connect(tabWidget, SIGNAL(_fromUtf8("cellDoubleClicked (int,int)")), self.__showArrayData)
            
            data = self.retrieveMasarData(eventid=eventIds[i])
            if data:
                if isNew:
                    for j in range(self.snapshotTabWidget.count(), 0, -1):
                        self.snapshotTabWidget.removeTab(j)
            
                    self.pv4cDict.clear()
                    self.data4eid.clear()
                    self.arrayData.clear()
                    isNew = False

                tabWidget.clear()
                self.setSnapshotTable(data, tabWidget, eventIds[i])
                tabWidget.resizeColumnsToContents()
                ts = eventTs[i].split('.')[0]
                
                label = QString.fromUtf8((eventNames[i]+': ' + ts))
                self.snapshotTabWidget.addTab(tabWidget, label)
                self.snapshotTabWidget.setTabText(i+1, label)
                self.pv4cDict[str(eventIds[i])] = data['PV Name']
                self.data4eid[str(eventIds[i])] = data
            
        self.snapshotTabWidget.setCurrentIndex(1)
        
    def __showArrayData(self, row, column):
        if column != 5 and column != 6: # display the array value only
            return
        curWidget = self.snapshotTabWidget.currentWidget()
        if not isinstance(curWidget, QTableWidget):
            QMessageBox.warning(self, 'Warning', 'No snapshot is selected yet.')
            return
        
        eid = self.__find_key(self.tabWindowDict, curWidget)
        if eid == 'comment':
            QMessageBox.warning(self, 'Warning', 'It is comment panel.')

        if eid == 'preview':
            eid = self.previewId
        pvname = str(curWidget.item(row, 0).text())
        try:
            arraySaved = self.arrayData[pvname+'_'+str(eid)]
        except:
            QMessageBox.warning(self, 'Warning', 'No array data found for this pv.')
            return
        if eid != 'preview':
            try:
                arrayLive = self.arrayData[pvname+"_"+str(eid)+'_live']
                arrardlg = ShowArrayValueDlg(pvname, arraySaved, arrayLive)
            except:
                arrardlg = ShowArrayValueDlg(pvname, arraySaved)
        else:
            arrardlg = ShowArrayValueDlg(pvname, arraySaved)
        arrardlg.exec_()
    
    def setEventTable(self, data):
        self.setTable(data, self.eventTableWidget)

    def __setTableItem(self, table, row, col, text):
        item = table.item(row, col)
        if item:
            item.setText(text)
        else:
            newitem = QTableWidgetItem(text)
            newitem.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable)
            table.setItem(row, col, newitem)
                
    def setSnapshotTable(self, data, table, eventid):
        if data:
            length = len(data.values()[0])
        else:
            print ('data is empty, exit.')
            return
        
        for i in range(1, len(data.values())):
            if length != len(data.values()[i]):
                QMessageBox.warning(self,
                                    "Warning",
                                    "Data length are not consistent.")

                return

        if isinstance(data, odict) and isinstance(table, QTableWidget):
            table.setSortingEnabled(False)
            table.clear()
        
            nrows = len(data.values()[0])
            #    ('pv name label',  'dbr_type label', 'string value', 'int value', 'double value', 'status label', 'severity label', 
            #     'ioc time stamp label', 'ioc time stamp nano label', 'is_array', 'array_value'),
            # => (pv_name, status, severity, ioc_timestamp, saved value)
            # ncols = len(data) - 6
            # ncols = ncols + 3  # 2 columns for live data and (live data - saved data), selected restore pv
            ncols = len(data) - 3
            table.setRowCount(nrows)
            table.setColumnCount(ncols)
            
            pvnames = data['PV Name']
            status = data['Status']
            severity = data['Severity']
            ts = data['Time stamp']
            ts_nano = data['Time stamp (nano)']
            dbrtype = data['DBR']
            s_value = data['S_value']
            i_value = data['I_value']
            d_value = data['D_value']
            isConnected = data['isConnected']
            is_array = data['isArray'] 
            array_value = data['arrayValue']
            
            keys = ['Name', 'Status', 'Severity', 'Time Stamp', 'Connection', 'Saved Value', 'Live Value', 'Delta', 'Not Restore']
            table.setHorizontalHeaderLabels(keys)
            
            for i in range(nrows):
                item = table.item(i, 8)
                if item:
                    item.setCheckState(False)
                else:
                    item = QTableWidgetItem()
                    item.setFlags(Qt.ItemIsEnabled|Qt.ItemIsUserCheckable)
                    table.setItem(i, 8, item)
                    item.setCheckState(False)

                if pvnames[i]:
                    self.__setTableItem(table, i, 0, pvnames[i])
                if status[i]:
                    self.__setTableItem(table, i, 1, str(status[i]))
                if severity[i]:
                    self.__setTableItem(table, i, 2, str(severity[i]))
                if ts[i]:
                    dt = str(datetime.datetime.fromtimestamp(ts[i]+ts_nano[i]*1.0e-9))
                    self.__setTableItem(table, i, 3, dt)
                        
                if is_array[i]:
                    self.__setTableItem(table, i, 5, self.__arrayTextFormat(array_value[i]))
                    self.arrayData[pvnames[i]+'_'+str(eventid)] = array_value[i]
                else:
                    if dbrtype[i] in self.epicsDouble:
                        self.__setTableItem(table, i, 5, str(d_value[i]))
                    elif dbrtype[i] in self.epicsLong:
                        self.__setTableItem(table, i, 5, str(i_value[i]))
                    elif dbrtype[i] in self.epicsString:
                        self.__setTableItem(table, i, 5, str(s_value[i]))
                    elif dbrtype[i] in self.epicsNoAccess:
                        # channel are not connected.
                        pass
                    else:
                        print('invalid dbr type (code = %s)'%(dbrtype[i]))
                
                if isConnected[i]:
                    self.__setTableItem(table, i, 4, str(bool(isConnected[i])))
                    item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
                else:
                    self.__setTableItem(table, i, 4, 'False')
                    item.setCheckState(True)
                    item.setSelected(True)
                    # disable user checkable function
                    item.setFlags(item.flags() ^ Qt.ItemIsUserCheckable)
                    for item_idx in range(9):
                        itemtmp = table.item(i, item_idx)
                        if not itemtmp:
                            itemtmp = QTableWidgetItem()
                            table.setItem(i, item_idx, itemtmp)
                        itemtmp.setBackground(self.brushbadpv)

            table.setSortingEnabled(True)
        else:
            raise "Either given data is not an instance of OrderedDict or table is not an instance of QtGui.QTableWidget"

    def setTable(self, data, table):
        """
        Set data view.
        The data has to be an ordered dictionary, and table is a QtGui.QTableWidget
        Here is an example to construct an ordered dictionary.
        """
        if data:
            length = len(data.values()[0])
        else:
            print ('data is empty, exit.')
            return
        for i in range(1, len(data.values())):
            if length != len(data.values()[i]):
                QMessageBox.warning(self,
                                    "Warning",
                                    "Data length are not consistent.")

                return

        if isinstance(data, odict) and isinstance(table, QTableWidget):
            nrows = len(data.values()[0])
            ncols = len(data)
            table.setRowCount(nrows)
            table.setColumnCount(ncols)
            # Removes all items in the view, and also all selections
            table.clear()
            table.setHorizontalHeaderLabels(data.keys())
            
            n = 0
            for key in data:
                m = 0
                for item in data[key]:
                    if not isinstance(item, basestring):
                        item = str(item)
                    if item:
                        newitem = QTableWidgetItem(item)
                        newitem.setFlags(Qt.ItemIsEnabled|Qt.ItemIsSelectable)
                        table.setItem(m, n, newitem)
                    m += 1
                n += 1
        else:
            raise "Either given data is not an instance of OrderedDict or table is not an instance of QtGui.QTableWidget"

    def getSystemList(self):
        try:
            return self.mc.retrieveSystemList()
        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Cannot connect to MASAR server.\nPlease check the serviceName, network connection, and service status.")

            return
    
    def retrieveConfigData(self):
        data = odict()

        params = {"system": self.system,
                  "servicename": self.__service,
                  "configname": self.currentConfigFilter}
        try:
            rpcResult = self.mc.retrieveServiceConfigs(params)
            
            utctimes = rpcResult[3]
            config_ts = []
            for ut in utctimes:
                ts = str(datetime.datetime.fromtimestamp(time.mktime(time.strptime(ut, self.time_format))) - self.UTC_OFFSET_TIMEDELTA)
                config_ts.append(ts)

        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Exception happened during retrieving configurations.")
            return False
        
        if not rpcResult:
            return False
        
        data['Name'] = rpcResult[1]
        data['Description'] = rpcResult[2]
        data['Date'] = config_ts
        data['Version'] = rpcResult[4]
        data['Id'] = rpcResult[0]
        return data
    
    def retrieveEventData(self,configids=None,confignames=None):
        start = None
        end = None
        if self.timeRangeCheckBox.isChecked():
            start = self.eventStartDateTime.dateTime().toPyDateTime() + self.UTC_OFFSET_TIMEDELTA
            end = self.eventEndDateTime.dateTime().toPyDateTime() + self.UTC_OFFSET_TIMEDELTA
            if start > end:
                QMessageBox.warning(self,
                            "Warning",
                            "Please select a correct time range.")
                return

        event_ids = []
        event_ts = []
        event_desc = []
        c_names = []
        event_author = []
        self.e2cDict.clear()

        if configids:
            for i in range(len(configids)):
                cid = configids[i]
                params = {'configid': cid,
                          "comment": self.eventConfigFilter,
                          "user": self.authorText}
                if self.timeRangeCheckBox.isChecked():
                    params['start'] = str(start)
                    params['end'] = str(end)
                try:
                    rpcResult = self.mc.retrieveServiceEvents(params)
                except:
                    QMessageBox.warning(self,
                                "Warning",
                                "Except happened during retrieving events.")
                    return False
                if not rpcResult:
                    return False
                eids = rpcResult[0]
                usertag = rpcResult[1]
                utctimes = rpcResult[2]
                author = rpcResult[3]

                event_ids = event_ids[:] + (list(eids))[:]
                event_desc = event_desc[:] + (list(usertag))[:]
                event_author = event_author[:] + (list(author))[:]
                for j in range(len(eids)):
                    self.e2cDict[str(eids[j])] = [cid, usertag[j],confignames[i]]
                for ut in utctimes:
                    c_names.append(confignames[i])
                    ts = str(datetime.datetime.fromtimestamp(time.mktime(time.strptime(ut, self.time_format))) - self.UTC_OFFSET_TIMEDELTA)
                    event_ts.append(ts)
        else:
            return False
                    
        data = odict()
        data['Config'] = c_names
        data['Description'] = event_desc
        data['Author'] = event_author
        data['Time stamp'] = event_ts
        data['Id'] = event_ids
        return data

    def retrieveMasarData(self, eventid=None):
        data = odict()

        params = {'eventid': eventid}
        
        try:
            rpcResult = self.mc.retrieveSnapshot(params)
        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Except happened during retrieving snapshot data.")
            return False
        if not rpcResult:
            return False
        pvnames = rpcResult[0]
        s_value = rpcResult[1]
        d_value = rpcResult[2]
        i_value = rpcResult[3]
        dbrtype = rpcResult[4]
        isConnected = rpcResult[5]
        ts = rpcResult[6]
        ts_nano = rpcResult[7]
        severity = list(rpcResult[8])
        status = list(rpcResult[9])
        is_array = rpcResult[10]
        raw_array_value  = rpcResult[11]
        
        array_value = []
        for i in range(len(severity)):
            try:
                severity[i] = self.severityDict[severity[i]]
            except:
                severity[i] = 'N/A'
            try:
                status[i] = self.alarmDict[status[i]]
            except:
                status[i] = 'N/A'

            if dbrtype[i] in self.epicsLong:
                array_value.append(raw_array_value[i][2])
            elif dbrtype[i] in self.epicsDouble:
                array_value.append(raw_array_value[i][1])
            elif dbrtype[i] in self.epicsString:
                # string value
                array_value.append(raw_array_value[i][0])
            elif dbrtype[i] in self.epicsNoAccess:
                # when the value is no_access, use the double value no matter what it is
                array_value.append(raw_array_value[i][1])

        data['PV Name'] = pvnames
        data['Status'] = status
        data['Severity'] = severity
        data['Time stamp'] = ts
        data['Time stamp (nano)'] = ts_nano
        data['DBR'] = dbrtype
        data['S_value'] = s_value
        data['I_value'] = i_value
        data['D_value'] = d_value
        data['isConnected'] = isConnected
        data['isArray'] = is_array
        data['arrayValue'] = array_value
        
        return data

    def saveMachinePreviewData(self, eventid, confname, comment):
        if not eventid:
            QMessageBox.warning(self,
                        "Warning",
                        "Unknown event.")
            return

        params = {'eventid':    str(eventid),
                  'configname': str(confname),
                  'user':       str(comment[0]),
                  'desc':       str(comment[1])}
        try:
            result = self.mc.updateSnapshotEvent(params)
        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Except happened during update snapshot event.")
            return False
        if result:
            QMessageBox.information(self,"Successful", 
                                    " Succeed to save preview")
        else:
            QMessageBox.information(self, "Failures",
                                    "Failed to save preview.")

    def getMachinePreviewData(self, configName):
        params = {'configname': configName,
                  'servicename': 'masar'}
        
        try:
            rpcResult = self.mc.saveSnapshot(params)
        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Except happened during getting machine preview.")
            return False
        if not rpcResult:
            return False
        eventid = rpcResult[0]
        pvnames = rpcResult[1]
        s_value = rpcResult[2]
        d_value = rpcResult[3]
        i_value = rpcResult[4]
        dbrtype = rpcResult[5]
        isConnected = rpcResult[6]
        ts = rpcResult[7]
        ts_nano = list(rpcResult[8])
        severity = list(rpcResult[9])
        status = list(rpcResult[10])
        is_array = rpcResult[11]
        raw_array_value  = rpcResult[12]

        array_value = []
        for i in range(len(severity)):
            try:
                severity[i] = self.severityDict[severity[i]]
            except:
                severity[i] = 'N/A'
            try:
                status[i] = self.alarmDict[status[i]]
            except:
                status[i] = 'N/A'

            if dbrtype[i] in self.epicsLong:
                array_value.append(raw_array_value[i][2])
            elif dbrtype[i] in self.epicsDouble:
                array_value.append(raw_array_value[i][1])
            elif dbrtype[i] in self.epicsString:
                # string value
                array_value.append(raw_array_value[i][0])
            elif dbrtype[i] in self.epicsNoAccess:
                # when the value is no_access, use the double value no matter what it is
                array_value.append(raw_array_value[i][1])
        
        data = odict()
        data['PV Name'] = pvnames
        data['Status'] = status
        data['Severity'] = severity
        data['Time stamp'] = ts
        data['Time stamp (nano)'] = ts_nano
        data['DBR'] = dbrtype
        data['S_value'] = s_value
        data['I_value'] = i_value
        data['D_value'] = d_value
        data['isConnected'] = isConnected
        data['isArray'] = is_array
        data['arrayValue'] = array_value

        return (eventid, data)
        
    def getLiveMachineData(self, pvlist):
        params = {}
        for pv in pvlist:
            params[pv] = pv
        # channelName,stringValue,doubleValue,longValue,dbrType,isConnected, is_array, array_value
        array_value = []
        try:
            rpcResult = self.mc.getLiveMachine(params)
        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Except happened during getting live machine.")
            return False
        if not rpcResult:
            return False
        channelName = rpcResult[0]
        stringValue = rpcResult[1]
        doubleValue = rpcResult[2]
        longValue = rpcResult[3]
        dbrtype = rpcResult[4]
        isConnected = rpcResult[5]
        is_array = rpcResult[6]
        raw_array_value = rpcResult[7]
        for i in range(len(is_array)):
            if dbrtype[i] in self.epicsLong:
                array_value.append(raw_array_value[i][2])
            elif dbrtype[i] in self.epicsDouble:
                array_value.append(raw_array_value[i][1])
            elif dbrtype[i] in self.epicsString:
                # string value
                array_value.append(raw_array_value[i][0])
            elif dbrtype[i] in self.epicsNoAccess:
                # when the value is no_access, use the double value no matter what it is
                array_value.append(raw_array_value[i][1])
        
        return (channelName,stringValue,doubleValue,longValue,dbrtype,isConnected,is_array, array_value)

    def saveDataFileAction(self):
        """
        Save data into a CSV file.
        """
        curWidget = self.snapshotTabWidget.currentWidget()
        if not isinstance(curWidget, QTableWidget):
            QMessageBox.warning(self, 'Warning', 'No snapshot is selected yet.')
            return
        eid = self.__find_key(self.tabWindowDict, curWidget)
#        if eid == 'comment' or eid == 'preview':
#            QMessageBox.warning(self, 'Warning', 'No restore, preview is selected.')
#            return
        data = self.data4eid[str(eid)]
        
        pvnames = data['PV Name']
        status = data['Status']
        severity = data['Severity']
        ts = data['Time stamp']
        ts_nano = data['Time stamp (nano)']
        dbrtype = data['DBR']
        s_value = data['S_value']
        i_value = data['I_value']
        d_value = data['D_value']
        isConnected = data['isConnected']
        is_array = data['isArray'] 
        array_value = data['arrayValue']
        
        head = '# pv name, status, severity, time stamp, epics dbr, is connected, is array, value'

        filename = QFileDialog.getSaveFileName(self, 'Save File', '.')
        if not filename:
            return
        try:
            fname = open(filename, 'w')
            fname.write(head+'\n')
            for i in range(len(pvnames)):
                line = pvnames[i]
                line += ','+str(status[i])
                line += ','+str(severity[i])
                line += ','+str(datetime.datetime.fromtimestamp(ts[i]+ts_nano[i]*1.0e-9))
                line += ','+str(dbrtype[i])
                line += ','+str(bool(isConnected[i]))
                line += ','+str(bool(is_array[i]))
                if is_array[i]:
                    line += ','+str(array_value[i])
                else:
                    if dbrtype[i] in self.epicsDouble:
                        line += ','+str(d_value[i])
                    elif dbrtype[i] in self.epicsLong:
                        line += ','+str(i_value[i])
                    elif dbrtype[i] in self.epicsString:
                        line += ','+str(s_value[i])
                    else:
                        line += ''
                fname.write(line+'\n')
            fname.close()
        except:
            QMessageBox.warning(self,
                                "Warning",
                                "Cannot write to the file. Please check the writing permission.")
Example #56
0
 def mousePressEvent(self, event):
     self._color = self.colordialog.getColor(self._color)
     self._brush = QBrush(self._color)
Example #57
0
class Dial(QGraphicsItem):
    """
    Dial
    """
    
    def __init__(self):
        super(Dial, self).__init__()
        
        self.angle = 0

        # Colors
        self.color               = QColor(120, 120, 120, 255)
        self.notchColor          = QColor(115, 115, 115, 255)
        self.normalBorderColor   = QColor(  255,  255,  255, 30  )
        self.selectedBorderColor = QColor( 255, 191,   0, 102 )
        self.textColor           = QColor(  30,  30,  30, 255 )
        self.shadowColor         = QColor(0, 0, 0, 75)
        self.selectedShadowColor = QColor( 100, 100, 100, 255 )

        # Settings
        self.width, self.height = 75, 75
        
        # Drop Shadow
        self.shadowBlurRadius = 8
        self.shadow = QGraphicsDropShadowEffect()
        self.shadow.setBlurRadius(self.shadowBlurRadius)
        self.shadow.setOffset(0, 0.5)
        self.shadow.setColor(self.shadowColor)
        self.setGraphicsEffect(self.shadow)
        
        # Painter Definitions
        self.pen = QPen()
        gradient = QRadialGradient(self.boundingRect().center() + QPointF(0, -20), 80)
        gradient.setColorAt(0, self.color.lighter(117))
        gradient.setColorAt(1, self.color)
        self.brush = QBrush(gradient)
        self.font  = QFont()
        self.pen.setWidth(1)
        self.pen.setColor(self.normalBorderColor)
        self.brush.setColor(self.color)
        self.font.setPointSize(10)
        
        # Nodegraph Definitions
        self.dragPoint  = None
        self.dragAngle  = 0
        self.dragFactor = 0

        # Notch Specifications
        self.notch = DialNotch()
        self.notch.setParentItem(self)
        self.updateNotch()

    def boundingRect(self):
        """
        Overrides QGraphicsItem's boundingRect() virtual public function and 
        returns a valid bounding rect based on calculated width and height.
        """
        return QRectF(0, 0, self.width, self.height).adjusted(
            -self.shadowBlurRadius, -self.shadowBlurRadius, 
             self.shadowBlurRadius,  self.shadowBlurRadius)

    def paint(self, painter, option, widget):
        """
        Overrides QGraphicsItem's paint() virtual public function.
        """
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        painter.drawEllipse(self.boundingRect())

    def mousePressEvent(self, event):
        self.dragPoint  = event.scenePos()
        self.dragAngle  = self.angle
        part     = self.height / 2
        distance = event.pos().y() - part
        if distance == 0:
            self.dragFactor = 0
        else:
            self.dragFactor = part / distance

    def mouseMoveEvent(self, event):
        scenePos = event.scenePos()
        d = scenePos - self.dragPoint
        self.angle = self.dragAngle + d.x() * self.dragFactor
        self.updateNotch()

    def mouseReleaseEvent(self, event):
        self.dragPoint = None
        self.dragAngle = 0

    def updateNotch(self):
        f  = 0.02
        dx = (self.width  - self.notch.width)  / 2
        dy = (self.height - self.notch.height) / 2
        x  = math.sin(math.radians(self.angle)) * dx + dx
        y  = math.cos(math.radians(self.angle)) * dy + dy
        self.notch.setPos(x, y)
Example #58
0
        sys.exit (1)

    app= QApplication (sys.argv)
    win= QMainWindow ()

    scene= QGraphicsScene ()

    item= QGraphicsPixmapItem ()
    scene.addItem (item)

    view= QGraphicsView (scene, win)
    view.setFrameShadow (QFrame.Plain)
    view.setFrameStyle (QFrame.NoFrame)
    view.show()

    brush = QBrush(QColor(0, 0, 0))
    brush.setStyle(Qt.SolidPattern)
    view.setBackgroundBrush(brush)

    runner= OMIMMain (view, scene, item, sys.argv[1])

    timer= QTimer (app)
    timer.timeout.connect (runner.nextImage)
    timer.start (float (sys.argv[2])*1000)

    firstImage= QTimer.singleShot (200, runner.nextImage)

    win.setCentralWidget (view)
    win.showFullScreen ()

    app.exec_ ()
Example #59
0
	def populateTree(self):
		"""Populates tree view with information from ItemTracker."""
		if len(self.errorIds):
			self.mkError("{0} entries do not have valid "
			"ItemTracker IDs in Bionumerics.".format(len(self.errorIds)))

			for key, msg in self.errorIds.iteritems():
				self.mkError("KEY: {0} {1}".format(key, msg))

		if not len(self.selectedIds):
			self.statusbar.showMessage("No items to process", 5000)
			return

		parents = {}
		headers = ["Items", "Selected", "SelectedBy", "Viability", "Volume",
				 "DNA concentration", "UserName", "TubePresent", "InputDate",
				 "AlternID", "Status"]

		self.treeWidget.setItemsExpandable(True)
		self.treeWidget.setAlternatingRowColors(True)
		self.treeWidget.setColumnCount(len(headers))
		self.treeWidget.setHeaderLabels(headers)

		msg = "Getting information from ItemTracker. Please wait..."
		self.statusbar.showMessage(msg)

		self.progressBar.setMinimum(0)
		self.progressBar.setMaximum(0)
		self.progressBar.show()

		(treeData, self.itemProperties,
		 message) = lims.GetDictionary((self.selectedIds.keys()))

		if len(message):
			for msg in message:
				self.mkError("ItemTracker error: {0}".format(msg))

		if not len(treeData):
			self.mkError("Could not get data from ItemTracker for"
						"selected entries")
			self.statusBar().clearMessage()
			self.progressBar.hide()
			self.updateUi()
			return

		# bugfix: If ItemType property does not exist for the first item
		# self.database is not set and tree view is not updated.
		db = None
		if not self.database:
			for item in self.itemProperties.values():
				try:
					db = item["ItemType"]
				except KeyError:
					pass

				if db == "Salmonella":
					self.database = db
					break
				elif db == "Listeria":
					self.database = db
					break

		self.progressBar.setMaximum(len(treeData))
		count = 0
		for key, value  in treeData.iteritems():
			count += 1
			self.progressBar.setValue(count)
			if not(value and isinstance(value, dict)):
				self.mkWarn("No data returned for key {0}".format(key))
				continue

			items = {}
			items[key] = value
			for results in self.getData(items, key):
				parent = parents.get(results[0])

				if not parent:
					parent_id = self.selectedIds[results[0]]
					self.strainInfo[parent_id] = {self.database:[],
												"Frozen Stock":[], "DNA":[]}
					parent = QTreeWidgetItem(self.treeWidget,
					[unicode(parent_id)])

					brush = QBrush()
					brush.setColor(Qt.blue)
					parent.setForeground(0, brush)
					parent.setIcon(0, QIcon(":/branch-closed.png"))
					parent.setData(0, Qt.CheckStateRole, QVariant())
					parents[results[0]] = parent

				for children in results[1]:
					itemName = self.itemProperties[children]["ItemName"]
					if not self.itemIds.get(itemName):
						self.itemIds[itemName] = children

					childprops = []
					childprops.append(unicode(itemName))

					for header in headers[1:]:
						try:
							childprop = self.itemProperties[children][header]

							if childprop is None or childprop == "":
								childprops.append(unicode(""))
							else:
								childprops.append(unicode(childprop))
						except KeyError:
							childprops.append(unicode(""))
							continue

					childs = parents.get(children)
					if not childs:
						childs = QTreeWidgetItem(parent, childprops)

						if self.itemProperties[children]["TubePresent"] == "-":
							childs.setBackgroundColor(0, QColor(232, 87, 82))
							childs.setForeground(0, QColor(255, 255, 255))

						if self.itemProperties[children]["Selected"] == "yes":
							childs.setBackgroundColor(0, QColor(119, 183, 83))
							childs.setForeground(0, QColor(255, 255, 255))

						itype = self.itemProperties[children]["ItemType"]
						if itype:
							self.strainInfo[parent_id][itype].append(itemName)
						parents[children] = childs
					childs.setCheckState(0, Qt.Unchecked)

		self.treeWidget.expandAll()
		for i in range(len(headers)):
			self.treeWidget.resizeColumnToContents(i)
		if not self.treeWidget.isEnabled():
			self.treeWidget.setEnabled(True)
		self.mkInfo("Processed <b>{0}</b> entries".format(len(treeData)))

		self.progressBar.setValue(len(treeData))
		self.progressBar.hide()
		self.populatedTree = True
		self.updateUi()
		self.statusbar.showMessage("Ready", 5000)
	def onSubmitClicked(self):
		self.wordsMatched = True
		self.allWordsMatched = True
		brushRed = QBrush(QColor(255,0,0))
		brushRed.setStyle(Qt.SolidPattern)
		
		brushGreen = QBrush(QColor(0,255,0))
		brushGreen.setStyle(Qt.SolidPattern)
		
		# validate whether the user all matched the blanks with a value
		#self.onNextSubmitValidation()
		textNotFilled = False
		for row in range(0, len(self.currentSentenceListInTable)):
			if self.sentenceToFillTable.item(row, 0).text() == self.currentSentenceListInTable[row]:
				textNotFilled = True
		if textNotFilled:
			QMessageBox.information(self,
						"Fill the sentences",
						"Match all the sentences in the table",
						QMessageBox.Ok)
		else:
			splittedSentence = []
			foundWordInSentence = ""
			self.rightWordListCopy = self.rightWordList
			for row in range(0, len(self.currentSentenceListInTable)):
				sentenceFilled = str(self.sentenceToFillTable.item(row, 0).text())
				newSplittedSentence = [word.strip() for word in sentenceFilled.split()]
				splittedSentence = []
				for word in newSplittedSentence:
					match = re.search(r'\w+', word)
					if match:
						splittedSentence.append(str(match.group()))
				
				wordList = self.rightWordListCopy[row]
				
				if len(wordList) > 1:
					firstWord = wordList[0].strip()
					secondWord = wordList[1].strip()
					if ' ' in firstWord:
						for word in firstWord.split():
							if word not in splittedSentence:
								self.wordsMatched = False
					else:
						if firstWord not in splittedSentence:
							self.wordsMatched = False
					
					if self.wordsMatched: ## check is valid only if the first word is matched
						if ' ' in secondWord:
							for word in secondWord.split():
								if word not in splittedSentence:
									self.wordsMatched = False
						else:
							if secondWord not in splittedSentence:
								self.wordsMatched = False
				elif len(wordList) == 1:
					word = wordList[0].strip()
					if word not in splittedSentence:
						self.wordsMatched = False
				
				if self.wordsMatched:
					self.sentenceToFillTable.item(row, 0).setBackground(brushGreen)
				else:
					self.sentenceToFillTable.item(row, 0).setBackground(brushRed)
					self.allWordsMatched = False
				
				self.wordsMatched = True
					
			if self.allWordsMatched:
				self.nextButton.setEnabled(True)
				QMessageBox.information(self,
								"Fill the sentences",
								"All sentences are matched",
								QMessageBox.Ok)