def __init__(self, *args):
     super(DimensioningRect, self).__init__(*args)
     svgRenderer = QtSvg.QSvgRenderer()
     self.action_ind = 0
     self.actions = [
         'selectLine1', 'selectLine2', 'placeDimensionBaseLine',
         'placeDimensionText'
     ]
     self.dimPreview = QtSvg.QGraphicsSvgItem()
     self.dimSVGRenderer = QtSvg.QSvgRenderer()
     self.dimSVGRenderer.load(
         QtCore.QByteArray('''<svg width="%i" height="%i"></svg>''' %
                           (args[2], args[3])))
     self.dimPreview.setSharedRenderer(self.dimSVGRenderer)
     self.dimPreview.setZValue(100)
     graphicsScene.addItem(self.dimPreview)
     self.dim_svg_KWs = dict(
         #svgTag='svg', #svgParms='width="%i" height="%i"' % (args[2],args[3]),
         strokeWidth=1.0,
         arrowL1=10,
         arrowL2=4,
         arrowW=6,
         textRenderer=textRenderer,
         gap_datum_points=8,
         dimension_line_overshoot=4,
     )
     self.svg_wrap = XML_SVG_Wrapper(args)
Esempio n. 2
0
 def getPixmapFromSvg(self, svgfile, w=48, h=48):
     svg_renderer = QtSvg.QSvgRenderer(svgfile)
     image = QtGui.QImage(w, h, QtGui.QImage.Format_ARGB32)
     image.fill(0x00000000)
     svg_renderer.render(QtGui.QPainter(image))
     pixmap = QtGui.QPixmap.fromImage(image)
     return pixmap
 def update(self):
     try:
         if hasattr( self, 'SVG'):
             self.remove()
         drawingVars  = self.drawingVars 
         parms = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Drawing_Dimensioning")
         div_period = parms.GetInt( 'grid_display_period',default_grid_display_period   )
         lineWidth = parms.GetFloat( 'grid_line_width', default_grid_line_width ) 
         if parms.GetBool('grid_on', False) and  div_period > 0 and lineWidth > 0: 
             self.SVG =  QtSvg.QGraphicsSvgItem() 
             self.SVGRenderer = QtSvg.QSvgRenderer()
             dArg =''
             div = parms.GetFloat( 'grid_spacing', default_grid_spacing )
             clr = unsignedToRGBText(parms.GetUnsigned( 'grid_color', default_grid_clr ))
             W = drawingVars.width / drawingVars.VRT_scale
             H = drawingVars.height / drawingVars.VRT_scale
             for i in range(1, int(W / (div*div_period) )+1):
                 dArg = dArg + ' M %f 0 L %f %f' % (i*div*div_period, i*div*div_period, H)
             for i in range(1, int(H / (div*div_period) )+1):
                 dArg = dArg + ' M 0 %f L %f %f' % (i*div*div_period, W, i*div*div_period)
             self.SVGRenderer.load( QtCore.QByteArray( '''<svg width="%i" height="%i"> <path stroke="%srgb(0, 255, 0)" stroke-width="%f" d="%s"/> </svg>''' % (drawingVars.width, drawingVars.height, clr, lineWidth, dArg) ) )
             self.SVG.setSharedRenderer( self.SVGRenderer )
             self.SVG.setTransform( drawingVars.transform )
             self.SVG.setZValue( 0.08 ) #ensure behind dimension preview SVG ...
             drawingVars.graphicsScene.addItem( self.SVG )
             #FreeCAD.Console.PrintMessage('Grid Svg Added to Scene\n')
     except:
         FreeCAD.Console.PrintError(traceback.format_exc())
        def initUI(self):

            vbox = QtGui.QVBoxLayout()

            btn = QtGui.QPushButton('Dialog', self)
            btn.setSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
            btn.move(20, 20)
            vbox.addWidget(btn)

            btn.clicked.connect(self.showDialog)

            self.lbl = QtGui.QLabel('Knowledge only matters', self)
            self.lbl.move(130, 20)
            vbox.addWidget(self.lbl)

            width = 250
            height = 180

            self.graphicsScene = QtGui.QGraphicsScene(0, 0, width * 0.8,
                                                      height / 2)
            self.dimPreview = QtSvg.QGraphicsSvgItem()
            self.dimSVGRenderer = QtSvg.QSvgRenderer()
            self.dimSVGRenderer.load(
                QtCore.QByteArray('''<svg width="%i" height="%i"></svg>''' %
                                  (width, height)))
            self.dimPreview.setSharedRenderer(self.dimSVGRenderer)
            self.graphicsScene.addItem(self.dimPreview)
            self.graphicsView = QtGui.QGraphicsView(self.graphicsScene)
            vbox.addWidget(self.graphicsView)

            self.setLayout(vbox)
            self.setGeometry(300, 300, width, height)
            self.setWindowTitle('Font dialog')
            self.show()
 def mousePressEvent(self, event):
     if event.button() == QtCore.Qt.MouseButton.LeftButton:
         pos = event.scenePos()
         x, y = pos.x(), pos.y()
         if self.action_ind == 2:  #then 'placeDimensionBaseLine':
             self.point3 = x, y
             print('point3 set to x=%3.1f y=%3.1f' % (x, y))
             self.action_ind = self.action_ind + 1
         elif self.action_ind == 3:  # then placeDimensionText
             self.point4 = x, y
             self.action_ind = 0
             XML = angularDimensionSVG(self.line1, self.line2,
                                       self.point3[0], self.point3[1], x, y,
                                       **self.dim_svg_KWs)
             if XML != None:
                 print(XML)
                 newSvg = QtSvg.QGraphicsSvgItem()
                 svgRenderer = QtSvg.QSvgRenderer()
                 svgRenderer.load(QtCore.QByteArray(self.svg_wrap(XML)))
                 newSvg.setSharedRenderer(svgRenderer)
                 dimensions.append(
                     [newSvg, svgRenderer]
                 )  #as to prevent the garbage collector from freeing these resources (which causes a crash)
                 self.scene().addItem(newSvg)
                 self.referer1.unlockSelection()
                 self.referer2.unlockSelection()
Esempio n. 6
0
    def __init__(self, path, parent):
        QtOpenGL.QGLWidget.__init__(
            self, QtOpenGL.QGLFormat(QtOpenGL.QGL.SampleBuffers))

        self.doc = QtSvg.QSvgRenderer(path, self)
        self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"), self,
                     QtCore.SLOT("update()"))
 def mousePressEvent( self, event ):
     if event.button() == QtCore.Qt.MouseButton.LeftButton:
         pos = event.scenePos()
         x, y = pos.x(), pos.y()
         if self.action_ind == 0:
             self.center = x, y
             print('center set to x=%3.1f y=%3.1f' % (x,y))
             self.action_ind = self.action_ind + 1
         elif self.action_ind == 1:
             self.topLeft  = x, y
             print('topLeft set to x=%3.1f y=%3.1f' % (x,y))
             self.action_ind = self.action_ind + 1
         elif self.action_ind == 2: # then place
             self.bottomRight = x, y
             self.action_ind = 0
             XML = centerLinesSVG( self.center, self.topLeft, self.bottomRight,
                                **self.dim_svg_KWs )
             if XML <> None:
                 print(XML)
                 newSvg = QtSvg.QGraphicsSvgItem(  )
                 svgRenderer = QtSvg.QSvgRenderer()
                 svgRenderer.load( QtCore.QByteArray( XML ))
                 newSvg.setSharedRenderer( svgRenderer )
                 dimensions.append([ newSvg, svgRenderer]) #as to prevent the garbage collector from freeing these resources (which causes a crash)
                 self.scene().addItem( newSvg )
Esempio n. 8
0
    def __init__(self, path, parent):
        QtGui.QWidget.__init__(self, parent)

        self.buffer = QtGui.QImage()
        self.m_dirty = False

        self.doc = QtSvg.QSvgRenderer(path, self)
        self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"), self.poluteImage)
 def __init__(self,*args):
     super(DimensioningRect, self).__init__(*args)
     svgRenderer = QtSvg.QSvgRenderer()
     self.action_ind = 0
     self.dimPreview = QtSvg.QGraphicsSvgItem()
     self.dimSVGRenderer = QtSvg.QSvgRenderer()
     self.dimSVGRenderer.load( QtCore.QByteArray( '''<svg width="%i" height="%i"></svg>''' % (args[2],args[3])))
     self.dimPreview.setSharedRenderer( self.dimSVGRenderer )
     self.dimPreview.setZValue(100)
     graphicsScene.addItem( self.dimPreview )
     self.dim_svg_KWs = dict(
         svgTag='svg', svgParms='width="%i" height="%i"' % (args[2],args[3]),
         centerLine_width=2.0, centerLine_len_dot=5, centerLine_len_dash=15, centerLine_len_gap=5
         )
     assert not hasattr(self, 'topLeft')
     assert not hasattr(self, 'bottomRight')
     assert not hasattr(self, 'center')
Esempio n. 10
0
def addOrthoView(XML):
    o1 = QtSvg.QGraphicsSvgItem()
    o1Renderer = QtSvg.QSvgRenderer()
    o1Renderer.load(QtCore.QByteArray(XML))
    o1.setSharedRenderer(o1Renderer)
    graphicsScene.addItem(o1)
    orthoViews.append([o1, o1Renderer, XML
                       ])  #protect o1 and o1Renderer against garbage collector
Esempio n. 11
0
    def intrinsicSize(self, doc, posInDocument, format):
        renderer = QtSvg.QSvgRenderer(
            format.property(Window.SvgData).toByteArray())
        size = renderer.defaultSize()

        if size.height() > 25:
            size *= 25.0 / size.height()

        return QtCore.QSizeF(size)
Esempio n. 12
0
 def load_svg(self, str_):
     xml = QtCore.QXmlStreamReader(str_)
     svg = QtSvg.QSvgRenderer(xml)
     w, h = svg.viewBoxF().size().toTuple()
     s = max((w, h, MIN_LOGICAL_SIZE))
     self.contents = QtGui.QPixmap(s, s)
     painter = QtGui.QPainter(self.contents)
     painter.fillRect(0, 0, s, s, QtCore.Qt.white)
     svg.render(painter, QtCore.QRectF((s - w) / 2, (s - h) / 2, w, h))
     painter.end()
 def __init__(self, *args):
     super(DimensioningRect, self).__init__(*args)
     svgRenderer = QtSvg.QSvgRenderer()
     self.action_ind = 0
     self.dimPreview = QtSvg.QGraphicsSvgItem()
     self.dimSVGRenderer = QtSvg.QSvgRenderer()
     self.dimSVGRenderer.load(
         QtCore.QByteArray('''<svg width="%i" height="%i"></svg>''' %
                           (args[2], args[3])))
     self.dimPreview.setSharedRenderer(self.dimSVGRenderer)
     graphicsScene.addItem(self.dimPreview)
     self.dim_svg_KWs = dict(
         #svgTag='svg', svgParms='width="%i" height="%i"' % (args[2],args[3]),
         strokeWidth=1.0,
         arrowL1=10,
         arrowL2=4,
         arrowW=6,
         textRenderer=textRenderer,
         centerPointDia=4)
     self.svg_wrap = XML_SVG_Wrapper(args)
Esempio n. 14
0
 def print_svg(self, svg_source):
     #logger.info(svg_source)
     svg_renderer = QtSvg.QSvgRenderer()
     svg_renderer.load(QtCore.QByteArray(svg_source))
     logger.info('svg renderer')
     printer = QtGui.QPrinter()
     printer.setPageMargins(50, 250, 50, 250, QtGui.QPrinter.DevicePixel)
     print_dialog = QtGui.QPrintDialog(printer, self.app.view)
     print_dialog.setOption(QtGui.QAbstractPrintDialog.PrintToFile, True)
     print_dialog.setOption(QtGui.QAbstractPrintDialog.PrintPageRange, True)
     if print_dialog.exec_() == QtGui.QDialog.Accepted:
         painter = QtGui.QPainter()
         painter.begin(printer)
         svg_renderer.render(painter)
         painter.end()
Esempio n. 15
0
 def getSvgRenderer(self, printer=None):
     if not SVG:
         raise RuntimeError("QtSvg module missing. Please compile Qt with SVG support")
         return
     if sys.version < '3.0':
         import cStringIO as StringIO
         imgData = StringIO.StringIO()
     else:
         from io import BytesIO
         imgData = BytesIO()
     self.saveGraph(imgData, fileFormat='svg')
     imgData.flush()
     imgData.seek(0)
     svgRawData = imgData.read()
     svgRendererData = QtCore.QXmlStreamReader(svgRawData)
     svgRenderer = QtSvg.QSvgRenderer(svgRendererData)
     svgRenderer._svgRawData = svgRawData
     svgRenderer._svgRendererData = svgRendererData
     return svgRenderer
Esempio n. 16
0
    def buildImages(self):
        paths = glob.glob(os.path.join(os.path.dirname(self.metaImageset.filePath), self.path))

        images = []
        for path in paths:
            pathSplit = path.rsplit(".", 1)
            name = os.path.basename(pathSplit[0])

            svgRenderer = QtSvg.QSvgRenderer(path)
            qimage = QtGui.QImage(svgRenderer.defaultSize().width(), svgRenderer.defaultSize().height(), QtGui.QImage.Format_ARGB32)
            qimage.fill(0)
            painter = QtGui.QPainter()
            painter.begin(qimage)
            svgRenderer.render(painter)
            painter.end()

            image = inputs.Image(name, qimage, self.xOffset, self.yOffset)
            images.append(image)

        return images
Esempio n. 17
0
    def prepareImage(self):
        # vytvoření instance třídy QImage
        self.image = QtGui.QImage(MainWindow.IMAGE_WIDTH,
                                  MainWindow.IMAGE_HEIGHT,
                                  QtGui.QImage.Format_RGB32)

        # vytvoření objektu typu QPainter s předáním
        # reference na "pokreslovaný" objekt
        qp = QtGui.QPainter(self.image)
        # nastavení barvy kreslení
        qp.setPen(QtGui.QColor(64, 255, 64))
        # vykreslení úsečky
        qp.drawLine(10, 10, MainWindow.IMAGE_WIDTH - 10,
                    MainWindow.IMAGE_HEIGHT - 10)

        renderer = QtSvg.QSvgRenderer("logo.svg")
        renderer.render(qp)

        # vytvoření instance třídy QPixmap z objektu QImage
        self.pixmap = QtGui.QPixmap.fromImage(self.image)
Esempio n. 18
0
    def __init__(self, ico_name, px=512, scale=1.0, color=None):
        super(Ico, self).__init__()
        if exists(ico_name):
            self.path = ico_name
        else:
            global ICO_PATH
            if ICO_PATH is None:
                ICO_PATH = join(a2core.A2Obj.inst().paths.a2, 'ui', 'res',
                                '%s.svg')
            self.path = ICO_PATH % ico_name
            if not exists(self.path):
                log.error('SVG_icon: could not find path to "%s"!' % ico_name)
                return

        renderer = QtSvg.QSvgRenderer(self.path)
        image = QtGui.QImage(QtCore.QSize(px, px), QtGui.QImage.Format_ARGB32)
        painter = QtGui.QPainter(image)

        if scale != 1.0:
            t = (px / 2) * (1 - scale)
            painter.translate(t, t)
            painter.scale(scale, scale)

        renderer.render(painter)

        if color:
            if isinstance(color, (int, float)):
                color = [int(color)] * 3
            if isinstance(color, (tuple, list)):
                color = QtGui.QColor(color[0], color[1], color[2])
            if isinstance(color, QtGui.QColor):
                painter.setCompositionMode(
                    QtGui.QPainter.CompositionMode_SourceIn)
                painter.fillRect(image.rect(), color)
            else:
                log.error('Cannot use color: "%s"' % str(color))

        pixmap = QtGui.QPixmap.fromImage(image)
        self.addPixmap(pixmap)
        painter.end()
Esempio n. 19
0
    def requestImage(self, id, size, requestedSize):
        print 'requestImage:', {
            'id': id,
            'size': size,
            'requestedSize': requestedSize
        }
        img_path = '../media/{}.svg'.format(id)
        renderer = QtSvg.QSvgRenderer(img_path)
        print renderer.defaultSize()
        if requestedSize.width() == -1 or requestedSize.height() == -1:
            s = renderer.defaultSize()
        else:
            s = requestedSize
            ds = renderer.defaultSize()
            rel = float(ds.width()) / ds.height()
            s.setWidth(s.height() * rel)
        print s

        img = QtGui.QImage(s, QtGui.QImage.Format_ARGB32_Premultiplied)
        img.fill(0)
        renderer.render(QtGui.QPainter(img))
        return img
Esempio n. 20
0
def IconFromSVG(iconPath):
    with open(iconPath, 'r') as iconFile:
        iconText = iconFile.read()
    for key in ApplicationColors.keys():
        iconText = iconText.replace(key, ApplicationColors[key])
    iconStream = QtCore.QXmlStreamReader(iconText)
    svg_renderer = QtSvg.QSvgRenderer(iconStream)

    iconWidth = int(
        float(
            iconText.split('<svg', 1)[1].split('width="', 1)[1].split('"',
                                                                      1)[0]))
    iconHeight = int(
        float(
            iconText.split('<svg', 1)[1].split('height="', 1)[1].split('"',
                                                                       1)[0]))
    image = QtGui.QImage(iconWidth, iconHeight, QtGui.QImage.Format_ARGB32)

    image.fill(0x00000000)
    svg_renderer.render(QtGui.QPainter(image))
    pixmap = QtGui.QPixmap.fromImage(image)
    icon = QtGui.QIcon(pixmap)
    icon.actualSize(QtCore.QSize(64, 64))
    return icon
 def mousePressEvent(self, event):
     if self.action_ind == 0:
         return
     if event.button() == QtCore.Qt.MouseButton.LeftButton:
         #print( 'current action: %s' % self.actions[self.action_ind] )
         pos = event.scenePos()
         x, y = pos.x(), pos.y()
         if self.action_ind == 1:
             self.point2 = x, y
             print('point2 set to x=%3.1f y=%3.1f' % (x, y))
             self.action_ind = self.action_ind + 1
         elif self.action_ind == 2:
             self.point3 = x, y
             print('point3 set to x=%3.1f y=%3.1f' % (x, y))
             self.action_ind = self.action_ind + 1
         else:  #'placeDimensionText'
             self.point4 = x, y
             XML = circularDimensionSVG(self.point1[0], self.point1[1],
                                        self.radius, self.point2[0],
                                        self.point2[1], self.point3[0],
                                        self.point3[1], x, y,
                                        **self.dim_svg_KWs)
             self.action_ind = 0
             self.radius = self.radius * 2
             if XML != None:
                 print(XML)
                 newSvg = QtSvg.QGraphicsSvgItem()
                 svgRenderer = QtSvg.QSvgRenderer()
                 svgRenderer.load(QtCore.QByteArray(self.svg_wrap(XML)))
                 newSvg.setSharedRenderer(svgRenderer)
                 dimensions.append(
                     [newSvg, svgRenderer]
                 )  #as to prevent the garbage collector from freeing these resources (which causes a crash)
                 self.scene().addItem(newSvg)
     elif event.button() == QtCore.Qt.MouseButton.RightButton:
         self.action_ind = self.action_ind - 1
Esempio n. 22
0
    def load(self, images, positionedImages={}):
        self._scene.clear()
        self._pixmaps = {}

        from PySide import QtSvg
        standardPixmapsvg = QtSvg.QSvgRenderer(self)
        standardPixmapsvg.setViewBox(QtCore.QRect(0, 0, self._width, self._height))
        standardPixmapsvg.load("/usr/share/icons/gnome-human/scalable/status/image-loading.svg")
        self.standardPixmap = QtGui.QPixmap(self._width, self._height)

        painter = QtGui.QPainter(self.standardPixmap)
        painter.fillRect(QtCore.QRect(0,0,self._width,self._height), QtGui.QBrush(self.palette().color(self.backgroundRole())))
        standardPixmapsvg.render(painter)

        imagesToLoad = images
        if positionedImages:
            imagesToLoad = positionedImages.keys()
    
        maxX = maxY = minX = minY = 0

        total = len(imagesToLoad)
        current = 0
        row = 0
        for path in images:
            dirname  = os.path.dirname(path)
            basename = os.path.basename(path)
            if os.path.isdir(path) or os.path.basename(path).startswith('.'):
                continue
    
            cachePath = os.path.join(dirname, ".thumbnails/"+basename)
            if os.path.exists( cachePath ) and os.stat(cachePath).st_mtime > os.stat(path):
                print 'cache hit'
                imagePath = cachePath

            current += 1
            item = QdGraphicsPixmapItem(path, QtCore.QSize(self._width, self._height))
            if positionedImages and path in positionedImages:
                x, y = positionedImages[path]
            else:
                modresult = current % self.imagesPerRow()
                y = self._height * row
                padding = 5
                if modresult == 0:
                    row += 1
                    x = padding
                else:
                    x = padding + modresult*(self._width + padding)
 
            minX = min(minX, x)
            minY = min(minY, y)
            maxX = max(maxX, x)
            maxY = max(maxY, y)

            item.setPos(x, y)
            item.setPixmap(self.standardPixmap)
            
            self._pixmaps[path] = item
            self._scene.addItem(item)

        self._progressTotal = current
        self._progressCurrent = 0

        paths = self._pixmaps.keys()
        paths.sort()

        # load in background thread(s)
        self._loader.load(paths)
        self.setScene(self._scene)
Esempio n. 23
0
    def __init__(self, path, parent):
        QtGui.QWidget.__init__(self, parent)

        self.doc = QtSvg.QSvgRenderer(path, self)
        self.connect(self.doc, QtCore.SIGNAL("repaintNeeded()"), self,
                     QtCore.SLOT("update()"))
Esempio n. 24
0
 def drawCustomWidget(self, painter):
     renderer = QtSvg.QSvgRenderer()
     renderer.load(self.colors[self.color])
     renderer.render(painter)
Esempio n. 25
0
 def drawObject(self, painter, rect, doc, posInDocument, format):
     renderer = QtSvg.QSvgRenderer(
         format.property(Window.SvgData).toByteArray())
     renderer.render(painter, rect)
Esempio n. 26
0
    def initUI(self):
        """
        Initializes graphical elements of Terminal.

        Including...

        * Toolbar
        * :class:`.gui.Control_Panel`
        * :class:`.plots.Plot_Widget`
        """

        # set central widget
        self.widget = QtGui.QWidget()
        self.setCentralWidget(self.widget)

        # Start GUI
        self.layout = QtGui.QGridLayout()
        self.layout.setSpacing(0)
        self.layout.setContentsMargins(0, 0, 0, 0)
        self.widget.setLayout(self.layout)

        self.setWindowTitle('Terminal')
        #self.menuBar().setFixedHeight(40)

        # Main panel layout
        #self.panel_layout.setContentsMargins(0,0,0,0)

        # Init toolbar
        # File menu
        # make menu take up 1/10 of the screen
        winsize = app.desktop().availableGeometry()
        bar_height = (winsize.height() / 25) + 5

        self.menuBar().setFixedHeight(bar_height)
        #self.menuBar().setStyleSheet('QMenuBar:item {  }')

        self.file_menu = self.menuBar().addMenu("&File")
        self.file_menu.setObjectName("file")
        new_pilot_act = QtGui.QAction("New &Pilot",
                                      self,
                                      triggered=self.new_pilot)
        new_prot_act = QtGui.QAction("New Pro&tocol",
                                     self,
                                     triggered=self.new_protocol)
        #batch_create_subjects = QtGui.QAction("Batch &Create subjects", self, triggered=self.batch_subjects)
        # TODO: Update pis
        self.file_menu.addAction(new_pilot_act)
        self.file_menu.addAction(new_prot_act)
        #self.file_menu.addAction(batch_create_subjects)

        # Tools menu
        self.tool_menu = self.menuBar().addMenu("&Tools")
        subject_weights_act = QtGui.QAction("View Subject &Weights",
                                            self,
                                            triggered=self.subject_weights)
        update_protocol_act = QtGui.QAction("Update Protocols",
                                            self,
                                            triggered=self.update_protocols)
        reassign_act = QtGui.QAction("Batch Reassign Protocols",
                                     self,
                                     triggered=self.reassign_protocols)
        calibrate_act = QtGui.QAction("Calibrate &Water Ports",
                                      self,
                                      triggered=self.calibrate_ports)
        self.tool_menu.addAction(subject_weights_act)
        self.tool_menu.addAction(update_protocol_act)
        self.tool_menu.addAction(reassign_act)
        self.tool_menu.addAction(calibrate_act)

        # Tests menu
        self.tests_menu = self.menuBar().addMenu("Test&s")
        bandwidth_test_act = QtGui.QAction("Test Bandwidth",
                                           self,
                                           triggered=self.test_bandwidth)
        self.tests_menu.addAction(bandwidth_test_act)

        ## Init main panels and add to layout
        # Control panel sits on the left, controls pilots & subjects
        self.control_panel = Control_Panel(pilots=self.pilots,
                                           subjects=self.subjects,
                                           start_fn=self.toggle_start)

        # Data panel sits on the right, plots stuff.
        self.data_panel = Plot_Widget()
        self.data_panel.init_plots(self.pilots.keys())

        # Logo goes up top
        # https://stackoverflow.com/questions/25671275/pyside-how-to-set-an-svg-icon-in-qtreewidgets-item-and-change-the-size-of-the

        pixmap_path = os.path.join(os.path.dirname(prefs.REPODIR), 'graphics',
                                   'autopilot_logo_small.svg')
        #svg_renderer = QtSvg.QSvgRenderer(pixmap_path)
        #image = QtGui.QImage()
        #self.logo = QtSvg.QSvgWidget()

        # set size, preserving aspect ratio
        logo_height = round(44.0 * ((bar_height - 5) / 44.0))
        logo_width = round(139 * ((bar_height - 5) / 44.0))

        svg_renderer = QtSvg.QSvgRenderer(pixmap_path)
        image = QtGui.QImage(logo_width, logo_height,
                             QtGui.QImage.Format_ARGB32)
        # Set the ARGB to 0 to prevent rendering artifacts
        image.fill(0x00000000)
        svg_renderer.render(QtGui.QPainter(image))
        pixmap = QtGui.QPixmap.fromImage(image)
        self.logo = QtGui.QLabel()
        self.logo.setPixmap(pixmap)

        self.menuBar().setCornerWidget(self.logo, QtCore.Qt.TopRightCorner)
        self.menuBar().adjustSize()

        #self.logo.load(pixmap_path)
        # Combine all in main layout
        #self.layout.addWidget(self.logo, 0,0,1,2)
        self.layout.addWidget(self.control_panel, 0, 0, 1, 1)
        self.layout.addWidget(self.data_panel, 0, 1, 1, 1)
        self.layout.setColumnStretch(0, 1)
        self.layout.setColumnStretch(1, 3)

        # Set size of window to be fullscreen without maximization
        # Until a better solution is found, if not set large enough, the pilot tabs will
        # expand into infinity. See the Expandable_Tabs class
        #pdb.set_trace()
        screensize = app.desktop().screenGeometry()
        winsize = app.desktop().availableGeometry()

        # want to subtract bounding title box, our title bar, and logo height.
        # our y offset will be the size of the bounding title box

        # Then our tilebar
        # multiply by three to get the inner (file, etc.) bar, the top bar (min, maximize, etc)
        # and then the very top system tray bar in ubuntu
        #titleBarHeight = self.style().pixelMetric(QtGui.QStyle.PM_TitleBarHeight,
        #                                          QtGui.QStyleOptionTitleBar(), self) * 3
        title_bar_height = screensize.height() - winsize.height()

        #titleBarHeight = bar_height*2
        # finally our logo
        logo_height = bar_height

        winheight = winsize.height(
        ) - title_bar_height - logo_height  # also subtract logo height
        winsize.setHeight(winheight)
        self.max_height = winheight
        self.setGeometry(winsize)
        self.setSizePolicy(QtGui.QSizePolicy.Maximum,
                           QtGui.QSizePolicy.Maximum)

        # Set heights on control panel and data panel

        # move to primary display and show maximized
        primary_display = app.desktop().availableGeometry(0)
        self.move(primary_display.left(), primary_display.top())
        # self.resize(primary_display.width(), primary_display.height())
        #
        self.control_panel.setMaximumHeight(winheight)
        self.data_panel.setMaximumHeight(winheight)

        # set stylesheet for main window
        self.setStyleSheet(styles.TERMINAL)

        # set fonts to antialias
        self.setFont(self.font().setStyleStrategy(QtGui.QFont.PreferAntialias))

        self.show()
        logging.info('UI Initialized')