Exemplo n.º 1
0
 def center(self):
     frameGm = self.frameGeometry()
     screen = QApplication.desktop().screenNumber(
         QApplication.desktop().cursor().pos())
     centerPoint = QApplication.desktop().screenGeometry(screen).center()
     frameGm.moveCenter(centerPoint)
     self.move(frameGm.topLeft())
 def mousePressEvent(self, QMouseEvent):
     self.hide()
     xd = QApplication.desktop().screenGeometry().x() - QApplication.desktop().availableGeometry().x()
     yd = QApplication.desktop().screenGeometry().y() - QApplication.desktop().availableGeometry().y()
     self.pos = numpy.array([QMouseEvent.pos().x()-xd,
                            QMouseEvent.pos().y()-yd])
     self.emit(SIGNAL("mouse_press()"))
Exemplo n.º 3
0
 def loadUIInfo( self ):
     
     Commands.makeFile( Window.uiInfoPath )
     f = open( Window.uiInfoPath, 'r' )
     try:data = json.load( f )
     except:data = {}
     f.close()
     if not data.items():
         self.resize( self.defaultWidth, self.defaultHeight )
         return
     try:
         posX, posY = data['mainWindow']['position']
         width, height = data['mainWindow']['size']
     except:
         return
     desktop = QApplication.desktop()
     desktopWidth = desktop.width()
     desktopHeight = desktop.height()
     
     if posX + width > desktopWidth: posX = desktopWidth - width
     if posY + height > desktopWidth: posY = desktopHeight - height
     if posX < 0 : posX = 0
     
     self.move( posX, posY )
     self.resize( width, height )
Exemplo n.º 4
0
    def loadInfo(filePath=None):

        if not filePath:
            filePath = Window_global.infoPath

        f = open(filePath, 'r')
        try:
            data = json.load(f)
        except:
            f.close()
            return None
        f.close()

        if not data: return None

        try:
            posX = data[0]
            posY = data[1]
            width = data[2]
            height = data[3]

            Window_global.mainGui.resize(width, height)

            desktop = QApplication.desktop()
            desktopWidth = desktop.width()
            desktopHeight = desktop.height()
            if posX + width > desktopWidth: posX = desktopWidth - width
            if posY + height > desktopWidth: posY = desktopHeight - height
            if posX < 0: posX = 0
            if posY < 0: posY = 0

            Window_global.mainGui.move(posX, posY)
        except:
            pass
Exemplo n.º 5
0
 def __init__(self):
     # GL units are ground units
     self.rotation = Rotation() # about focus point
     self.focus_in_ground = Vec3([0,0,0])
     # Human/real-space/user measures:
     self.window_size_in_pixels = [640.0, 480.0] # will be overwritten on first resize event
     # initialize sceen size to correct value
     # ratio of screen distance to screen height:
     # measured 2.7 for my home monitor
     # 2.5 for Cami's monitor
     # 5.0 for our TV
     # should not change dynamically, unless we do head tracking
     self.distance_to_screen_in_screen_heights = 2.5
     # self.distance_to_screen_in_screen_heights = 0.5 # exaggerated perspective for testing
     dt = QApplication.desktop()
     self.set_screen_size_in_pixels(dt.width(), dt.height())
     # Object/ground/gl-units measures:
     self.distance_to_focus = 25.0 # changes with zoom level
     # viewport parameters for side by side stereo
     self.viewport_xrelstart = 0.0
     self.viewport_yrelstart = 0.0
     self.viewport_relwidth = 1.0
     self.viewport_relheight = 1.0
     # big value for testing
     self.interocular_distance_in_meters = 0.062 # Probably close enough for anyone
     self.pixels_per_meter = 3724; # TODO - expose this
     self.interocular_distance_in_pixels = self.pixels_per_meter * self.interocular_distance_in_meters;
     self.eye_pos = 0.0 # -1.0 for left eye, +1.0 for right eye
     self.swap_eyes = False
Exemplo n.º 6
0
 def loadInfo( filePath = None ):
     
     if not filePath:
         filePath = Window_global.infoPath
     
     f = open( filePath, 'r')
     try:data = json.load( f )
     except: f.close(); return None
     f.close()
 
     if not data: return None
     
     try:
         posX = data[0]
         posY = data[1]
         width = data[2]
         height = data[3]
         
         Window_global.mainGui.resize( width, height )
         
         desktop = QApplication.desktop()
         desktopWidth = desktop.width()
         desktopHeight = desktop.height()
         if posX + width > desktopWidth: posX = desktopWidth - width
         if posY + height > desktopWidth: posY = desktopHeight - height
         if posX < 0 : posX = 0
         if posY < 0 : posY = 0
         
         Window_global.mainGui.move( posX, posY )
     except:
         pass
Exemplo n.º 7
0
    def loadUIInfo(self):

        Commands.makeFile(Window.uiInfoPath)
        f = open(Window.uiInfoPath, 'r')
        try:
            data = json.load(f)
        except:
            data = {}
        f.close()
        if not data.items():
            self.resize(self.defaultWidth, self.defaultHeight)
            return
        try:
            posX, posY = data['mainWindow']['position']
            width, height = data['mainWindow']['size']
        except:
            return
        desktop = QApplication.desktop()
        desktopWidth = desktop.width()
        desktopHeight = desktop.height()

        if posX + width > desktopWidth: posX = desktopWidth - width
        if posY + height > desktopWidth: posY = desktopHeight - height
        if posX < 0: posX = 0

        self.move(posX, posY)
        self.resize(width, height)
Exemplo n.º 8
0
    def showEvent(self, event):
        # Center the dialog on the screen

        super(LoginDialog, self).showEvent(event)

        scr = QApplication.desktop().screenGeometry()
        self.move(scr.center() - self.rect().center())
Exemplo n.º 9
0
    def __init__(self):
        super(DirectoryDialog, self).__init__()

        self.setWindowTitle("Query")
        rect = QApplication.desktop().screenGeometry()
        height = rect.height()
        width = rect.width()
        self.setGeometry(width / 3, height / 3, width / 3, height / 8)

        formLayout = QFormLayout()

        self.dir = QLineEdit()
        self.dir.setReadOnly(True)
        formLayout.addRow(QLabel("Select a folder"), self.dir)
        browseBtn = QPushButton("Browse")
        browseBtn.clicked.connect(self.browseAction)

        formLayout.addWidget(browseBtn)

        btnOk = QPushButton("Ok")
        btnOk.clicked.connect(self.okAction)

        btnCancel = QPushButton("Cancel")
        btnCancel.clicked.connect(self.reject)

        group = QDialogButtonBox()
        group.addButton(btnOk, QDialogButtonBox.AcceptRole)
        group.addButton(btnCancel, QDialogButtonBox.RejectRole)
        formLayout.addRow(group)

        self.setLayout(formLayout)
        self.setWindowIcon(QIcon("res/SplashScreen.png"))
        self.__result = None
Exemplo n.º 10
0
    def screen_size(self):
        """ Returns a tuple of the form (width,height) containing the size of
            the user's display.
        """
        _geom = QApplication.desktop().availableGeometry()

        return (_geom.width(), _geom.height())
Exemplo n.º 11
0
 def loadInfo( self ):
     
     filePath = Window.shapeInfoPath
     
     f = open( filePath, 'r')
     try:data = json.load( f )
     except: f.close(); return None
     f.close()
     if not data: return None
     try:
         posX = data[0]
         posY = data[1]
         width = data[2]
         height = data[3]
         
         desktop = QApplication.desktop()
         desktopWidth = desktop.width()
         desktopHeight = desktop.height()
         if posX + width > desktopWidth: posX = desktopWidth - width
         if posY + height > desktopWidth: posY = desktopHeight - height
         if posX < 0 : posX = 0
         if posY < 0 : posY = 0
         
         self.move( posX, posY )
         self.resize( width, height )
     except:
         self.resize( Window.defaultWidth, Window.defaultHeight )
Exemplo n.º 12
0
    def loadInfo(filePath=None):

        if not filePath:
            filePath = Window_global.infoPath

        f = open(filePath, 'r')
        try:
            data = json.load(f)
        except:
            f.close()
            return None
        f.close()

        if not data: return None

        try:
            posX = data[0]
            posY = data[1]
            width = data[2]
            height = data[3]

            Window_global.mainGui.resize(width, height)

            desktop = QApplication.desktop()
            desktopWidth = desktop.width()
            desktopHeight = desktop.height()
            if posX + width > desktopWidth: posX = desktopWidth - width
            if posY + height > desktopWidth: posY = desktopHeight - height
            if posX < 0: posX = 0
            if posY < 0: posY = 0

            Window_global.mainGui.move(posX, posY)

            children = data[4]

            for child in children:
                tabText = child["tabText"]
                imagePath = child['imagePath']
                x, y, scale, rotValue, scaleMultX = child['imagePosition']

                Window_global.mainGui.tabWidget.addTab(tabText)
                widgets = Window_global.mainGui.tabWidget.widget(
                    children.index(child)).children()
                for widget in widgets:
                    if widget.__class__ == FilePathLine:
                        widget.setText(imagePath)
                    elif widget.__class__ == ImageBase:
                        widget.loadImage(imagePath)
                        widget.transInfo.x = x
                        widget.transInfo.y = y
                        widget.transInfo.scale = scale
                        widget.transInfo.rotValue = rotValue
                        widget.transInfo.scaleMultX = scaleMultX
                        widget.resize()

            cuIndex = data[5]
            Window_global.mainGui.tabWidget.setCurrentIndex(cuIndex)
        except:
            pass
Exemplo n.º 13
0
 def _showMainWindw(self):
     """Show main window near-by to the system tray icon"""
     logging.debug('Main window is shown')
     self.setVisible(True)
     trayIconGeometry = self.__trayIcon.geometry()
     screenGeometry = QApplication.desktop().screenGeometry(trayIconGeometry.topLeft())
     self.move(_calculateWindowPosition(screenGeometry, trayIconGeometry, self.width(),
                                        self.height()))
Exemplo n.º 14
0
def shoot():
    if( not isTokenCollected()):
        redirect_to_permission_page()

    #taking the screenshot
    filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
    p = QPixmap.grabWindow(QApplication.desktop().winId())
    p.save(filename, 'jpg')
    upload_file_to_drive(filename)
Exemplo n.º 15
0
def shoot():
    if (not isTokenCollected()):
        redirect_to_permission_page()

    #taking the screenshot
    filename = date.strftime('%Y-%m-%d_%H-%M-%S.jpg')
    p = QPixmap.grabWindow(QApplication.desktop().winId())
    p.save(filename, 'jpg')
    upload_file_to_drive(filename)
Exemplo n.º 16
0
	def sendLocation(self, jid, latitude, longitude, rotate):
		latitude = latitude[:10]
		longitude = longitude[:10]

		self._d("Capturing preview...")
		QPixmap.grabWindow(QApplication.desktop().winId()).save(WAConstants.CACHE_PATH+"/tempimg.png", "PNG")
		img = QImage(WAConstants.CACHE_PATH+"/tempimg.png")

		if rotate == "true":
			rot = QTransform()
			rot = rot.rotate(90)
			img = img.transformed(rot)

		if img.height() > img.width():
			result = img.scaledToWidth(320,Qt.SmoothTransformation);
			result = result.copy(result.width()/2-50,result.height()/2-50,100,100);
		elif img.height() < img.width():
			result = img.scaledToHeight(320,Qt.SmoothTransformation);
			result = result.copy(result.width()/2-50,result.height()/2-50,100,100);
		#result = img.scaled(96, 96, Qt.KeepAspectRatioByExpanding, Qt.SmoothTransformation);

		result.save( WAConstants.CACHE_PATH+"/tempimg2.jpg", "JPG" );

		f = open(WAConstants.CACHE_PATH+"/tempimg2.jpg", 'r')
		stream = base64.b64encode(f.read())
		f.close()


		os.remove(WAConstants.CACHE_PATH+"/tempimg.png")
		os.remove(WAConstants.CACHE_PATH+"/tempimg2.jpg")

		fmsg = WAXMPP.message_store.createMessage(jid);
		
		mediaItem = WAXMPP.message_store.store.Media.create()
		mediaItem.mediatype_id = WAConstants.MEDIA_TYPE_LOCATION
		mediaItem.remote_url = None
		mediaItem.preview = stream
		mediaItem.local_path ="%s,%s"%(latitude,longitude)
		mediaItem.transfer_status = 2

		fmsg.content = QtCore.QCoreApplication.translate("WAEventHandler", "Location")
		fmsg.Media = mediaItem

		if fmsg.Conversation.type == "group":
			contact = WAXMPP.message_store.store.Contact.getOrCreateContactByJid(self.conn.jid)
			fmsg.setContact(contact);
		
		fmsg.setData({"status":0,"content":fmsg.content,"type":1})
		WAXMPP.message_store.pushMessage(jid,fmsg)
		
		
		resultId = self.interfaceHandler.call("message_locationSend", (jid, latitude, longitude, stream))
		k = Key(jid, True, resultId)
		fmsg.key = k.toString()
		fmsg.save()
Exemplo n.º 17
0
    def mouseReleaseEvent(self, event):
        self.rubberBand.hide()
        if self.havePressed == True:
            self.end = event.pos()
            self.hide()

            QPixmap.grabWindow(QApplication.desktop().winId(), self.origin.x(),
                               self.origin.y(),
                               self.end.x() - self.origin.x(),
                               self.end.y() - self.origin.y()).save(
                                   'C:/Users/Ta/screenshot_windowed.png',
                                   'png')
Exemplo n.º 18
0
	def grabImg(self):
		self.idFrame += 1	
		wid = QApplication.desktop().winId()
		QPixmap.grabWindow(wid, self.screenArea.x, self.screenArea.y, self.screenArea.w, self.screenArea.h).save(self.buffer, 'png')
		strio = StringIO.StringIO()
		strio.write(self.buffer.data())
		self.buffer.seek(0)
		strio.seek(0)
		pix = np.array(Image.open(strio))
		pix = cv2.resize(pix, (0,0), fx=self.scale, fy=self.scale)
		real_color = cv2.cvtColor(pix, cv2.COLOR_BGR2RGB)
		return real_color
Exemplo n.º 19
0
 def getAppLabel(self):
     '''
     Gets label to be displayed in widget
     '''
     appTitle = QLabel(CUSTOMER_NAME)
     appTitle.setAlignment(Qt.AlignCenter)
     appTitle.setFixedHeight(
         QApplication.desktop().screenGeometry().height() / 20)
     appTitle.setStyleSheet(
         "border-style:ridge;border: 2px solid red; border-radius: 3px;"
         "background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, stop: 0 #7EC0EE, stop: 1 #7EC0EE);"
         "min-width: 40px;color: red;font-size: 54px; font-style=bold italic large 'New Century Schoolbook'"
     )
     return appTitle
Exemplo n.º 20
0
    def __init__(self):
        QWidget.__init__(self,None,Qt.Window)
        self.layout = QGridLayout()
        self.setLayout(self.layout)

        self.showMaximized()
        self.activateWindow()
        self.raise_()
        self.setWindowFlags(Qt.Window | Qt.WindowStaysOnTopHint  | Qt.X11BypassWindowManagerHint \
                            | Qt.FramelessWindowHint )
        
        screenGeometry = QApplication.desktop().availableGeometry();
        self.setGeometry(screenGeometry)
        self.setStyleSheet("QWidget { background-color: rgba(255,255,255, 5%); }")
Exemplo n.º 21
0
def get_display_size():
    size = namedtuple('Size', 'width height')
    # if IsQt():
#        from PySide.QtGui import QDesktopWidget
    from PySide.QtGui import QApplication
    desktop = QApplication.desktop()
    rect = desktop.screenGeometry()
    w, h = rect.width(), rect.height()
#     else:
#         import wx
#         rect = wx.GetDisplaySize()
#         w, h = rect.width, rect.height
#
    return size(w, h)
Exemplo n.º 22
0
def get_display_size():
    size = namedtuple('Size', 'width height')
    # if IsQt():
    #        from PySide.QtGui import QDesktopWidget
    from PySide.QtGui import QApplication
    desktop = QApplication.desktop()
    rect = desktop.screenGeometry()
    w, h = rect.width(), rect.height()
    #     else:
    #         import wx
    #         rect = wx.GetDisplaySize()
    #         w, h = rect.width, rect.height
    #
    return size(w, h)
Exemplo n.º 23
0
 def grabImg(self):
     self.idFrame += 1
     wid = QApplication.desktop().winId()
     QPixmap.grabWindow(wid, self.screenArea.x, self.screenArea.y,
                        self.screenArea.w,
                        self.screenArea.h).save(self.buffer, 'png')
     strio = StringIO.StringIO()
     strio.write(self.buffer.data())
     self.buffer.seek(0)
     strio.seek(0)
     pix = np.array(Image.open(strio))
     pix = cv2.resize(pix, (0, 0), fx=self.scale, fy=self.scale)
     real_color = cv2.cvtColor(pix, cv2.COLOR_BGR2RGB)
     return real_color
Exemplo n.º 24
0
def init():
    logging.debug('PySide ver: %s  (lib path: %s)', PySide.__version__,
                  QLibraryInfo.location(QLibraryInfo.LibrariesPath))
    app = QApplication(sys.argv)
    app.setWindowIcon(makeQIcon(':/appicon-24.png', ':/appicon-48.png'))

    global scaleRatio
    scaleRatio = app.desktop().logicalDpiX() / 96  # when will x != y happen?
    logging.debug('DPI scale ratio %s' % scaleRatio)

    setTranslationLocale()
    global font
    font = Fonts()
    font.load()

    setStyleSheet()
    return app
Exemplo n.º 25
0
 def read_settings(self):
     settings = get_settings()
     screen = QApplication.desktop().screenGeometry()
     h = min(screen.height() * 5 / 6., 900)
     size = QSize(min(screen.width() * 5 / 6., 1200), h)
     pos = settings.value("pos", None)
     savesize = settings.value("size", size)
     if savesize.width() > screen.width():
         savesize.setWidth(size.width())
     if savesize.height() > screen.height():
         savesize.setHeight(size.height())
     self.resize(savesize)
     if ((pos is None or pos.x() + savesize.width() > screen.width() or
          pos.y() + savesize.height() > screen.height())):
         self.move(screen.center() - self.rect().center())
     else:
         self.move(pos)
Exemplo n.º 26
0
 def drag(self, x, y ):
     if self.dragMode == 0: return None
     
     if self.dragMode == 1:
         import math
         addRotValue = (x - self.pressX )/3.0
         self.rotValue = self.bRotValue + addRotValue
         
         if self.shiftPressed:
             elseValue = self.rotValue % 90
             if math.fabs( elseValue ) < 5:
                 self.rotValue -= elseValue
                 addRotValue -= elseValue
             elif math.fabs( elseValue ) > 85:
                 self.rotValue = self.rotValue + 90 - elseValue
                 addRotValue = addRotValue + 90 - elseValue
         
         radValue = math.radians( addRotValue )
         
         sinValue = math.sin( radValue )
         cosValue = math.cos( radValue )
         
         movedX = self.bx * cosValue - self.by * sinValue
         movedY = self.bx * sinValue + self.by * cosValue
         
         self.x = movedX
         self.y = movedY
         
         
     elif self.dragMode == 4:
         moveX = x - self.pressX
         moveY = y - self.pressY
         self.x = moveX + self.bx
         self.y = moveY + self.by
     
     elif self.dragMode == 2:
         moveX = x - self.pressX
         rect = QApplication.desktop().screenGeometry();
         height = rect.height()/4
         self.scale = self.bScale * (2**(float(moveX)/height))
         scaledValue = self.scale/  self.bScale
         
         self.x = (self.bx - self.pressX) * scaledValue + self.pressX
         self.y = (self.by - self.pressY) * scaledValue + self.pressY
Exemplo n.º 27
0
 def drag(self, x, y ):
     if self.dragMode == 0: return None
     
     if self.dragMode == 1:
         import math
         addRotValue = (x - self.pressX )/3.0
         self.rotValue = self.bRotValue + addRotValue
         
         if self.shiftPressed:
             elseValue = self.rotValue % 90
             if math.fabs( elseValue ) < 5:
                 self.rotValue -= elseValue
                 addRotValue -= elseValue
             elif math.fabs( elseValue ) > 85:
                 self.rotValue = self.rotValue + 90 - elseValue
                 addRotValue = addRotValue + 90 - elseValue
         
         radValue = math.radians( addRotValue )
         
         sinValue = math.sin( radValue )
         cosValue = math.cos( radValue )
         
         movedX = self.bx * cosValue - self.by * sinValue
         movedY = self.bx * sinValue + self.by * cosValue
         
         self.x = movedX
         self.y = movedY
         
         
     elif self.dragMode == 4:
         moveX = x - self.pressX
         moveY = y - self.pressY
         self.x = moveX + self.bx
         self.y = moveY + self.by
     
     elif self.dragMode == 2:
         moveX = x - self.pressX
         rect = QApplication.desktop().screenGeometry();
         height = rect.height()/4
         self.scale = self.bScale * (2**(float(moveX)/height))
         scaledValue = self.scale/  self.bScale
         
         self.x = (self.bx - self.pressX) * scaledValue + self.pressX
         self.y = (self.by - self.pressY) * scaledValue + self.pressY
Exemplo n.º 28
0
    def capture(self):
        app.processEvents()

        print "caught capture",('tmp_{}_{:'+self.fmt+'}.jpg').format(self.UID,self.capture_count)
        print "current fps",float(self.capture_count)/(time.time()-self.start_capture_time)
        if not self.snap_shots.queue.empty():
            self.snap_shots.queue.get(0)
            arrow = QPixmap(self.arrow_icon);
            self.px = QPixmap.grabWindow(QApplication.desktop().winId())
            painter = QPainter(self.px)
            painter.drawPixmap(QCursor.pos(), arrow)
            if(self.options.capture_area_sa.isChecked()):
                self.px2 = self.px.copy(self.options.sa_x.value(),
                                        self.options.sa_y.value(),
                                        self.options.sa_w.value(),
                                        self.options.sa_h.value())
            else:
                self.px2 = self.px
            self.px2.save(('tmp_{}_{:'+self.fmt+'}.jpg').format(self.UID,self.capture_count), 'jpg')
            self.capture_count+=1
Exemplo n.º 29
0
 def __init__(self, kind, module, parent=None):
     super(DefaultsDialog, self).__init__()
     self.clipboard = parent.clipboard
     self.setWindowTitle("%s : %s" % (kind, module))
     self.setGeometry(0, 0, 500, 500)
     self.move(
         QApplication.desktop().screenGeometry().center() - self.rect().center())
     self.show()
     # Main layout
     self.layout = QVBoxLayout()
     self.setLayout(self.layout)
     self.display_tabs = QTabWidget()
     self.display = {}
     for k in ["yaml", "python", "bibliography"]:
         self.display[k] = QTextEdit()
         self.display[k].setLineWrapMode(QTextEdit.NoWrap)
         self.display[k].setFontFamily("mono")
         self.display[k].setCursorWidth(0)
         self.display[k].setReadOnly(True)
         self.display_tabs.addTab(self.display[k], k)
     self.layout.addWidget(self.display_tabs)
     # Fill text
     defaults_txt = get_default_info(
         module, kind, return_yaml=True, fail_if_not_found=True)
     from cobaya.yaml import yaml_load
     self.display["python"].setText(
         "from collections import OrderedDict\n\ninfo = " +
         pformat(yaml_load(defaults_txt)))
     self.display["yaml"].setText(defaults_txt)
     self.display["bibliography"].setText(get_bib_module(module, kind))
     # Buttons
     self.buttons = QHBoxLayout()
     self.close_button = QPushButton('Close', self)
     self.copy_button = QPushButton('Copy to clipboard', self)
     self.buttons.addWidget(self.close_button)
     self.buttons.addWidget(self.copy_button)
     self.close_button.released.connect(self.close)
     self.copy_button.released.connect(self.copy_clipb)
     self.layout.addLayout(self.buttons)
Exemplo n.º 30
0
 def loadUIInfo( self ):
     
     try:
         BaseCommands.makeFile( Window.uiInfoPath )
         f = open( Window.uiInfoPath, 'r' )
         data = json.load( f )
         f.close()
         
         posX, posY    = data['position']
         width, height = data['size']
         
         desktop = QApplication.desktop()
         desktopWidth  = desktop.width()
         desktopHeight = desktop.height()
         
         if posX + width > desktopWidth:  posX = desktopWidth - width
         if posY + height > desktopWidth: posY = desktopHeight - height
         if posX < 0 : posX = 0
         
         self.move( posX, posY )
         self.resize( width, height )
     except:
         self.resize( self.defaultWidth, self.defaultHeight )
Exemplo n.º 31
0
 def _centerWindow(self):
     displayWidth = QApplication.desktop().width()
     displayHeight = QApplication.desktop().height()
     
     self.move(displayWidth/2.0 - self._initWidth/2.0, 
               displayHeight/2.0 - self._initHeight/2.0 - 50)        
Exemplo n.º 32
0
Arquivo: python.py Projeto: wiz21b/koi
 def screenshot_callback():
     screenshot = QPixmap.grabWidget(window)
     screenshot = QPixmap.grabWindow(QApplication.desktop().winId())
     screenshot.save("screenshot-main.png")
Exemplo n.º 33
0
Arquivo: python.py Projeto: wiz21b/koi
    def screenshot_callback3():
        window.show_presence_overview()

        screenshot = QPixmap.grabWidget(window)
        screenshot = QPixmap.grabWindow(QApplication.desktop().winId())
        screenshot.save("screenshot-presence.png")
Exemplo n.º 34
0
class qtPodder(QObject):
    def __init__(self, args, gpodder_core, dbus_bus_name):
        QObject.__init__(self)

        self.dbus_bus_name = dbus_bus_name
        # TODO: Expose the same D-Bus API as the Gtk UI D-Bus object (/gui)
        # TODO: Create a gpodder.dbusproxy.DBusPodcastsProxy object (/podcasts)

        self.app = QApplication(args)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.quit.connect(self.on_quit)
        self.episodeUpdated.connect(self.on_episode_updated)
        self.setEpisodeListModel.connect(self.on_set_episode_list_model)

        self.core = gpodder_core
        self.config = self.core.config
        self.db = self.core.db
        self.model = self.core.model

        self.config_proxy = ConfigProxy(self.config)

        # Initialize the gpodder.net client
        self.mygpo_client = my.MygPoClient(self.config)

        gpodder.user_extensions.on_ui_initialized(self.model,
                self.extensions_podcast_update_cb,
                self.extensions_episode_download_cb)

        self.view = DeclarativeView()
        self.view.closing.connect(self.on_quit)
        self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView)

        self.controller = Controller(self)
        self.media_buttons_handler = helper.MediaButtonsHandler()
        self.tracker_miner_config = helper.TrackerMinerConfig()
        self.podcast_model = gPodderPodcastListModel()
        self.episode_model = gPodderEpisodeListModel(self.config, self)
        self.last_episode = None

        # A dictionary of episodes that are currently active
        # in some way (i.e. playing back or downloading)
        self.active_episode_wrappers = {}

        engine = self.view.engine()

        # Add the cover art image provider
        self.cover_provider = images.LocalCachedImageProvider()
        engine.addImageProvider('cover', self.cover_provider)

        root_context = self.view.rootContext()
        root_context.setContextProperty('controller', self.controller)
        root_context.setContextProperty('configProxy', self.config_proxy)
        root_context.setContextProperty('mediaButtonsHandler',
                self.media_buttons_handler)
        root_context.setContextProperty('trackerMinerConfig',
                self.tracker_miner_config)

        # Load the QML UI (this could take a while...)
        self.view.setSource(QUrl.fromLocalFile(QML('main_default.qml')))

        # Proxy to the "main" QML object for direct access to Qt Properties
        self.main = helper.QObjectProxy(self.view.rootObject().property('main'))

        self.main.podcastModel = self.podcast_model
        self.main.episodeModel = self.episode_model

        self.view.setWindowTitle('gPodder')

        if gpodder.ui.harmattan:
            self.view.showFullScreen()
        else:
            # On the Desktop, scale to fit my small laptop screen..
            desktop = self.app.desktop()
            if desktop.height() < 1000:
                FACTOR = .8
                self.view.scale(FACTOR, FACTOR)
                size = self.view.size()
                size *= FACTOR
                self.view.resize(size)
            self.view.show()

        self.do_start_progress.connect(self.on_start_progress)
        self.do_end_progress.connect(self.on_end_progress)
        self.do_show_message.connect(self.on_show_message)

        podcasts = self.load_podcasts()

        self.resumable_episodes = None
        self.do_offer_download_resume.connect(self.on_offer_download_resume)
        util.run_in_background(self.find_partial_downloads(podcasts))

    def find_partial_downloads(self, podcasts):
        def start_progress_callback(count):
            self.start_progress(_('Loading incomplete downloads'))

        def progress_callback(title, progress):
            self.start_progress('%s (%d%%)' % (
                _('Loading incomplete downloads'),
                progress*100))

        def finish_progress_callback(resumable_episodes):
            self.end_progress()
            self.resumable_episodes = resumable_episodes
            self.do_offer_download_resume.emit()

        common.find_partial_downloads(podcasts,
                start_progress_callback,
                progress_callback,
                finish_progress_callback)

    do_offer_download_resume = Signal()

    def on_offer_download_resume(self):
        if self.resumable_episodes:
            def download_episodes():
                for episode in self.resumable_episodes:
                    qepisode = self.wrap_simple_episode(episode)
                    self.controller.downloadEpisode(qepisode)

            def delete_episodes():
                logger.debug('Deleting incomplete downloads.')
                common.clean_up_downloads(delete_partial=True)

            message = _('Incomplete downloads from a previous session were found.')
            title = _('Resume')

            self.controller.confirm_action(message, title, download_episodes, delete_episodes)

    def add_active_episode(self, episode):
        self.active_episode_wrappers[episode.id] = episode
        episode.episode_wrapper_refcount += 1

    def remove_active_episode(self, episode):
        episode.episode_wrapper_refcount -= 1
        if episode.episode_wrapper_refcount == 0:
            del self.active_episode_wrappers[episode.id]

    def load_last_episode(self):
        last_episode = None
        last_podcast = None
        for podcast in self.podcast_model.get_podcasts():
            for episode in podcast.get_all_episodes():
                if not episode.last_playback:
                    continue
                if last_episode is None or \
                        episode.last_playback > last_episode.last_playback:
                    last_episode = episode
                    last_podcast = podcast

        if last_episode is not None:
            self.last_episode = self.wrap_episode(last_podcast, last_episode)
            # FIXME: Send last episode to player
            #self.select_episode(self.last_episode)

    def on_episode_deleted(self, episode):
        # Remove episode from play queue (if it's in there)
        self.main.removeQueuedEpisode(episode)

        # If the episode that has been deleted is currently
        # being played back (or paused), stop playback now.
        if self.main.currentEpisode == episode:
            self.main.togglePlayback(None)

    def enqueue_episode(self, episode):
        self.main.enqueueEpisode(episode)

    def run(self):
        return self.app.exec_()

    quit = Signal()

    def on_quit(self):
        # Make sure the audio playback is stopped immediately
        self.main.togglePlayback(None)
        self.save_pending_data()
        self.view.hide()
        self.core.shutdown()
        self.app.quit()

    episodeUpdated = Signal(int)

    def on_episode_updated(self, episode_id):
        self.main.episodeUpdated(episode_id)

    setEpisodeListModel = Signal(object)

    def on_set_episode_list_model(self, prepared):
        self.main.setEpisodeListModel(prepared)

    do_show_message = Signal(unicode)

    @Slot(unicode)
    def on_show_message(self, message):
        self.main.showMessage(message)

    def show_message(self, message):
        self.do_show_message.emit(message)

    def show_input_dialog(self, message, value='', accept=_('OK'),
            reject=_('Cancel'), is_text=True):
        self.main.showInputDialog(message, value, accept, reject, is_text)

    def open_context_menu(self, items):
        self.main.openContextMenu(items)

    do_start_progress = Signal(str)

    @Slot(str)
    def on_start_progress(self, text):
        self.main.startProgress(text)

    def start_progress(self, text=_('Please wait...')):
        self.do_start_progress.emit(text)

    do_end_progress = Signal()

    @Slot()
    def on_end_progress(self):
        self.main.endProgress()

    def end_progress(self):
        self.do_end_progress.emit()

    def resort_podcast_list(self):
        self.podcast_model.sort()

    def insert_podcast(self, podcast):
        self.podcast_model.insert_object(podcast)
        self.mygpo_client.on_subscribe([podcast.url])
        self.mygpo_client.flush()

    def remove_podcast(self, podcast):
        # Remove queued episodes for this specific podcast
        self.main.removeQueuedEpisodesForPodcast(podcast)

        if self.main.currentEpisode is not None:
            # If the currently-playing episode is in the podcast
            # that is to be deleted, stop playback immediately.
            if self.main.currentEpisode.qpodcast == podcast:
                self.main.togglePlayback(None)
        self.podcast_model.remove_object(podcast)
        self.mygpo_client.on_unsubscribe([podcast.url])
        self.mygpo_client.flush()

    def load_podcasts(self):
        podcasts = map(model.QPodcast, self.model.get_podcasts())
        self.podcast_model.set_podcasts(self.db, podcasts)
        return podcasts

    def wrap_episode(self, podcast, episode):
        try:
            return self.active_episode_wrappers[episode.id]
        except KeyError:
            return model.QEpisode(self, podcast, episode)

    def wrap_simple_episode(self, episode):
        for podcast in self.podcast_model.get_podcasts():
            if podcast.id == episode.podcast_id:
                return self.wrap_episode(podcast, episode)

        return None

    def select_podcast(self, podcast):
        if isinstance(podcast, model.QPodcast):
            # Normal QPodcast instance
            wrap = functools.partial(self.wrap_episode, podcast)
            objects = podcast.get_all_episodes()
            self.episode_model.set_is_subset_view(False)
        else:
            # EpisodeSubsetView
            wrap = lambda args: self.wrap_episode(*args)
            objects = podcast.get_all_episodes_with_podcast()
            self.episode_model.set_is_subset_view(True)

        self.episode_model.set_objects(map(wrap, objects))
        self.main.state = 'episodes'

    def save_pending_data(self):
        current_ep = self.main.currentEpisode
        if isinstance(current_ep, model.QEpisode):
            current_ep.save()

    def podcast_to_qpodcast(self, podcast):
        podcasts = filter(lambda p: p._podcast == podcast,
                          self.podcast_model.get_podcasts())
        assert len(podcasts) <= 1
        if podcasts:
            return podcasts[0]
        return None

    def extensions_podcast_update_cb(self, podcast):
        logger.debug('extensions_podcast_update_cb(%s)', podcast)
        try:
            qpodcast = self.podcast_to_qpodcast(podcast)
            if qpodcast is not None and not qpodcast.pause_subscription:
                qpodcast.qupdate(
                    finished_callback=self.controller.update_subset_stats)
        except Exception, e:
            logger.exception('extensions_podcast_update_cb(%s): %s', podcast, e)
Exemplo n.º 35
0
#refactor 		
def _quit():
	app.quit()
	qDebug('bye!')
	
def show_window(thereason):
	if thereason == QSystemTrayIcon.ActivationReason.Trigger:
		if main_window.isVisible() == True:
			main_window.hide()
		main_window.show()

#create the QApplication instance before any other widget
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)	

ico = QIcon(os.path.join(os.getcwd(),'yhn.png'))
systrayico = QSystemTrayIcon(ico)
systrayico.activated.connect(show_window)
systrayico.show()

x_pos = systrayico.geometry().left()
y_pos = app.desktop().availableGeometry(app.desktop().primaryScreen()).topLeft().y()

main_window = MainWindow(x_pos, y_pos, 420, 500)

sys.exit(app.exec_())



	
Exemplo n.º 36
0
class qtPodder(QObject):
    def __init__(self, args, gpodder_core, dbus_bus_name):
        QObject.__init__(self)

        self.dbus_bus_name = dbus_bus_name
        # TODO: Expose the same D-Bus API as the Gtk UI D-Bus object (/gui)
        # TODO: Create a gpodder.dbusproxy.DBusPodcastsProxy object (/podcasts)

        self.app = QApplication(args)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.quit.connect(self.on_quit)
        self.episodeUpdated.connect(self.on_episode_updated)
        self.setEpisodeListModel.connect(self.on_set_episode_list_model)

        self.core = gpodder_core
        self.config = self.core.config
        self.db = self.core.db
        self.model = self.core.model

        self.config_proxy = ConfigProxy(self.config)

        # Initialize the gpodder.net client
        self.mygpo_client = my.MygPoClient(self.config)

        gpodder.user_extensions.on_ui_initialized(
            self.model, self.extensions_podcast_update_cb,
            self.extensions_episode_download_cb)

        self.view = DeclarativeView()
        self.view.closing.connect(self.on_quit)
        self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView)

        self.controller = Controller(self)
        self.media_buttons_handler = helper.MediaButtonsHandler()
        self.tracker_miner_config = helper.TrackerMinerConfig()
        self.podcast_model = gPodderPodcastListModel()
        self.episode_model = gPodderEpisodeListModel(self.config, self)
        self.last_episode = None

        # A dictionary of episodes that are currently active
        # in some way (i.e. playing back or downloading)
        self.active_episode_wrappers = {}

        engine = self.view.engine()

        # Add the cover art image provider
        self.cover_provider = images.LocalCachedImageProvider()
        engine.addImageProvider('cover', self.cover_provider)

        root_context = self.view.rootContext()
        root_context.setContextProperty('controller', self.controller)
        root_context.setContextProperty('configProxy', self.config_proxy)
        root_context.setContextProperty('mediaButtonsHandler',
                                        self.media_buttons_handler)
        root_context.setContextProperty('trackerMinerConfig',
                                        self.tracker_miner_config)

        # Load the QML UI (this could take a while...)
        self.view.setSource(QUrl.fromLocalFile(QML('main_default.qml')))

        # Proxy to the "main" QML object for direct access to Qt Properties
        self.main = helper.QObjectProxy(
            self.view.rootObject().property('main'))

        self.main.podcastModel = self.podcast_model
        self.main.episodeModel = self.episode_model

        self.view.setWindowTitle('gPodder')

        if gpodder.ui.harmattan:
            self.view.showFullScreen()
        else:
            # On the Desktop, scale to fit my small laptop screen..
            desktop = self.app.desktop()
            if desktop.height() < 1000:
                FACTOR = .8
                self.view.scale(FACTOR, FACTOR)
                size = self.view.size()
                size *= FACTOR
                self.view.resize(size)
            self.view.show()

        self.do_start_progress.connect(self.on_start_progress)
        self.do_end_progress.connect(self.on_end_progress)
        self.do_show_message.connect(self.on_show_message)

        podcasts = self.load_podcasts()

        self.resumable_episodes = None
        self.do_offer_download_resume.connect(self.on_offer_download_resume)
        util.run_in_background(self.find_partial_downloads(podcasts))

    def find_partial_downloads(self, podcasts):
        def start_progress_callback(count):
            self.start_progress(_('Loading incomplete downloads'))

        def progress_callback(title, progress):
            self.start_progress(
                '%s (%d%%)' %
                (_('Loading incomplete downloads'), progress * 100))

        def finish_progress_callback(resumable_episodes):
            self.end_progress()
            self.resumable_episodes = resumable_episodes
            self.do_offer_download_resume.emit()

        common.find_partial_downloads(podcasts, start_progress_callback,
                                      progress_callback,
                                      finish_progress_callback)

    do_offer_download_resume = Signal()

    def on_offer_download_resume(self):
        if self.resumable_episodes:

            def download_episodes():
                for episode in self.resumable_episodes:
                    qepisode = self.wrap_simple_episode(episode)
                    self.controller.downloadEpisode(qepisode)

            def delete_episodes():
                logger.debug('Deleting incomplete downloads.')
                common.clean_up_downloads(delete_partial=True)

            message = _(
                'Incomplete downloads from a previous session were found.')
            title = _('Resume')

            self.controller.confirm_action(message, title, download_episodes,
                                           delete_episodes)

    def add_active_episode(self, episode):
        self.active_episode_wrappers[episode.id] = episode
        episode.episode_wrapper_refcount += 1

    def remove_active_episode(self, episode):
        episode.episode_wrapper_refcount -= 1
        if episode.episode_wrapper_refcount == 0:
            del self.active_episode_wrappers[episode.id]

    def load_last_episode(self):
        last_episode = None
        last_podcast = None
        for podcast in self.podcast_model.get_podcasts():
            for episode in podcast.get_all_episodes():
                if not episode.last_playback:
                    continue
                if last_episode is None or \
                        episode.last_playback > last_episode.last_playback:
                    last_episode = episode
                    last_podcast = podcast

        if last_episode is not None:
            self.last_episode = self.wrap_episode(last_podcast, last_episode)
            # FIXME: Send last episode to player
            #self.select_episode(self.last_episode)

    def on_episode_deleted(self, episode):
        # Remove episode from play queue (if it's in there)
        self.main.removeQueuedEpisode(episode)

        # If the episode that has been deleted is currently
        # being played back (or paused), stop playback now.
        if self.main.currentEpisode == episode:
            self.main.togglePlayback(None)

    def enqueue_episode(self, episode):
        self.main.enqueueEpisode(episode)

    def run(self):
        return self.app.exec_()

    quit = Signal()

    def on_quit(self):
        # Make sure the audio playback is stopped immediately
        self.main.togglePlayback(None)
        self.save_pending_data()
        self.view.hide()
        self.core.shutdown()
        self.app.quit()

    episodeUpdated = Signal(int)

    def on_episode_updated(self, episode_id):
        self.main.episodeUpdated(episode_id)

    setEpisodeListModel = Signal(object)

    def on_set_episode_list_model(self, prepared):
        self.main.setEpisodeListModel(prepared)

    do_show_message = Signal(unicode)

    @Slot(unicode)
    def on_show_message(self, message):
        self.main.showMessage(message)

    def show_message(self, message):
        self.do_show_message.emit(message)

    def show_input_dialog(self,
                          message,
                          value='',
                          accept=_('OK'),
                          reject=_('Cancel'),
                          is_text=True):
        self.main.showInputDialog(message, value, accept, reject, is_text)

    def open_context_menu(self, items):
        self.main.openContextMenu(items)

    do_start_progress = Signal(str)

    @Slot(str)
    def on_start_progress(self, text):
        self.main.startProgress(text)

    def start_progress(self, text=_('Please wait...')):
        self.do_start_progress.emit(text)

    do_end_progress = Signal()

    @Slot()
    def on_end_progress(self):
        self.main.endProgress()

    def end_progress(self):
        self.do_end_progress.emit()

    def resort_podcast_list(self):
        self.podcast_model.sort()

    def insert_podcast(self, podcast):
        self.podcast_model.insert_object(podcast)
        self.mygpo_client.on_subscribe([podcast.url])
        self.mygpo_client.flush()

    def remove_podcast(self, podcast):
        # Remove queued episodes for this specific podcast
        self.main.removeQueuedEpisodesForPodcast(podcast)

        if self.main.currentEpisode is not None:
            # If the currently-playing episode is in the podcast
            # that is to be deleted, stop playback immediately.
            if self.main.currentEpisode.qpodcast == podcast:
                self.main.togglePlayback(None)
        self.podcast_model.remove_object(podcast)
        self.mygpo_client.on_unsubscribe([podcast.url])
        self.mygpo_client.flush()

    def load_podcasts(self):
        podcasts = map(model.QPodcast, self.model.get_podcasts())
        self.podcast_model.set_podcasts(self.db, podcasts)
        return podcasts

    def wrap_episode(self, podcast, episode):
        try:
            return self.active_episode_wrappers[episode.id]
        except KeyError:
            return model.QEpisode(self, podcast, episode)

    def wrap_simple_episode(self, episode):
        for podcast in self.podcast_model.get_podcasts():
            if podcast.id == episode.podcast_id:
                return self.wrap_episode(podcast, episode)

        return None

    def select_podcast(self, podcast):
        if isinstance(podcast, model.QPodcast):
            # Normal QPodcast instance
            wrap = functools.partial(self.wrap_episode, podcast)
            objects = podcast.get_all_episodes()
            self.episode_model.set_is_subset_view(False)
        else:
            # EpisodeSubsetView
            wrap = lambda args: self.wrap_episode(*args)
            objects = podcast.get_all_episodes_with_podcast()
            self.episode_model.set_is_subset_view(True)

        self.episode_model.set_objects(map(wrap, objects))
        self.main.state = 'episodes'

    def save_pending_data(self):
        current_ep = self.main.currentEpisode
        if isinstance(current_ep, model.QEpisode):
            current_ep.save()

    def podcast_to_qpodcast(self, podcast):
        podcasts = filter(lambda p: p._podcast == podcast,
                          self.podcast_model.get_podcasts())
        assert len(podcasts) <= 1
        if podcasts:
            return podcasts[0]
        return None

    def extensions_podcast_update_cb(self, podcast):
        logger.debug('extensions_podcast_update_cb(%s)', podcast)
        try:
            qpodcast = self.podcast_to_qpodcast(podcast)
            if qpodcast is not None and not qpodcast.pause_subscription:
                qpodcast.qupdate(
                    finished_callback=self.controller.update_subset_stats)
        except Exception, e:
            logger.exception('extensions_podcast_update_cb(%s): %s', podcast,
                             e)
Exemplo n.º 37
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.setWindowTitle("Cobaya input generator for Cosmology")
     self.setGeometry(0, 0, 1500, 1000)
     self.move(
         QApplication.desktop().screenGeometry().center() - self.rect().center())
     self.show()
     # Main layout
     self.layout = QHBoxLayout()
     self.setLayout(self.layout)
     self.layout_left = QVBoxLayout()
     self.layout.addLayout(self.layout_left)
     self.layout_output = QVBoxLayout()
     self.layout.addLayout(self.layout_output)
     # LEFT: Options
     self.options = QWidget()
     self.layout_options = QVBoxLayout()
     self.options.setLayout(self.layout_options)
     self.options_scroll = QScrollArea()
     self.options_scroll.setWidget(self.options)
     self.options_scroll.setWidgetResizable(True)
     self.layout_left.addWidget(self.options_scroll)
     titles = odict([
         ["Presets", odict([["preset", "Presets"]])],
         ["Cosmological Model", odict([
             ["theory", "Theory code"],
             ["primordial", "Primordial perturbations"],
             ["geometry", "Geometry"],
             ["hubble", "Hubble parameter constraint"],
             ["matter", "Matter sector"],
             ["neutrinos", "Neutrinos and other extra matter"],
             ["dark_energy", "Lambda / Dark energy"],
             ["bbn", "BBN"],
             ["reionization", "Reionization history"]])],
         ["Data sets", odict([
             ["like_cmb", "CMB experiments"],
             ["like_bao", "BAO experiments"],
             ["like_sn", "SN experiments"],
             ["like_H0", "Local H0 measurements"]])],
         ["Sampler", odict([["sampler", "Samplers"]])]])
     self.combos = odict()
     for group, fields in titles.items():
         group_box = QGroupBox(group)
         self.layout_options.addWidget(group_box)
         group_layout = QVBoxLayout(group_box)
         for a, desc in fields.items():
             self.combos[a] = QComboBox()
             if len(fields) > 1:
                 label = QLabel(desc)
                 group_layout.addWidget(label)
             group_layout.addWidget(self.combos[a])
             self.combos[a].addItems(
                 [text(k, v) for k, v in getattr(input_database, a).items()])
     # PLANCK NAMES CHECKBOX TEMPORARILY DISABLED
     #                if a == "theory":
     #                    # Add Planck-naming checkbox
     #                    self.planck_names = QCheckBox(
     #                        "Keep common parameter names "
     #                        "(useful for fast CLASS/CAMB switching)")
     #                    group_layout.addWidget(self.planck_names)
     # Connect to refreshers -- needs to be after adding all elements
     for field, combo in self.combos.items():
         if field == "preset":
             combo.currentIndexChanged.connect(self.refresh_preset)
         else:
             combo.currentIndexChanged.connect(self.refresh)
     #        self.planck_names.stateChanged.connect(self.refresh_keep_preset)
     # RIGHT: Output + buttons
     self.display_tabs = QTabWidget()
     self.display = {}
     for k in ["yaml", "python", "citations"]:
         self.display[k] = QTextEdit()
         self.display[k].setLineWrapMode(QTextEdit.NoWrap)
         self.display[k].setFontFamily("mono")
         self.display[k].setCursorWidth(0)
         self.display[k].setReadOnly(True)
         self.display_tabs.addTab(self.display[k], k)
     self.layout_output.addWidget(self.display_tabs)
     # Buttons
     self.buttons = QHBoxLayout()
     self.save_button = QPushButton('Save', self)
     self.copy_button = QPushButton('Copy to clipboard', self)
     self.buttons.addWidget(self.save_button)
     self.buttons.addWidget(self.copy_button)
     self.save_button.released.connect(self.save_file)
     self.copy_button.released.connect(self.copy_clipb)
     self.layout_output.addLayout(self.buttons)
     self.save_dialog = QFileDialog()
     self.save_dialog.setFileMode(QFileDialog.AnyFile)
     self.save_dialog.setAcceptMode(QFileDialog.AcceptSave)
Exemplo n.º 38
0
class qtPodder(QObject):
    def __init__(self, args, gpodder_core, dbus_bus_name):
        QObject.__init__(self)

        self.dbus_bus_name = dbus_bus_name
        # TODO: Expose the same D-Bus API as the Gtk UI D-Bus object (/gui)
        # TODO: Create a gpodder.dbusproxy.DBusPodcastsProxy object (/podcasts)

        # Enable OpenGL rendering without requiring QtOpenGL
        # On Harmattan we let the system choose the best graphicssystem
        if '-graphicssystem' not in args and not gpodder.ui.harmattan:
            if gpodder.ui.fremantle:
                args += ['-graphicssystem', 'opengl']
            elif not gpodder.win32:
                args += ['-graphicssystem', 'raster']

        self.app = QApplication(args)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.quit.connect(self.on_quit)

        self.core = gpodder_core
        self.config = self.core.config
        self.db = self.core.db
        self.model = self.core.model

        self.config_proxy = ConfigProxy(self.config)

        # Initialize the gpodder.net client
        self.mygpo_client = my.MygPoClient(self.config)

        gpodder.user_extensions.on_ui_initialized(self.model,
                self.extensions_podcast_update_cb,
                self.extensions_episode_download_cb)

        self.view = DeclarativeView()
        self.view.closing.connect(self.on_quit)
        self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView)

        self.controller = Controller(self)
        self.media_buttons_handler = helper.MediaButtonsHandler()
        self.tracker_miner_config = helper.TrackerMinerConfig()
        self.podcast_model = gPodderPodcastListModel()
        self.episode_model = gPodderEpisodeListModel(self.config)
        self.last_episode = None

        # A dictionary of episodes that are currently active
        # in some way (i.e. playing back or downloading)
        self.active_episode_wrappers = {}

        engine = self.view.engine()

        # Maemo 5: Experimental Qt Mobility packages are installed in /opt
        if gpodder.ui.fremantle:
            for path in ('/opt/qtm11/imports', '/opt/qtm12/imports'):
                engine.addImportPath(path)
        elif gpodder.win32:
            for path in (r'C:\QtSDK\Desktop\Qt\4.7.4\msvc2008\imports',):
                engine.addImportPath(path)

        # Add the cover art image provider
        self.cover_provider = images.LocalCachedImageProvider()
        engine.addImageProvider('cover', self.cover_provider)

        root_context = self.view.rootContext()
        root_context.setContextProperty('controller', self.controller)
        root_context.setContextProperty('configProxy', self.config_proxy)
        root_context.setContextProperty('mediaButtonsHandler',
                self.media_buttons_handler)
        root_context.setContextProperty('trackerMinerConfig',
                self.tracker_miner_config)

        # Load the QML UI (this could take a while...)
        self.view.setSource(QUrl.fromLocalFile(QML('main_default.qml')))

        # Proxy to the "main" QML object for direct access to Qt Properties
        self.main = helper.QObjectProxy(self.view.rootObject().property('main'))

        self.main.podcastModel = self.podcast_model
        self.main.episodeModel = self.episode_model

        self.view.setWindowTitle('gPodder')

        if gpodder.ui.harmattan:
            self.view.showFullScreen()
        elif gpodder.ui.fremantle:
            self.view.setAttribute(Qt.WA_Maemo5AutoOrientation, True)
            self.view.showFullScreen()
        else:
            # On the Desktop, scale to fit my small laptop screen..
            desktop = self.app.desktop()
            if desktop.height() < 1000:
                FACTOR = .8
                self.view.scale(FACTOR, FACTOR)
                size = self.view.size()
                size *= FACTOR
                self.view.resize(size)
            self.view.show()

        self.do_start_progress.connect(self.on_start_progress)
        self.do_end_progress.connect(self.on_end_progress)
        self.do_show_message.connect(self.on_show_message)

        self.load_podcasts()

    def add_active_episode(self, episode):
        self.active_episode_wrappers[episode.id] = episode
        episode.episode_wrapper_refcount += 1

    def remove_active_episode(self, episode):
        episode.episode_wrapper_refcount -= 1
        if episode.episode_wrapper_refcount == 0:
            del self.active_episode_wrappers[episode.id]

    def load_last_episode(self):
        last_episode = None
        last_podcast = None
        for podcast in self.podcast_model.get_podcasts():
            for episode in podcast.get_all_episodes():
                if not episode.last_playback:
                    continue
                if last_episode is None or \
                        episode.last_playback > last_episode.last_playback:
                    last_episode = episode
                    last_podcast = podcast

        if last_episode is not None:
            self.last_episode = self.wrap_episode(last_podcast, last_episode)
            # FIXME: Send last episode to player
            #self.select_episode(self.last_episode)

    def on_episode_deleted(self, episode):
        # Remove episode from play queue (if it's in there)
        self.main.removeQueuedEpisode(episode)

        # If the episode that has been deleted is currently
        # being played back (or paused), stop playback now.
        if self.main.currentEpisode == episode:
            self.main.togglePlayback(None)

    def enqueue_episode(self, episode):
        self.main.enqueueEpisode(episode)

    def run(self):
        return self.app.exec_()

    quit = Signal()

    def on_quit(self):
        # Make sure the audio playback is stopped immediately
        self.main.togglePlayback(None)
        self.save_pending_data()
        self.view.hide()
        self.core.shutdown()
        self.app.quit()

    do_show_message = Signal(unicode)

    @Slot(unicode)
    def on_show_message(self, message):
        self.main.showMessage(message)

    def show_message(self, message):
        self.do_show_message.emit(message)

    def show_input_dialog(self, message, value='', accept=_('OK'),
            reject=_('Cancel'), is_text=True):
        self.main.showInputDialog(message, value, accept, reject, is_text)

    def open_context_menu(self, items):
        self.main.openContextMenu(items)

    do_start_progress = Signal(str)

    @Slot(str)
    def on_start_progress(self, text):
        self.main.startProgress(text)

    def start_progress(self, text=_('Please wait...')):
        self.do_start_progress.emit(text)

    do_end_progress = Signal()

    @Slot()
    def on_end_progress(self):
        self.main.endProgress()

    def end_progress(self):
        self.do_end_progress.emit()

    def resort_podcast_list(self):
        self.podcast_model.sort()

    def insert_podcast(self, podcast):
        self.podcast_model.insert_object(podcast)
        self.mygpo_client.on_subscribe([podcast.url])
        self.mygpo_client.flush()

    def remove_podcast(self, podcast):
        # Remove queued episodes for this specific podcast
        self.main.removeQueuedEpisodesForPodcast(podcast)

        if self.main.currentEpisode is not None:
            # If the currently-playing episode is in the podcast
            # that is to be deleted, stop playback immediately.
            if self.main.currentEpisode.qpodcast == podcast:
                self.main.togglePlayback(None)
        self.podcast_model.remove_object(podcast)
        self.mygpo_client.on_unsubscribe([podcast.url])
        self.mygpo_client.flush()

    def load_podcasts(self):
        podcasts = map(model.QPodcast, self.model.get_podcasts())
        self.podcast_model.set_podcasts(self.db, podcasts)

    def wrap_episode(self, podcast, episode):
        try:
            return self.active_episode_wrappers[episode.id]
        except KeyError:
            return model.QEpisode(self, podcast, episode)

    def select_podcast(self, podcast):
        if isinstance(podcast, model.QPodcast):
            # Normal QPodcast instance
            wrap = functools.partial(self.wrap_episode, podcast)
            objects = podcast.get_all_episodes()
            self.episode_model.set_is_subset_view(False)
        else:
            # EpisodeSubsetView
            wrap = lambda args: self.wrap_episode(*args)
            objects = podcast.get_all_episodes_with_podcast()
            self.episode_model.set_is_subset_view(True)

        self.episode_model.set_objects(map(wrap, objects))
        self.main.state = 'episodes'

    def save_pending_data(self):
        current_ep = self.main.currentEpisode
        if isinstance(current_ep, model.QEpisode):
            current_ep.save()

    def podcast_to_qpodcast(self, podcast):
        podcasts = filter(lambda p: p._podcast == podcast,
                          self.podcast_model.get_podcasts())
        assert len(podcasts) <= 1
        if podcasts:
            return podcasts[0]
        return None

    def extensions_podcast_update_cb(self, podcast):
        logger.debug('extensions_podcast_update_cb(%s)', podcast)
        try:
            qpodcast = self.podcast_to_qpodcast(podcast)
            if qpodcast is not None:
                qpodcast.qupdate(
                    finished_callback=self.controller.update_subset_stats)
        except Exception, e:
            logger.exception('extensions_podcast_update_cb(%s): %s', podcast, e)
Exemplo n.º 39
0
	def initSearch(self):
		self.s.show()
		# self.seaProc = Popen(["python",
			# self.instdir + "/searchui.py"])


	def initManager(self):
		
		self.m.show()
		# self.manProc = Popen(["python",
		# 	self.instdir + "/managerui.py"])


if __name__ == '__main__':

	import sys

	app = QApplication(sys.argv)
	display = app.desktop()

	if not QSystemTrayIcon.isSystemTrayAvailable():
		QMessageBox.critical(None, "System Tray",
			"No system tray detected, use alternate means to \
			interface with Tag Manager.")
		sys.exit(1)

	QApplication.setQuitOnLastWindowClosed(False)

	ignition = SysTray(display)

	sys.exit(app.exec_())	
Exemplo n.º 40
0
class qtPodder(QObject):
    def __init__(self, args, gpodder_core, dbus_bus_name):
        QObject.__init__(self)

        self.dbus_bus_name = dbus_bus_name
        # TODO: Expose the same D-Bus API as the Gtk UI D-Bus object (/gui)
        # TODO: Create a gpodder.dbusproxy.DBusPodcastsProxy object (/podcasts)

        self.app = QApplication(args)
        signal.signal(signal.SIGINT, signal.SIG_DFL)
        self.quit.connect(self.on_quit)

        self.core = gpodder_core
        self.config = self.core.config
        self.db = self.core.db
        self.model = self.core.model

        self.config_proxy = ConfigProxy(self.config)

        # Initialize the gpodder.net client
        self.mygpo_client = my.MygPoClient(self.config)

        gpodder.user_extensions.on_ui_initialized(self.model,
                self.extensions_podcast_update_cb,
                self.extensions_episode_download_cb)

        self.view = DeclarativeView()
        self.view.closing.connect(self.on_quit)
        self.view.setResizeMode(QDeclarativeView.SizeRootObjectToView)

        self.controller = Controller(self)
        self.media_buttons_handler = helper.MediaButtonsHandler()
        self.tracker_miner_config = helper.TrackerMinerConfig()
        self.podcast_model = gPodderPodcastListModel()
        self.episode_model = gPodderEpisodeListModel(self.config, self)
        self.last_episode = None

        # A dictionary of episodes that are currently active
        # in some way (i.e. playing back or downloading)
        self.active_episode_wrappers = {}

        engine = self.view.engine()

        # Add the cover art image provider
        self.cover_provider = images.LocalCachedImageProvider()
        engine.addImageProvider('cover', self.cover_provider)

        root_context = self.view.rootContext()
        root_context.setContextProperty('controller', self.controller)
        root_context.setContextProperty('configProxy', self.config_proxy)
        root_context.setContextProperty('mediaButtonsHandler',
                self.media_buttons_handler)
        root_context.setContextProperty('trackerMinerConfig',
                self.tracker_miner_config)
        root_context.setContextProperty('podcastModel', self.podcast_model)
        root_context.setContextProperty('episodeModel', self.episode_model)

        for folder in gpodder.ui_folders:
            path = os.path.join(folder, 'harmattan')

            if os.path.exists(path):
                logger.info('Adding QML Import Path: %s', path)
                engine.addImportPath(path)

        # Load the QML UI (this could take a while...)
        self.view.setSource(QUrl.fromLocalFile(QML('main_default.qml')))

        self.view.setWindowTitle('gPodder')

        if gpodder.ui.harmattan:
            self.view.showFullScreen()
        else:
            # On the Desktop, scale to fit my small laptop screen..
            desktop = self.app.desktop()
            if desktop.height() < 1000:
                FACTOR = .8
                self.view.scale(FACTOR, FACTOR)
                size = self.view.size()
                size *= FACTOR
                self.view.resize(size)
            self.view.show()

        podcasts = self.load_podcasts()

        self.resumable_episodes = None
        self.do_offer_download_resume.connect(self.on_offer_download_resume)
        util.run_in_background(self.find_partial_downloads(podcasts))

    def find_partial_downloads(self, podcasts):
        def start_progress_callback(count):
            self.controller.startProgress.emit(_('Loading incomplete downloads'))

        def progress_callback(title, progress):
            self.controller.startProgress.emit('%s (%d%%)' % (
                _('Loading incomplete downloads'),
                progress*100))

        def finish_progress_callback(resumable_episodes):
            self.controller.endProgress.emit()
            self.resumable_episodes = resumable_episodes
            self.do_offer_download_resume.emit()

        common.find_partial_downloads(podcasts,
                start_progress_callback,
                progress_callback,
                finish_progress_callback)

    do_offer_download_resume = Signal()

    def on_offer_download_resume(self):
        if self.resumable_episodes:
            def download_episodes():
                for episode in self.resumable_episodes:
                    qepisode = self.wrap_simple_episode(episode)
                    self.controller.downloadEpisode(qepisode)

            def delete_episodes():
                logger.debug('Deleting incomplete downloads.')
                common.clean_up_downloads(delete_partial=True)

            message = _('Incomplete downloads from a previous session were found.')
            title = _('Resume')

            self.controller.confirm_action(message, title, download_episodes, delete_episodes)

    def add_active_episode(self, episode):
        self.active_episode_wrappers[episode.id] = episode
        episode.episode_wrapper_refcount += 1

    def remove_active_episode(self, episode):
        episode.episode_wrapper_refcount -= 1
        if episode.episode_wrapper_refcount == 0:
            del self.active_episode_wrappers[episode.id]

    def load_last_episode(self):
        last_episode = None
        last_podcast = None
        for podcast in self.podcast_model.get_podcasts():
            for episode in podcast.get_all_episodes():
                if not episode.last_playback:
                    continue
                if last_episode is None or \
                        episode.last_playback > last_episode.last_playback:
                    last_episode = episode
                    last_podcast = podcast

        if last_episode is not None:
            self.last_episode = self.wrap_episode(last_podcast, last_episode)
            # FIXME: Send last episode to player
            #self.select_episode(self.last_episode)

    def run(self):
        return self.app.exec_()

    quit = Signal()

    def on_quit(self):
        self.controller.on_quit()
        self.view.hide()
        self.core.shutdown()
        self.app.quit()

    def resort_podcast_list(self):
        self.podcast_model.sort()

    def insert_podcast(self, podcast):
        self.podcast_model.insert_object(podcast)
        self.mygpo_client.on_subscribe([podcast.url])
        self.mygpo_client.flush()

    def load_podcasts(self):
        podcasts = map(model.QPodcast, self.model.get_podcasts())
        self.podcast_model.set_podcasts(self.db, podcasts)
        return podcasts

    def wrap_episode(self, podcast, episode):
        try:
            return self.active_episode_wrappers[episode.id]
        except KeyError:
            return model.QEpisode(self, podcast, episode)

    def wrap_simple_episode(self, episode):
        for podcast in self.podcast_model.get_podcasts():
            if podcast.id == episode.podcast_id:
                return self.wrap_episode(podcast, episode)

        return None

    def select_podcast(self, podcast):
        if isinstance(podcast, model.QPodcast):
            # Normal QPodcast instance
            wrap = functools.partial(self.wrap_episode, podcast)
            objects = podcast.get_all_episodes()
            self.episode_model.set_is_subset_view(False)
        else:
            # EpisodeSubsetView
            wrap = lambda args: self.wrap_episode(*args)
            objects = podcast.get_all_episodes_with_podcast()
            self.episode_model.set_is_subset_view(True)

        self.episode_model.set_objects(map(wrap, objects))

    def podcast_to_qpodcast(self, podcast):
        podcasts = filter(lambda p: p._podcast == podcast,
                          self.podcast_model.get_podcasts())
        assert len(podcasts) <= 1
        if podcasts:
            return podcasts[0]
        return None

    def extensions_podcast_update_cb(self, podcast):
        logger.debug('extensions_podcast_update_cb(%s)', podcast)
        try:
            qpodcast = self.podcast_to_qpodcast(podcast)
            if qpodcast is not None and not qpodcast.pause_subscription:
                qpodcast.qupdate(
                    finished_callback=self.controller.update_subset_stats)
        except Exception, e:
            logger.exception('extensions_podcast_update_cb(%s): %s', podcast, e)
Exemplo n.º 41
0
#
if  __name__ == '__main__':

    config_file = 'config.json'
    parser = argparse.ArgumentParser(
        description = ""
    )
    parser.add_argument(
        '-c',
        '--config',
        default = config_file,
        help = 'Configuration file, default is %s' % config_file
    )
    arg = parser.parse_args()
    app = QApplication(sys.argv)
    win = app.desktop().screenGeometry()
    cfg = config.XiboConfig(arg.config)

    signal.signal(signal.SIGINT, lambda s, f: app.quit())

    if  not os.path.isfile(arg.config):
        print
        print 'The configuration file %s is not exists.' % arg.config
        print 'Creating default configuration ...'
        cfg.save()
        print "Please edit the '%s' file and then rerun xibopy again." % arg.config
        print
        sys.exit(0)

    r = -1
    with ui.XiboWindow(cfg) as w:
Exemplo n.º 42
0
		'''
		screen_x = self.screen.screenGeometry().width()
		screen_y = self.screen.screenGeometry().height()

		x_pos = .83 * screen_x
		y_pos = .07 * screen_y

		self.setGeometry(x_pos, y_pos, dimension_x, dimension_y)


	# def mkresdir(self):
	# 	if not path.exists(tfm.tmpFile):
	# 		makedirs(tfm.tmpFile)


if __name__ == '__main__':

	from PySide.QtGui import QApplication
	import sys

	app = QApplication(sys.argv)
	screen = app.desktop()

	search = uiSearch(screen)

	if not path.exists(tfmlib.tmpF):
		makedirs(tfmlib.tmpF)

	search.show()

	app.exec_()
Exemplo n.º 43
0
 def __init__(self):
     super(MainWindow, self).__init__()
     self.setWindowTitle("Cobaya input generator for Cosmology")
     self.setGeometry(0, 0, 1500, 1000)
     self.move(
         QApplication.desktop().screen().rect().center() - self.rect().center())
     self.show()
     # Main layout
     self.layout = QHBoxLayout()
     self.setLayout(self.layout)
     self.layout_left = QVBoxLayout()
     self.layout.addLayout(self.layout_left)
     self.layout_output = QVBoxLayout()
     self.layout.addLayout(self.layout_output)
     # LEFT: Options
     self.options = QWidget()
     self.layout_options = QVBoxLayout()
     self.options.setLayout(self.layout_options)
     self.options_scroll = QScrollArea()
     self.options_scroll.setWidget(self.options)
     self.options_scroll.setWidgetResizable(True)
     self.layout_left.addWidget(self.options_scroll)
     self.atoms = odict()
     titles = odict([
         ["preset", "Presets"],
         ["theory", "Theory code"],
         ["primordial", "Primordial perturbations"],
         ["geometry", "Geometry"],
         ["hubble", "Constaint on hubble parameter"],
         ["baryons", "Baryon sector"],
         ["dark_matter", "Dark matter"],
         ["dark_energy", "Lambda / Dark energy"],
         ["neutrinos", "Neutrinos and other extra matter"],
         ["bbn", "BBN"],
         ["reionization", "Reionization history"],
         ["cmb_lensing", "CMB lensing"],
         ["cmb", "CMB experiments"],
         ["sampler", "Samplers"]])
     for a in titles:
         self.atoms[a] = {
             "group": QGroupBox(titles[a]),
             "combo": QComboBox()}
         self.layout_options.addWidget(self.atoms[a]["group"])
         self.atoms[a]["layout"] = QVBoxLayout(self.atoms[a]["group"])
         self.atoms[a]["layout"].addWidget(self.atoms[a]["combo"])
         self.atoms[a]["combo"].addItems(
             [text(k,v) for k,v in getattr(input_database, a).items()])
     # Connect to refreshers -- needs to be after adding all elements
     for a in self.atoms:
         if a == "preset":
             self.atoms["preset"]["combo"].currentIndexChanged.connect(
                 self.refresh_preset)
             continue
         self.atoms[a]["combo"].currentIndexChanged.connect(self.refresh)
     # Add Planck-naming checkbox and connect to refresher too
     self.planck_names = QCheckBox("Keep common names")
     self.atoms["theory"]["layout"].addWidget(self.planck_names)
     self.planck_names.stateChanged.connect(self.refresh)
     # RIGHT: Output + buttons
     self.display_tabs = QTabWidget()
     self.display = {}
     for k in ["yaml", "python"]:
         self.display[k] = QTextEdit()
         self.display[k].setLineWrapMode(QTextEdit.NoWrap)
         self.display[k].setFontFamily("mono")
         self.display[k].setCursorWidth(0)
         self.display[k].setReadOnly(True)
         self.display_tabs.addTab(self.display[k], k)
     self.layout_output.addWidget(self.display_tabs)
     # Buttons
     self.buttons = QHBoxLayout()
     self.save_button = QPushButton('Save', self)
     self.copy_button = QPushButton('Copy to clipboard', self)
     self.buttons.addWidget(self.save_button)
     self.buttons.addWidget(self.copy_button)
     self.save_button.released.connect(self.save_file)
     self.copy_button.released.connect(self.copy_clipb)
     self.layout_output.addLayout(self.buttons)
     self.save_dialog = QFileDialog()
     self.save_dialog.setFileMode(QFileDialog.AnyFile)
     self.save_dialog.setAcceptMode(QFileDialog.AcceptSave)