class ImageView(QWidget, Script): def __init__(self): Script.__init__(self, "viewerimage") self.type = "imageview" self.icon = None self.vfs = vfs.vfs() self.ft = FILETYPE() self.reg_viewer = re.compile(".*(JPEG|JPG|jpg|jpeg|GIF|gif|bmp|BMP|png|PNG|pbm|PBM|pgm|PGM|ppm|PPM|xpm|XPM|xbm|XBM).*", re.IGNORECASE) self.loadedImage = LoadedImage() self.sceneWidth = 0 #self.sorter = SortImages() def start(self, args): self.node = args.get_node("file") self.curnode = self.node #self.parent = self.node.parent #self.sorter.setFolder(self.parent) #self.sorter.start() #self.getImage() def createMenuItems(self): self.l90button = QRotateButton(-90, ":rotate-left.png") self.r90button = QRotateButton(90, ":rotate-right.png") self.rotate180button = QRotateButton(180, ":rotate-180.png") self.zoomin = QZoomButton(float(1.25), ":zoom-in.png") self.zoomout = QZoomButton(float(0.8), ":zoom-out.png") self.fitbest = QPushButton("fitbest") #self.previous = QPushButton("previous") #self.next = QPushButton("next") self.connect(self.l90button, SIGNAL("clicked"), self.rotate) self.connect(self.r90button, SIGNAL("clicked"), self.rotate) self.connect(self.rotate180button, SIGNAL("clicked"), self.rotate) self.connect(self.zoomin, SIGNAL("zoomed"), self.zoom) self.connect(self.zoomout, SIGNAL("zoomed"), self.zoom) self.connect(self.fitbest, SIGNAL("clicked()"), self.fitbestgeom) #self.connect(self.previous, SIGNAL("clicked()"), self.setPreviousImage) #self.connect(self.next, SIGNAL("clicked()"), self.setNextImage) def drawMenu(self): self.hbox = QHBoxLayout() self.setLayout(self.vbox) self.hbox.addWidget(self.l90button) self.hbox.addWidget(self.r90button) self.hbox.addWidget(self.rotate180button) self.hbox.addWidget(self.zoomin) self.hbox.addWidget(self.zoomout) #self.hbox.addWidget(self.previous) #self.hbox.addWidget(self.next) self.hbox.addWidget(self.fitbest) self.vbox.addLayout(self.hbox) #def getIdx(self): # idx = 0 # res = -1 # for node in self.parent.next: # if node.name == self.node.name: # res = idx # idx += 1 # return res #type: 0 = forward, 1 = backward #def getImage(self, type=1): # pass #idx = self.parent.next.(self.curnode) #print nodes #for node in self.parent.next[self.idx:]: # type = getImageType(node) # if type != None: #self.setImage() #def setPreviousImage(self): # if self.idx == 0: # self.idx = len(self.parent.next) # self.node = self.parent.next[self.idx] # else: # self.idx -= 1 # self.node = self.parent.next[self.idx] # self.setImage() #def setNextImage(self): # pass def setImage(self): if self.node.attr.size != 0: map = self.node.attr.smap try: #XXX temporary patch for windows magic f = self.node.attr.smap["type"] except IndexError: #XXX temporary patch for windows magic self.ft.filetype(node) f = self.node.attr.smap["type"] res = self.reg_viewer.match(f) if res != None: type = f[:f.find(" ")] self.loadedImage.load(self.node, type) else: self.loadedImage.notSupported() #not supported format #self.loadedImage.notSupported() def g_display(self): QWidget.__init__(self, None) self.factor = 1 self.vbox = QVBoxLayout() self.setLayout(self.vbox) self.scrollArea = QScrollArea() self.scrollArea.setWidget(self.loadedImage) self.scrollArea.setAlignment(Qt.AlignCenter) self.vbox.addWidget(self.scrollArea) self.createMenuItems() self.drawMenu() self.setImage() def zoom(self, zoomer): self.factor *= zoomer self.loadedImage.resize(zoomer) if self.factor > 3.33: self.zoomin.setEnabled(False) elif self.factor < 0.33: self.zoomout.setEnabled(False) else: self.zoomin.setEnabled(True) self.zoomout.setEnabled(True) def fitbestgeom(self): self.factor = 1 self.loadedImage.adjust(self.sceneWidth) self.zoomin.setEnabled(True) self.zoomout.setEnabled(True) def rotate(self, angle): self.loadedImage.rotate(angle) def updateWidget(self): self.sceneWidth = self.scrollArea.geometry().width() self.loadedImage.adjust(self.sceneWidth) def resizeEvent(self, e): self.sceneWidth = self.scrollArea.geometry().width() self.loadedImage.adjust(self.sceneWidth)