예제 #1
0
    def __init__(self, varWrapper, distributedObjects):
        """ Constructor
        @param varWrapper                datagraph.datagraphvw.DataGraphVW, holds the Data of the Variable to show
        @param distributedObjects distributedobjects.DistributedObjects, the DistributedObjects-Instance
        """
        QGraphicsWebView.__init__(self, None)
        self.varWrapper = varWrapper
        self.distributedObjects = distributedObjects
        self.setFlags(QGraphicsItem.ItemIsMovable | QGraphicsItem.ItemIsFocusable)
        self.htmlTemplate = Template(filename=sys.path[0] + '/datagraph/templates/htmlvariableview.mako')
        self.page().setPreferredContentsSize(QSize(0, 0))
        self.setPreferredSize(QSizeF(0, 0))
        self.setResizesToContents(True)
        self.incomingPointers = []
        self.outgoingPointers = []

        self.source = None

        # ids for ourself and the template handlers we will eventually render
        self.lastId = -1
        self.uniqueIds = {}

        self.dirty = True

        self.id = self.getUniqueId(self)
        
        self.distributedObjects.signalProxy.variableUpdateCompleted.connect(self.render)
예제 #2
0
 def graphicRenderer(self, svgInput):
     #Graphics rendering.
     scene = QGraphicsScene()
     self.dlg.graphicsView.setScene(scene)
     webview = QGraphicsWebView()
     webview.setContent(svgInput, 'image/svg+xml')
     scene.addItem(webview)
예제 #3
0
    def __init__(self):
        QWidget.__init__(self)
        self._main_container = main_container.MainContainer()
        self._explorer_container = explorer_container.ExplorerContainer()

        self.tabs = QTabWidget(self)

        #Graph widget
        self._graph = GraphicsView()
        self._graphMl = GraphicsView()

        # Graph scene
        self.scene = GraphicsScene(self._graph)
        self.sceneMl = GraphicsScene(self._graphMl)

        path = os.path.join(PRJ_PATH, "img", 'textX-ninja.svg')
        self.scene.webview = QGraphicsWebView()
        self.create_webview(path, self.scene, self._graph)
        self.scene.addItem(self.scene.webview)

        self._graph.setScene(self.scene)
        self.set_view(self._graph)

        self._graphMl.setScene(self.sceneMl)
        self.set_view(self._graphMl)

        self.tabs.addTab(self._graph, "Metamodel")
        self.tabs.addTab(self._graphMl, "Model")

        #Main Layout
        main_layout = QVBoxLayout(self)
        main_layout.setContentsMargins(0, 0, 0, 0)
        main_layout.setSpacing(0)
        main_layout.addWidget(self.tabs)
 def generateChart(self):
     scene = QtGui.QGraphicsScene()
     self.graphicsView.setScene(scene)
     
     #select data adn chart type
     chartType = self.getChartType()
     if self.validation.validateChart(chartType):
         chart = self.mapChartType[chartType]()
         
          
         self.webview = QGraphicsWebView()
         self.webview.resize(self.graphicsView.width()-20,self.graphicsView.height()-20)
         path = os.path.dirname(__file__)+'/js/'
         chartData = getattr(self,chartType + 'ChartData' )()
         chart.setData(chartData)
         self.webview.setHtml(chart.getHTML(),baseUrl=QUrl().fromLocalFile(path))
         self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
         self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
         frame = self.webview.page().mainFrame()
         frame.setScrollBarPolicy(Qt.Vertical,Qt.ScrollBarAlwaysOff)
         frame.setScrollBarPolicy(Qt.Horizontal,Qt.ScrollBarAlwaysOff)        
         scene.addItem(self.webview)
         self.graphicsView.show()
         self.savePngFile.setEnabled(True)
         self.chartGenerated = True
     else:
         self.showValidateErrors()
예제 #5
0
	def makeLayout(self):
		self.layout = QGraphicsLinearLayout(Qt.Vertical)
		self.flowComboLayout = QGraphicsLinearLayout(Qt.Horizontal)
		self.flowLabelLayout = QGraphicsGridLayout()
		
		#Flow Layout
		self.flowData = SvJanez()
		self.flowView = QGraphicsWebView()
		self.flowView.setUrl( QUrl(self.flowData.flowImageUrl) )
		self.flowView.setEnabled(False)

		self.flowSelectorCombo = Plasma.ComboBox()
		self.flowSelectorCombo.addItem(u"Sveti Janez")
		self.flowSelectorCombo.addItem(u"Soteska")
		self.flowSelectorCombo.setMinimumWidth(125)
		self.flowSelectorCombo.textChanged.connect(self.flowSourceChanged)

		self.flowRefresh = Plasma.IconWidget()
		self.flowRefresh.setIcon("view-refresh")
		self.flowRefresh.clicked.connect(self.update)

		self.flowEnlargeButton = Plasma.IconWidget()
		self.flowEnlargeButton.setIcon("zoom-in")
		self.flowEnlargeButton.clicked.connect(self.showFullFlowWidget)

		self.flowLabel = Plasma.Label()
		self.flowLabel.setText(u"<b>Pretok:</b> ")
		self.flowDataLabel = Plasma.Label()
		self.flowLevelLabel = Plasma.Label()
		self.flowLevelLabel.setText(u"<b>Višina:</b> ")
		self.flowLevelDataLabel = Plasma.Label()
		self.flowTempLabel = Plasma.Label()
		self.flowTempLabel.setText(u"<b>Temperatura:</b> ")
		self.flowTempDataLabel = Plasma.Label()

		self.flowLabelLayout.addItem(self.flowLevelLabel,0,0)
		self.flowLabelLayout.addItem(self.flowLevelDataLabel,0,1)
		self.flowLabelLayout.addItem(self.flowLabel,1,0)
		self.flowLabelLayout.addItem(self.flowDataLabel,1,1)
		self.flowLabelLayout.addItem(self.flowTempLabel,2,0)
		self.flowLabelLayout.addItem(self.flowTempDataLabel,2,1)
		
		self.flowUpdateTimeSelector = UpdateTimeSelector()
		self.flowUpdateTimeSelector.setDefaultTime(4)
		self.flowUpdateTimeSelector.setDefaultInterval('h')
		self.flowUpdateTimeSelector.updateTimeSpin.valueChanged.connect(self.flowTimeChanged)
		self.flowUpdateTimeSelector.updateCheckBox.toggled.connect(self.flowTimerToggle)
		
		
		self.flowComboLayout.addItem(self.flowSelectorCombo)
		self.flowComboLayout.addStretch()
		self.flowComboLayout.addItem(self.flowEnlargeButton)
		self.flowComboLayout.addItem(self.flowRefresh)
		self.layout.addItem(self.flowComboLayout)
		self.layout.addItem(self.flowView)
		self.layout.addItem(self.flowLabelLayout)
		self.layout.addStretch()
		self.layout.addItem(self.flowUpdateTimeSelector.layout)
		self.layout.itemAt(0).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
		self.layout.itemAt(2).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
예제 #6
0
파일: PyQTtest.py 프로젝트: jdrusso/PyMap
    def initUI(self):

        self.countries = []
        self.existingChecks = []
        
        self.K = Kartograph()
        
        self.CountryInput = QtGui.QLineEdit(self)
        
        #self.CountryList = QtGui.QTextEdit(self)
        #self.CountryList.setReadOnly(True)
        
        self.AddButton = QtGui.QPushButton("Add", self)
        self.AddButton.clicked.connect(self.buttonClicked)
        
        self.GenButton = QtGui.QPushButton('Generate', self)
        self.GenButton.clicked.connect(self.generateClicked)
        
        self.DispButton = QtGui.QPushButton('Display', self)
        self.DispButton.clicked.connect(self.displayClicked)
        
        self.statusBar = QtGui.QStatusBar(self)
        
        self.br = QtSvg.QGraphicsSvgItem("world.svg").boundingRect()
        self.scene = QtGui.QGraphicsScene()
        self.view = QtGui.QGraphicsView(self.scene)
        self.SvgItem = QtSvg.QGraphicsSvgItem("world.svg").boundingRect()
        self.webview = QGraphicsWebView()
        self.webview.load(QtCore.QUrl("world.svg"))
        self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
        self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
        self.webview.resize(self.br.width(), self.br.height())
        self.scene.addItem(self.webview)
        self.view.resize(self.br.width()+10, self.br.height()+10)
        
        
        self.grid = QtGui.QGridLayout()
        self.grid.setSpacing(10)
        
        self.bottomCheck = 4
        
        self.grid.addWidget(self.AddButton, 1, 1)
        self.grid.addWidget(self.GenButton, 2, 1)
        self.grid.addWidget(self.DispButton, 3, 1)
        #grid.addWidget(self.CountryList, 4, 1)
        self.grid.addWidget(self.CountryInput, 1, 2)
        self.grid.addWidget(self.statusBar, 36, 0, 1, 3, QtCore.Qt.AlignBottom)
        self.grid.addWidget(self.view, 2, 2, 34, 50)
        
        self.setLayout(self.grid)
        
        #self.center()
        self.setWindowTitle('Map Display - Width ' + str(self.br.width()) + ', Height ' + str(self.br.height()))
        
        self.generateClicked()
        self.displayClicked()
        
        self.show()
예제 #7
0
    def __init__(self):
        super(QtGui.QGraphicsScene, self).__init__()
        self.view = QtGui.QGraphicsView(self)

        self.webview = QGraphicsWebView()
        self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
        self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
        self.addItem(self.webview)

        self.webview.loadFinished.connect(self.svgLoaded)
예제 #8
0
    def __init__(self, var):
        QGraphicsWebView.__init__(self, None)
        self.var = var
        self.setFlags(QGraphicsItem.ItemIsMovable | QGraphicsItem.ItemIsFocusable)
        self.htmlTemplate = Template(filename=sys.path[0] + '/datagraph/templates/htmlvariableview.mako')
        self.page().setPreferredContentsSize(QSize(0, 0))
        self.setPreferredSize(QSizeF(0, 0))
        self.setResizesToContents(True)
        self.incomingPointers = []
        self.outgoingPointers = []

        self.source = None

        # ids for ourself and the template handlers we will eventually render
        self.lastId = -1
        self.uniqueIds = {}

        self.dirty = True

        self.id = self.getUniqueId(self)
예제 #9
0
    def load_graph(self, path, name, tabIndex):
        if tabIndex == 0:
            self.scene.clear()
            self.scene.webview = QGraphicsWebView()
            self.create_webview(path, self.scene, self._graph)
            self.scene.addItem(self.scene.webview)
            self._graph.setScene(self.scene)
            self._graph.fitInView(self.scene.itemsBoundingRect(),
                                  Qt.KeepAspectRatio)
        elif tabIndex == 1:
            self.sceneMl.clear()
            self.sceneMl.webview = QGraphicsWebView()
            self.create_webview(path, self.sceneMl, self._graphMl)
            self.sceneMl.addItem(self.sceneMl.webview)
            self._graphMl.setScene(self.sceneMl)
            self._graphMl.fitInView(self.sceneMl.itemsBoundingRect(),
                                    Qt.KeepAspectRatio)

        self.add_label(name, tabIndex)
        # focus on tab
        self.tabs.setCurrentIndex(tabIndex)
예제 #10
0
 def __init__(self, var, distributedObjects):
     """ Constructor
     @param var                datagraph.datagraphvw.DataGraphVW, holds the Data of the Variable to show
     @param distributedObjects distributedobjects.DistributedObjects, the DistributedObjects-Instance
     """
     QGraphicsWebView.__init__(self, None)
     self.var = var
     self.distributedObjects = distributedObjects
     self.templateHandlers = []
     self.setFlags(QGraphicsItem.ItemIsMovable)
     self.htmlTemplate = Template(filename=sys.path[0] + '/datagraph/htmlvariableview.mako')
     self.page().setPreferredContentsSize(QSize(0,0))
     self.setPreferredSize(QSizeF(0, 0))
     self.setResizesToContents(True)
     self.page().setLinkDelegationPolicy(QWebPage.DelegateAllLinks);
     self.connect(self.page(), SIGNAL('linkClicked(QUrl)'), self.linkClicked, Qt.DirectConnection)
     self.connect(self.var, SIGNAL('changed()'), self.render)
     self.incomingPointers = []
     self.outgoingPointers = []
     
     self.render()
예제 #11
0
class Scene(QtGui.QGraphicsScene):
    def __init__(self):
        super(QtGui.QGraphicsScene, self).__init__()
        self.view = QtGui.QGraphicsView(self)

        self.webview = QGraphicsWebView()
        self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
        self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
        self.addItem(self.webview)

        self.webview.loadFinished.connect(self.svgLoaded)

    def svgLoaded(self):
        frame = self.webview.page().mainFrame()
        fsize = frame.contentsSize()
        self.webview.resize(QtCore.QSizeF(fsize))
        self.view.resize(fsize.width() + 10, fsize.height() + 10)
        self.webview.page().mainFrame().evaluateJavaScript(getJsScript('circle-test.js')) 
예제 #12
0
    def __init__(self, var):
        QGraphicsWebView.__init__(self, None)
        self.var = var
        self.setFlags(QGraphicsItem.ItemIsMovable
                      | QGraphicsItem.ItemIsFocusable)
        self.htmlTemplate = Template(
            filename=sys.path[0] +
            '/datagraph/templates/htmlvariableview.mako')
        self.page().setPreferredContentsSize(QSize(0, 0))
        self.setPreferredSize(QSizeF(0, 0))
        self.setResizesToContents(True)
        self.incomingPointers = []
        self.outgoingPointers = []

        self.source = None

        # ids for ourself and the template handlers we will eventually render
        self.lastId = -1
        self.uniqueIds = {}

        self.dirty = True

        self.id = self.getUniqueId(self)
예제 #13
0
	def makeLayout(self):
		self.layout = QGraphicsLinearLayout(Qt.Vertical)
		self.topCamLayout = QGraphicsLinearLayout(Qt.Horizontal)
		
		# Cam layout
		self.camRefreshButton = Plasma.IconWidget()
		self.camRefreshButton.setIcon("view-refresh")
		self.camRefreshButton.clicked.connect(self.update)
		
		self.camTimeLabel = Plasma.Label()
		self.camTimeLabel.setText(u"ob")

		self.camEnlargeButton = Plasma.IconWidget()
		self.camEnlargeButton.setIcon("zoom-in")
		self.camEnlargeButton.clicked.connect(self.showFullCamWidget)

		self.camSelectorCombo = Plasma.ComboBox()
		for source in sorted(self.camUrls.keys()):
			self.camSelectorCombo.addItem(source)
		self.camSelectorCombo.setMinimumWidth(125)
		self.camSelectorCombo.textChanged.connect(self.camChanged)

		self.camView = QGraphicsWebView()
		self.camView.setEnabled(False)

		self.camTimeDataLabel = Plasma.Label()

		self.camUpdateTimeSelector = UpdateTimeSelector()
		self.camUpdateTimeSelector.setDefaultTime(30)
		self.camUpdateTimeSelector.setDefaultInterval('min')
		self.camUpdateTimeSelector.updateTimeSpin.valueChanged.connect(self.camTimeChanged)
		self.camUpdateTimeSelector.updateCheckBox.toggled.connect(self.camTimerToggle)

		self.topCamLayout.addItem(self.camSelectorCombo)
		self.topCamLayout.addItem(self.camTimeLabel)
		self.topCamLayout.addItem(self.camTimeDataLabel)
		self.topCamLayout.addStretch()
		self.topCamLayout.addItem(self.camEnlargeButton)
		self.topCamLayout.addItem(self.camRefreshButton)

		self.layout.addItem(self.topCamLayout)
		self.layout.addItem(self.camView)
		self.layout.addItem(self.camUpdateTimeSelector.layout)
		self.layout.itemAt(0).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
		self.layout.itemAt(2).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
예제 #14
0
파일: svg_charts.py 프로젝트: rouxz/BEEF
class WidgetChart(QWidget):
	""" a widget displaying a chart stock as a svg in the local file """

	def __init__(self, parent):
		"""create the widget"""
		QWidget.__init__(self, parent)

		# fetching the chart
		# ==================

		# file to open
		self.file = "bar_chart.svg"
		if sys.platform == "linux2":
			self.directorySep = "/"
		else:
			self.directorySep = "\\"
		self.wd = os.getcwd()



		# displaying the chart
		# ====================

		# scene for displaying the graphics
		self.scene = QGraphicsScene()
		# view widget where the graphics will be
		self.view = QGraphicsView(self.scene)

		#get the size of the svg
		self.br = QGraphicsSvgItem(self.wd + self.directorySep + self.file).boundingRect()

		# web that is to say the svg file
		self.webview = QGraphicsWebView()
		self.loadWidget()


		# add the chart in the scene
		self.scene.addItem(self.webview)
		# resize the view
		self.view.resize(self.br.width()+10, self.br.height()+10)

		#add the view to the parent layout
		self.setLayout(QVBoxLayout())
		self.layout().addWidget(self.view)
		
	def loadWidget(self):
		self.webview.load(QUrl(self.wd + self.directorySep + self.file))
		self.webview.setFlags(QGraphicsItem.ItemClipsToShape)
		# self.webview.setCacheMode(QGraphicsItem.NoCache)
		self.webview.resize(self.br.width(), self.br.height())
예제 #15
0
파일: svg_charts.py 프로젝트: rouxz/BEEF
	def __init__(self, parent):
		"""create the widget"""
		QWidget.__init__(self, parent)

		# fetching the chart
		# ==================

		# file to open
		self.file = "bar_chart.svg"
		if sys.platform == "linux2":
			self.directorySep = "/"
		else:
			self.directorySep = "\\"
		self.wd = os.getcwd()



		# displaying the chart
		# ====================

		# scene for displaying the graphics
		self.scene = QGraphicsScene()
		# view widget where the graphics will be
		self.view = QGraphicsView(self.scene)

		#get the size of the svg
		self.br = QGraphicsSvgItem(self.wd + self.directorySep + self.file).boundingRect()

		# web that is to say the svg file
		self.webview = QGraphicsWebView()
		self.loadWidget()


		# add the chart in the scene
		self.scene.addItem(self.webview)
		# resize the view
		self.view.resize(self.br.width()+10, self.br.height()+10)

		#add the view to the parent layout
		self.setLayout(QVBoxLayout())
		self.layout().addWidget(self.view)
예제 #16
0
    def __init__(self, parent=None):
        super(Lectern, self).__init__(parent)
        self.anchor = None
        
        self.initMainMenu()
        self.initToolbar()

        splitter = QSplitter()
        self.tocView = QTreeView()
        self.tocView.clicked.connect(self.navTo)
        self.tocModel = TableOfContents()
        self.tocModel.isEmpty.connect(self.handleTOCLoad)
        self.tocView.setModel(self.tocModel)
        self.tocView.expandAll()
        self.tocView.hide()
        splitter.addWidget(self.tocView)

        self.webView = QGraphicsWebView()
        frame = self.webView.page().mainFrame()
        scene = QGraphicsScene()
        scene.addItem(self.webView)
        self.graphicsView = GraphicsView(scene)
        self.graphicsView.setFrameShape(QFrame.NoFrame)
        glWidget = QGLWidget(self)
        self.graphicsView.setViewport(glWidget)

        self.webView.loadFinished.connect(self.handleLoad)

        splitter.addWidget(self.graphicsView)
        self.setCentralWidget(splitter)

        self.ebook_info = {}
        self.setWindowTitle('Lectern')

        try:
            self.ebook_info = self.openBook(QApplication.arguments()[1])
        except IndexError:
            pass
예제 #17
0
class Lectern(QMainWindow):

    def __init__(self, parent=None):
        super(Lectern, self).__init__(parent)
        self.anchor = None
        
        self.initMainMenu()
        self.initToolbar()

        splitter = QSplitter()
        self.tocView = QTreeView()
        self.tocView.clicked.connect(self.navTo)
        self.tocModel = TableOfContents()
        self.tocModel.isEmpty.connect(self.handleTOCLoad)
        self.tocView.setModel(self.tocModel)
        self.tocView.expandAll()
        self.tocView.hide()
        splitter.addWidget(self.tocView)

        self.webView = QGraphicsWebView()
        frame = self.webView.page().mainFrame()
        scene = QGraphicsScene()
        scene.addItem(self.webView)
        self.graphicsView = GraphicsView(scene)
        self.graphicsView.setFrameShape(QFrame.NoFrame)
        glWidget = QGLWidget(self)
        self.graphicsView.setViewport(glWidget)

        self.webView.loadFinished.connect(self.handleLoad)

        splitter.addWidget(self.graphicsView)
        self.setCentralWidget(splitter)

        self.ebook_info = {}
        self.setWindowTitle('Lectern')

        try:
            self.ebook_info = self.openBook(QApplication.arguments()[1])
        except IndexError:
            pass
            
    def initMainMenu(self):
        menuBar = self.menuBar()
        menuBar.setNativeMenuBar(True)
        
        # TODO: add CROSS-PLATFORM shortcut keys. (e.g. For Quit, use ⌘Q on Mac OS X, ALT-F4 elsewhere)
        fileMenu = QMenu('File', menuBar)
        navMenu = QMenu('Navigate', menuBar)
        
        # File Menu
        openAction = QAction('Open', fileMenu)
        openAction.triggered.connect(self.chooseEbook)
        fileMenu.addAction(openAction)
        
        quitAction = QAction('Quit', fileMenu)
        quitAction.triggered.connect(self.closeEvent)
        fileMenu.addAction(quitAction)
        
        # Nav Menu
        prevChatperAction = QAction('Previous Chapter', navMenu)
        prevChatperAction.triggered.connect(self.prevChapter)
        navMenu.addAction(prevChatperAction)
        
        nextChatperAction = QAction('Next Chapter', navMenu)
        nextChatperAction.triggered.connect(self.nextChapter)
        navMenu.addAction(nextChatperAction)
        
        menuBar.addMenu(fileMenu)
        menuBar.addMenu(navMenu)
    
    def initToolbar(self):
        toolBar = QToolBar(self)

        chooseAction = QAction(self.style().standardIcon(
            QStyle.SP_DialogOpenButton), 'Open', toolBar)
        chooseAction.triggered.connect(self.chooseEbook)
        toolBar.addAction(chooseAction)

        self.prevAction = QAction(self.style().standardIcon(
            QStyle.SP_ArrowBack), 'Go back', toolBar)
        self.prevAction.setEnabled(False)
        self.prevAction.triggered.connect(self.prevChapter)
        toolBar.addAction(self.prevAction)

        self.nextAction = QAction(self.style().standardIcon(
            QStyle.SP_ArrowForward), 'Go forward', toolBar)
        self.nextAction.setEnabled(False)
        self.nextAction.triggered.connect(self.nextChapter)
        toolBar.addAction(self.nextAction)

        self.addToolBar(toolBar)

    def chooseEbook(self):
        path = QFileDialog.getOpenFileName(self, 'Open eBook', QDesktopServices.storageLocation(
            QDesktopServices.DocumentsLocation),'EPUBs (*.epub)')

        if not isfile(path):
            return

        if self.ebook_info is not None and 'temp_path' in self.ebook_info:
            if exists(self.ebook_info['temp_path']):
                rmtree(self.ebook_info['temp_path'])

        path = QDir.toNativeSeparators(path)
        self.ebook_info = self.openBook(path)

    def openBook(self, path):
        ebook_info = {}
        path = realpath(path)
        if not isfile(path):
            QMessageBox.critical(self, 'File not found', 'File not found')

        mimetype, _ = guess_type(path)
        if mimetype != 'application/epub+zip':
            QMessageBox.critical(self, 'Not an EPUB', 'Not an EPUB')
            return None

        ebook = ZipFile(path)

        names = ebook.namelist()

        if not 'META-INF/container.xml' in names:
            ebook.close()
            QMessageBox.critical(self, 'Invalid EPUB', 'container.xml not '\
                    'found')
            return None

        container_tree = etree.parse(ebook.open('META-INF/container.xml'))
        rootfile = container_tree.xpath("//*[local-name() = 'rootfile']")
        if len(rootfile) == 0:
            ebook.close()
            QMessageBox.critical(self, 'Invalid EPUB', 'root not found in '\
                    'manifest')
            return None

        content_opf = rootfile[0].get('full-path')
        if content_opf is None:
            ebook.close()
            QMessageBox.critical(self, 'Invalid EPUB', 'content.opf not found')
            return None

        ebook_info['opf_root'] = posixpath.dirname(content_opf)

        tree = etree.parse(ebook.open(content_opf))
        manifest = tree.xpath("*[local-name() = 'manifest']")
        if len(manifest) == 0:
            ebook.close()
            QMessageBox.critical(self, 'Invalid EPUB', 'Manifest not found')
            return None
        manifest = manifest[0]

        items = {}
        for item in manifest:
            item_id = item.get('id')
            if item_id is None:
                ebook.close()
                QMessageBox.critical(self, 'Invalid EPUB', 'Item has no id')
                return None

            href = item.get('href')
            if href is None:
                ebook.close()
                QMessageBox.critical(self, 'Invalid EPUB', 'Item has no href')
                return None

            items[item_id] = href

        spine = tree.xpath("*[local-name() = 'spine']")
        if len(spine) == 0:
            ebook.close()
            QMessageBox.critical(self, 'Invalid EPUB', 'Spine not found')
            return None
        spine = spine[0]

        ebook_info['chapters'] = []
        for itemref in spine:
            idref = itemref.get('idref')
            if not idref in items:
                ebook.close()
                QMessageBox.critical(self, 'Invalid EPUB', 'Item in spine '\
                        'not found in manifest')
                return None
            ebook_info['chapters'].append(items[idref])

        if len(ebook_info['chapters']) == 0:
            ebook.close()
            QMessageBox.critical(self, 'Invalid EPUB', 'Content not found')
            return None

        # Table of contents
        toc = tree.find("//*[@href='toc.ncx']")
        if toc is not None:
            toc_path = posixpath.join(ebook_info['opf_root'], 'toc.ncx')
            if toc_path in names:
                toc_tree = etree.parse(ebook.open(toc_path))
                navMap = toc_tree.xpath("//*[local-name() = 'navMap']")
                if len(navMap) > 0:
                    self.tocModel.importNavMap(navMap[0])

        temp = QDir.toNativeSeparators(QDesktopServices.storageLocation(
            QDesktopServices.TempLocation))

        # In case we have two copies of Lectern opening the same book.
        filename = '{0}-{1}'.format(splitext(basename(path))[0], uuid4())
        ebook_info['temp_path'] = join(temp, filename)
        if exists(ebook_info['temp_path']):
            rmtree(ebook_info['temp_path'])

        ebook.extractall(ebook_info['temp_path'])
        ebook.close()
        ebook_info['index'] = 0
        url = join(ebook_info['temp_path'], ebook_info['opf_root'],
                ebook_info['chapters'][0])
        self.webView.setUrl(QUrl(url))
        if len(ebook_info['chapters']) > 1:
            self.nextAction.setEnabled(True)
        return ebook_info

    def prevChapter(self):
        index = self.ebook_info['index']
        chapters = self.ebook_info['chapters']
        if index > 0:
            index -= 1
            if index == 0:
                self.prevAction.setEnabled(False)
            url = join(self.ebook_info['temp_path'],
                    self.ebook_info['opf_root'], chapters[index])
            self.webView.setUrl(QUrl(url))
            self.ebook_info['index'] = index
            self.nextAction.setEnabled(True)

    def nextChapter(self):
        index = self.ebook_info['index']
        chapters = self.ebook_info['chapters']
        if index < len(chapters) - 1:
            index += 1
            if index == len(chapters) - 1:
                self.nextAction.setEnabled(False)
            url = join(self.ebook_info['temp_path'],
                    self.ebook_info['opf_root'], chapters[index])
            self.webView.setUrl(QUrl(url))
            self.ebook_info['index'] = index
            self.prevAction.setEnabled(True)

    def closeBook(self):
        if self.ebook_info is not None and 'temp_path' in self.ebook_info:
            if exists(self.ebook_info['temp_path']):
                rmtree(self.ebook_info['temp_path'])
        self.ebook_info = None

        self.tocView.hide()
        self.prevAction.setEnabled(False)
        self.nextAction.setEnabled(False)

    def closeEvent(self, event = 0):
        if(event == 0):
            event = PyQt4.QtGui.QCloseEvent()

        self.closeBook()
        super(Lectern, self).closeEvent(event)

        # Suppress "cannot make invalid context current" warnings
        sys.exit(0)

    def navTo(self, index):
        navPoint = index.internalPointer()
        href = posixpath.join(self.ebook_info['temp_path'],
                self.ebook_info['opf_root'], navPoint.src)

        try:
            path, anchor = href.split('#')
            if path == self.webView.url().path():
                self.webView.page().mainFrame().scrollToAnchor(anchor)
                return
            else:
                self.anchor = anchor
        except ValueError:
            pass
        url = QUrl.fromEncoded(href)
        self.webView.setUrl(url)

    def handleLoad(self, ok):
        if self.anchor is not None:
            self.webView.page().mainFrame().addToJavaScriptWindowObject("app", self);
            self.webView.page().mainFrame().scrollToAnchor(self.anchor)

    def handleTOCLoad(self, isEmpty):
        if isEmpty:
            self.tocView.hide()
        else:
            self.tocView.show()
예제 #18
0
파일: PyQTtest.py 프로젝트: jdrusso/PyMap
class MapInput(QtGui.QWidget):
    
    def __init__(self):
        super(MapInput, self).__init__()
        
        self.initUI()
        
    def initUI(self):

        self.countries = []
        self.existingChecks = []
        
        self.K = Kartograph()
        
        self.CountryInput = QtGui.QLineEdit(self)
        
        #self.CountryList = QtGui.QTextEdit(self)
        #self.CountryList.setReadOnly(True)
        
        self.AddButton = QtGui.QPushButton("Add", self)
        self.AddButton.clicked.connect(self.buttonClicked)
        
        self.GenButton = QtGui.QPushButton('Generate', self)
        self.GenButton.clicked.connect(self.generateClicked)
        
        self.DispButton = QtGui.QPushButton('Display', self)
        self.DispButton.clicked.connect(self.displayClicked)
        
        self.statusBar = QtGui.QStatusBar(self)
        
        self.br = QtSvg.QGraphicsSvgItem("world.svg").boundingRect()
        self.scene = QtGui.QGraphicsScene()
        self.view = QtGui.QGraphicsView(self.scene)
        self.SvgItem = QtSvg.QGraphicsSvgItem("world.svg").boundingRect()
        self.webview = QGraphicsWebView()
        self.webview.load(QtCore.QUrl("world.svg"))
        self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
        self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
        self.webview.resize(self.br.width(), self.br.height())
        self.scene.addItem(self.webview)
        self.view.resize(self.br.width()+10, self.br.height()+10)
        
        
        self.grid = QtGui.QGridLayout()
        self.grid.setSpacing(10)
        
        self.bottomCheck = 4
        
        self.grid.addWidget(self.AddButton, 1, 1)
        self.grid.addWidget(self.GenButton, 2, 1)
        self.grid.addWidget(self.DispButton, 3, 1)
        #grid.addWidget(self.CountryList, 4, 1)
        self.grid.addWidget(self.CountryInput, 1, 2)
        self.grid.addWidget(self.statusBar, 36, 0, 1, 3, QtCore.Qt.AlignBottom)
        self.grid.addWidget(self.view, 2, 2, 34, 50)
        
        self.setLayout(self.grid)
        
        #self.center()
        self.setWindowTitle('Map Display - Width ' + str(self.br.width()) + ', Height ' + str(self.br.height()))
        
        self.generateClicked()
        self.displayClicked()
        
        self.show()
        
        
    def buttonClicked(self):
        
        country = self.CountryInput.text()
        
        #add a check for if countries contains country
        #if not (self.countries.contains(country)):
        
        self.countries.append(country)
        
        self.generateClicked()
        
        self.displayClicked()
        
        self.CountryInput.setText('')
        
        self.countries = [c for c in self.countries if not c == '']
        
    def generateClicked(self):
    
        self.generateMap(self.countries)
        #self.updateSB("Map generated.")
        self.statusBar.showMessage("Map generated.")
        
    def displayClicked(self):
        
        #add an SVG object to the main window, make this re-render that
        
        self.statusBar.showMessage("Displaying, please wait...")
        
        css = open('world2.css').read()
        cfg = options.read_map_config(open('world.json'))
        
        self.K.generate(cfg, outfile='world.svg', stylesheet=css, preview = False)
        
        self.webview.load(QtCore.QUrl("world.svg"))
        
        self.statusBar.showMessage("Map Displayed.")
        
        
        if self.CountryInput.text() and not self.CountryInput.text() in self.existingChecks:
            tempWidget = QtGui.QCheckBox(self.CountryInput.text(), self)
            tempWidget.toggle()
            tempWidget.stateChanged.connect(self.toggleDisplay)
            self.grid.addWidget(tempWidget, self.bottomCheck, 1)
            self.bottomCheck += 1
            self.existingChecks.append(self.CountryInput.text())
        
        self.updateCountryText()
        
    def generateMap(self, countrylist):
        
        self.generateCSS(countrylist)
    
    def generateCSS(self, countrylist):
    
        x = 0
        css = open('world2.css', 'w')
        #print "css opened"    
        css.write('#world {\n    fill: #f5f3f2;\n},\n')
        css.write('#countries {\n    fill: #f5f3f2;\n    stroke: #882222;\n    stroke-width: 0.5px;\n    stroke-opacity: 0.4;\n}')

        for c in countrylist:
            countryString = ',\n#countries[name=%s]{\n    fill: #ff0000;\n}' % c
            css.write(countryString)
            #print c
            #print x
            x+=x
    
        css.close()
        
    def toggleDisplay(self):
        senderText = self.sender().text()
        print self.sender().isChecked()
        if not self.sender().isChecked():
            print self.sender().text()
            self.countries = [c for c in self.countries if not c == self.sender().text()]
            print self.countries
        if self.sender().isChecked():
            self.countries.append(self.sender().text())
            print self.countries
            
        self.buttonClicked()
        
    def updateCountryText(self):
    
        CountryList = self.countries
        displayString = QtCore.QString('')
        
        for country in CountryList:
        
            displayString.append(country)
            displayString.append('\n')
class ARPAP_SpatialReportDialogChart(QtGui.QDialog, FORM_CLASS):

    webview = None
    chartTypes = dict()
    algorithm = None
    reslayer = list()
    modelCategory = None
    modelValue = None
    validation = None
    chartGenerated = False
    mapChartType = {'bar':bar,'pie':pie}
    
    def __init__(self, parent=None):
        super(ARPAP_SpatialReportDialogChart, self).__init__(parent)
        self.parent = parent
        self.algorithm = parent.algorithm
        self.reslayer = parent.reslayer
        self.validation = ValidationInputdata(self,self.tr)
        self.setupUi(self)
        self.manageGui()
    
    
        
        
    def manageGui(self):
        self.chartGeneratorButton.setIcon(QtGui.QIcon(':/plugins/ARPAP_SpatialReport/icons/histogram.png'))
        self.statisticsGeneratorButton.setIcon(QtGui.QIcon(':/plugins/ARPAP_SpatialReport/icons/mActionOpenTable.png'))
        self.savePngFile.setIcon(QtGui.QIcon(':/plugins/ARPAP_SpatialReport/icons/mActionFileSave.png'))
        self.saveCSVFile.setIcon(QtGui.QIcon(':/plugins/ARPAP_SpatialReport/icons/mActionFileSave.png'))
        QObject.connect(self.chartGeneratorButton, SIGNAL('clicked()'),self.generateChart)
        QObject.connect(self.statisticsGeneratorButton, SIGNAL('clicked()'),self.generateStatistics)
        QObject.connect(self.savePngFile, SIGNAL('clicked()'),self.savepng)
        QObject.connect(self.saveCSVFile, SIGNAL('clicked()'),self.saveCSV)
        self.populateChartTypesCombo()
        self.populateCombosField()
        #manage resizeEvent QWebview
        def onResizeWebview(e):
            if self.chartGenerated:
                self.generateChart()
        self.graphicsView.resizeEvent = onResizeWebview 
        
    def populateChartTypesCombo(self):
        self.chartTypes = {
                           'bar':self.tr('Bar (occurrences)'),
                           'pie':self.tr('Pie (distribution)'),
                           }
        for type in self.chartTypes.keys():
            self.selectChartType.addItem(self.chartTypes[type],type)
            
    def getChartType(self):
        return self.selectChartType.itemData(self.selectChartType.currentIndex())
    
    def getSelectedListViewItem(self,listViewName):
        
        model_index = getattr(self,listViewName.lower()+'FieldListView').currentIndex()
        if model_index.row() != -1:
            return getattr(self,'model'+listViewName.capitalize()).itemFromIndex(model_index)

    def populateCombosField(self):
        layer = self.reslayer[0]
        #populate category listview
        self.modelCategory = QtGui.QStandardItemModel(self.categoryFieldListView)
        self.modelValue = QtGui.QStandardItemModel(self.valueFieldListView) 
        self.categoryFieldListView.setModel(self.modelCategory)
        self.valueFieldListView.setModel(self.modelValue)
        for field in layer.pendingFields():
            itemCategory = QtGui.QStandardItem(self.parent.formatFieldToString(field))
            itemCategory.setData(field)
            itemValue = QtGui.QStandardItem(self.parent.formatFieldToString(field))
            itemValue.setData(field)
            self.modelCategory.appendRow(itemCategory)
            self.modelValue.appendRow(itemValue)

    def _purificateValues(self,value):
        if type(value) == QDate:
            value = value.toString()
        elif type(value) == QPyNullVariant:
            value = None
        return value

    def generateChart(self):
        scene = QtGui.QGraphicsScene()
        self.graphicsView.setScene(scene)
        
        #select data adn chart type
        chartType = self.getChartType()
        if self.validation.validateChart(chartType):
            chart = self.mapChartType[chartType]()
            
             
            self.webview = QGraphicsWebView()
            self.webview.resize(self.graphicsView.width()-20,self.graphicsView.height()-20)
            path = os.path.dirname(__file__)+'/js/'
            chartData = getattr(self,chartType + 'ChartData' )()
            chart.setData(chartData)
            self.webview.setHtml(chart.getHTML(),baseUrl=QUrl().fromLocalFile(path))
            self.webview.setFlags(QtGui.QGraphicsItem.ItemClipsToShape)
            self.webview.setCacheMode(QtGui.QGraphicsItem.NoCache)
            frame = self.webview.page().mainFrame()
            frame.setScrollBarPolicy(Qt.Vertical,Qt.ScrollBarAlwaysOff)
            frame.setScrollBarPolicy(Qt.Horizontal,Qt.ScrollBarAlwaysOff)        
            scene.addItem(self.webview)
            self.graphicsView.show()
            self.savePngFile.setEnabled(True)
            self.chartGenerated = True
        else:
            self.showValidateErrors()
        
    def barChartData(self):
        categoryItem = self.getSelectedListViewItem('category')
        layer = self.reslayer[0]
        features = layer.getFeatures()
        occourences = dict()
        for f in features:
            value = self._purificateValues(f.attribute(categoryItem.data().name()))
            if value not in occourences:
                occourences[value] = 0
            occourences[value] += 1 
            
        chartData = {'values':[{'label':k,'value':occourences[k]} for k in occourences.keys()]}    
        return [chartData]
    
    def pieChartData(self):
        categoryItem = self.getSelectedListViewItem('category')
        valueItem = self.getSelectedListViewItem('value')
        layer = self.reslayer[0]
        features = layer.getFeatures()
        occourences = dict()
        totValue = 0
        for f in features:
            key = f.attribute(categoryItem.data().name())
            if not key:
                key = self.tr('Unknown')
            value = self._purificateValues(f.attribute(valueItem.data().name()))
            if key not in occourences:
                occourences[key] = 0
            if not value:
                value = 0
            occourences[key] += value
            totValue += value
            
        chartData = [{'key':k,'y':float(float(occourences[k])/float(totValue))} for k in occourences.keys()] 
        return chartData
    
    def generateStatistics(self):
        categoryItem = self.getSelectedListViewItem('category')
        valueItem = self.getSelectedListViewItem('value')
        layer = self.reslayer[0]
        features = layer.getFeatures()
        occourences = dict()
        for f in features:
            key = self._purificateValues(f.attribute(categoryItem.data().name()))
            if not key:
                key = self.tr('Unknown')
            value = self._purificateValues(f.attribute(valueItem.data().name()))
            if key not in occourences:
                occourences[key] = list()
            if not value:
                value = 0
            occourences[key].append(value)
        # statistics calcs
        self.statistics = dict()
        model = QtGui.QStandardItemModel(self.statisticsTableView)
        self.statisticsTableView.setModel(model)
        c = 0
        self.headersFieldsTableMethods = {
                                     self.tr('Sum'):sum,
                                     self.tr('Min'):min,
                                     self.tr('Max'):max,
                                     self.tr('Median'):numpy.median,
                                     self.tr('Mean'):numpy.mean,
                                     self.tr('Standard deviation'):numpy.std
                                     }
        print occourences
        for columnName in self.headersFieldsTableMethods:
            model.setHorizontalHeaderItem(self.headersFieldsTableMethods.keys().index(columnName),QtGui.QStandardItem(columnName))
        for key in occourences:
            if key not in self.statistics:
                self.statistics[key] = dict()
            rowToAppend = list()
            for func in self.headersFieldsTableMethods:
                self.statistics[key][func] = str(self.headersFieldsTableMethods[func](occourences[key]))
                rowToAppend.append(QtGui.QStandardItem(self.statistics[key][func]))
            model.appendRow(rowToAppend)
            model.setVerticalHeaderItem(c,QtGui.QStandardItem(str(key)))
            c += 1
        self.saveCSVFile.setEnabled(True)
    
    def sum(self,data):
        return sum(data)
    def min(self,data):
        return min(data)
    def max(self,data):
        return max(data)
        
    def savepng(self):
        dialog = QtGui.QFileDialog()                                              
        dialog.setAcceptMode(1)
        dialog.setDefaultSuffix("png")
        dialog.setNameFilters(["PNG files (*.png)", "All files (*)"])
        if dialog.exec_() == 0:                                            
            return
        pathFileToSave = dialog.selectedFiles()[0]
        p = QtGui.QPixmap.grabWidget(self.graphicsView)
        res = p.save(pathFileToSave)
        
    def saveCSV(self):
        dialog = QtGui.QFileDialog()                                              
        dialog.setAcceptMode(1)
        dialog.setDefaultSuffix("csv")
        dialog.setNameFilters(["CSV files (*.csv)", "All files (*)"])
        if dialog.exec_() == 0:                                             
            return
        pathFileToSave = dialog.selectedFiles()[0]
        fileCSV = open(pathFileToSave, 'wb')
        compilatorCSV = csv.writer( fileCSV, delimiter=';' )
        header = ['']
        header.extend(self.headersFieldsTableMethods.keys())
        compilatorCSV.writerow(header)
        for i in self.statistics:   
            row = [i]
            dataRow = [x.encode('utf-8') for x in self.statistics[i].values()]   
            row.extend(dataRow)                     
            compilatorCSV.writerow(row)
        fileCSV.close()
        
    def showValidateErrors(self):
        QtGui.QMessageBox.warning( self, self.tr("ARPA Spatial Report"), self.tr( "Validation error:\n" ) + ';\n'.join(self.validation.getErrors()) )

        
        

        
    
    
   
        
            
    
        

        
예제 #20
0
class CamModule:
	def __init__(self):
		self.name = "Kamere"
		#Cam urls
		self.camUrls = {u"Ribčev Laz (v živo)": "http://firma.sportnet.si:8080/dvs2000/r1.jpg",\
						u"Ribčev Laz": "http://www.bohinj.si/cam/slika3.jpg",\
						u"Vogel - 1" : "http://www.snezni-telefon.si/Images/Kamere/6_a.jpg",\
						u"Vogel - 2" : "http://www.snezni-telefon.si/Images/Kamere/6_b.jpg",\
						u"Vogel - 3" : "http://www.snezni-telefon.si/Images/Kamere/6_c.jpg",\
						u"Vogel - 4" : "http://www.snezni-telefon.si/Images/Kamere/6_d.jpg",\
						u"Bohinjska Češnjica" : "http://www2.arnes.si/~smisma1/canon.jpg",\
						u"Bohinjska Bistrica" : "http://www.drsc.si/kamere/kamslike/bohinjska/slike/boh1_0001.jpg",\
						u"Orožnova koča": "http://www.bohinj.si/cam/lisc/slika1.jpg"}

		self.camSizes ={u"Ribčev Laz (v živo)": "352x228", \
						u"Ribčev Laz": "2048x1536",\
						u"Vogel - 1" : "1280x1024",\
						u"Vogel - 2" : "640x480",\
						u"Vogel - 3" : "1280x1024",\
						u"Vogel - 4" : "640x480",\
						u"Bohinjska Češnjica" : "800x600",\
						u"Bohinjska Bistrica" : "352x228",\
						u"Orožnova koča": "1280x1024"}
						
		self.updateTimer = QTimer()
		self.updateTimer.timeout.connect(self.update)
		
	
	def makeLayout(self):
		self.layout = QGraphicsLinearLayout(Qt.Vertical)
		self.topCamLayout = QGraphicsLinearLayout(Qt.Horizontal)
		
		# Cam layout
		self.camRefreshButton = Plasma.IconWidget()
		self.camRefreshButton.setIcon("view-refresh")
		self.camRefreshButton.clicked.connect(self.update)
		
		self.camTimeLabel = Plasma.Label()
		self.camTimeLabel.setText(u"ob")

		self.camEnlargeButton = Plasma.IconWidget()
		self.camEnlargeButton.setIcon("zoom-in")
		self.camEnlargeButton.clicked.connect(self.showFullCamWidget)

		self.camSelectorCombo = Plasma.ComboBox()
		for source in sorted(self.camUrls.keys()):
			self.camSelectorCombo.addItem(source)
		self.camSelectorCombo.setMinimumWidth(125)
		self.camSelectorCombo.textChanged.connect(self.camChanged)

		self.camView = QGraphicsWebView()
		self.camView.setEnabled(False)

		self.camTimeDataLabel = Plasma.Label()

		self.camUpdateTimeSelector = UpdateTimeSelector()
		self.camUpdateTimeSelector.setDefaultTime(30)
		self.camUpdateTimeSelector.setDefaultInterval('min')
		self.camUpdateTimeSelector.updateTimeSpin.valueChanged.connect(self.camTimeChanged)
		self.camUpdateTimeSelector.updateCheckBox.toggled.connect(self.camTimerToggle)

		self.topCamLayout.addItem(self.camSelectorCombo)
		self.topCamLayout.addItem(self.camTimeLabel)
		self.topCamLayout.addItem(self.camTimeDataLabel)
		self.topCamLayout.addStretch()
		self.topCamLayout.addItem(self.camEnlargeButton)
		self.topCamLayout.addItem(self.camRefreshButton)

		self.layout.addItem(self.topCamLayout)
		self.layout.addItem(self.camView)
		self.layout.addItem(self.camUpdateTimeSelector.layout)
		self.layout.itemAt(0).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
		self.layout.itemAt(2).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
	
	def update(self, text=None):
		try:
			urllib.urlopen('http://www.google.com', timeout=2)
		except:
			self.offlineMode()
			return
		if not self.camUpdateTimeSelector.updateCheckBox.isChecked():
			self.updateTimer.stop()
		self.camChanged(self.camSelectorCombo.text())
		self.setCamTimeLabel()
		
	def offlineMode(self):
		self.camView.setUrl(QUrl("weather-none-available.png"))
		self.camTimeDataLabel.setText(" ni na voljo.")
		
	def setCamTimeLabel(self):
		hour = time.localtime().tm_hour if not time.localtime().tm_hour in range(10) else '0' + str(time.localtime().tm_hour)
		minute = time.localtime().tm_min if not time.localtime().tm_min in range(10) else '0' + str(time.localtime().tm_min)
		second = time.localtime().tm_sec if not time.localtime().tm_sec in range(10) else '0' + str(time.localtime().tm_sec)
		self.camTimeDataLabel.setText(u'<b>%s:%s:%s</b>' % (str(hour), str(minute), str(second)) )
    
	def camTimerToggle(self, toggled):
		if toggled:
			multiplier = 1
			if self.camUpdateTimeSelector.getInterval() == 'min':
				multiplier = 60
			if self.camUpdateTimeSelector.getInterval() == 'h':
				multiplier = 60 * 60
			self.updateTimer.start(self.camUpdateTimeSelector.getTime() * 1000 * multiplier)
			self.update()
		else:
			self.updateTimer.stop()
	
	def camChanged(self, text):
		self.camView.setUrl( QUrl( self.camUrls[unicode(text)] ) )
		self.setCamTimeLabel()
		
	def camTimeChanged(self, value):
		if self.camUpdateTimeSelector.isChecked():
			self.updateTimer.stop()
		self.camTimerToggle(self.camUpdateTimeSelector.isChecked())
	
	def showFullCamWidget(self):
		fullcamwidget = FullCamWidget()
		size = self.camSizes[unicode(self.camSelectorCombo.text())]
		size = [ int(i) for i in size.split('x')]
		if size[0] < 640 and size[1] < 480:
			fullcamwidget.show(self.camView.url(), size[0] + 25, size[1] + 125)
		else:
			fullcamwidget.show(self.camView.url(), 645, 505)
예제 #21
0
class FlowModule:
	def __init__(self):
		self.name = "Pretok"
		self.updateTimer = QTimer()
		self.updateTimer.timeout.connect(self.update)
	
	def makeLayout(self):
		self.layout = QGraphicsLinearLayout(Qt.Vertical)
		self.flowComboLayout = QGraphicsLinearLayout(Qt.Horizontal)
		self.flowLabelLayout = QGraphicsGridLayout()
		
		#Flow Layout
		self.flowData = SvJanez()
		self.flowView = QGraphicsWebView()
		self.flowView.setUrl( QUrl(self.flowData.flowImageUrl) )
		self.flowView.setEnabled(False)

		self.flowSelectorCombo = Plasma.ComboBox()
		self.flowSelectorCombo.addItem(u"Sveti Janez")
		self.flowSelectorCombo.addItem(u"Soteska")
		self.flowSelectorCombo.setMinimumWidth(125)
		self.flowSelectorCombo.textChanged.connect(self.flowSourceChanged)

		self.flowRefresh = Plasma.IconWidget()
		self.flowRefresh.setIcon("view-refresh")
		self.flowRefresh.clicked.connect(self.update)

		self.flowEnlargeButton = Plasma.IconWidget()
		self.flowEnlargeButton.setIcon("zoom-in")
		self.flowEnlargeButton.clicked.connect(self.showFullFlowWidget)

		self.flowLabel = Plasma.Label()
		self.flowLabel.setText(u"<b>Pretok:</b> ")
		self.flowDataLabel = Plasma.Label()
		self.flowLevelLabel = Plasma.Label()
		self.flowLevelLabel.setText(u"<b>Višina:</b> ")
		self.flowLevelDataLabel = Plasma.Label()
		self.flowTempLabel = Plasma.Label()
		self.flowTempLabel.setText(u"<b>Temperatura:</b> ")
		self.flowTempDataLabel = Plasma.Label()

		self.flowLabelLayout.addItem(self.flowLevelLabel,0,0)
		self.flowLabelLayout.addItem(self.flowLevelDataLabel,0,1)
		self.flowLabelLayout.addItem(self.flowLabel,1,0)
		self.flowLabelLayout.addItem(self.flowDataLabel,1,1)
		self.flowLabelLayout.addItem(self.flowTempLabel,2,0)
		self.flowLabelLayout.addItem(self.flowTempDataLabel,2,1)
		
		self.flowUpdateTimeSelector = UpdateTimeSelector()
		self.flowUpdateTimeSelector.setDefaultTime(4)
		self.flowUpdateTimeSelector.setDefaultInterval('h')
		self.flowUpdateTimeSelector.updateTimeSpin.valueChanged.connect(self.flowTimeChanged)
		self.flowUpdateTimeSelector.updateCheckBox.toggled.connect(self.flowTimerToggle)
		
		
		self.flowComboLayout.addItem(self.flowSelectorCombo)
		self.flowComboLayout.addStretch()
		self.flowComboLayout.addItem(self.flowEnlargeButton)
		self.flowComboLayout.addItem(self.flowRefresh)
		self.layout.addItem(self.flowComboLayout)
		self.layout.addItem(self.flowView)
		self.layout.addItem(self.flowLabelLayout)
		self.layout.addStretch()
		self.layout.addItem(self.flowUpdateTimeSelector.layout)
		self.layout.itemAt(0).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
		self.layout.itemAt(2).setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed, QSizePolicy.DefaultType)
	
	def flowTimerToggle(self, toggled):
		if toggled:
			multiplier = 1
			if self.flowUpdateTimeSelector.getInterval() == 'min':
				multiplier = 60
			if self.flowUpdateTimeSelector.getInterval() == 'h':
				multiplier = 60 * 60
			self.updateTimer.start(self.flowUpdateTimeSelector.getTime() * 1000 * multiplier)
			self.update()
		else:
			self.updateTimer.stop()
	
	def flowTimeChanged(self, value):
		if self.flowUpdateTimeSelector.isChecked():
			self.updateTimer.stop()
		self.flowTimerToggle(self.flowUpdateTimeSelector.isChecked())
		
	def flowSourceChanged(self, text):
		if text == "Sveti Janez":
			self.flowData = SvJanez()
		else:
			self.flowData = Soteska()
		self.flowView.setUrl(QUrl(self.flowData.flowImageUrl))
		self.updateFlowLabels()
	
	def updateFlowImage(self):
		self.flowSourceChanged(self.flowSelectorCombo.text())
	
	def updateFlowLabels(self):
		self.flowData.fetchData()
		self.flowDataLabel.setText(u"%s %s" % (self.flowData.currentFlow, u' m3/s'))
		self.flowTempDataLabel.setText(u"%s %s" % (self.flowData.temperature , u' °C'))
		self.flowLevelDataLabel.setText(u"%s %s" % (self.flowData.waterLevel , u' cm'))
	
	def update(self):
		try:
			urllib.urlopen('http://www.google.com', timeout=2)
		except:
			self.offlineMode()
			return
		self.updateFlowLabels()
		self.updateFlowImage()
		
	def offlineMode(self):
		self.flowView.setUrl(QUrl("weather-none-available.png"))
		self.flowDataLabel.setText(u"N/A")
		self.flowTempDataLabel.setText(u"N/A")
		self.flowLevelDataLabel.setText(u"N/A")
	
	def showFullFlowWidget(self):
		fullcamwidget = FullCamWidget()
		fullcamwidget.show(self.flowView.url(), 840, 400)
예제 #22
0
 def paint(self, painter, option, widget):
     #from PyQt4.QtGui import QColor
     #painter.setPen(QColor(Qt.red))
     #painter.drawRoundedRect(self.boundingRect(), 5, 5)
     QGraphicsWebView.paint(self, painter, option, widget)