def __initUI__(self): """ @summary: Initialize UI of dialog. """ fMain = gtk.Frame() lMainFrame = gtk.Label() lMainFrame.set_use_markup(True) lMainFrame.set_text(self.__trans__("Orientations")) fMain.set_label_widget(lMainFrame) aMainFrame = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) aMainFrame.set_padding(0, 0, 12, 0) self.__chkVertical__ = gtk.CheckButton(label=self.__trans__("Vertical")) self.__chkVertical__.set_name("__chkVertical__") self.__chkVertical__.set_active(False) self.__chkVertical__.connect('toggled', self.__flipChanged__) self.__chkHorizontal__ = gtk.CheckButton(label=self.__trans__("Horizontal")) self.__chkHorizontal__.set_name("__chkHorizontal__") self.__chkHorizontal__.set_active(False) self.__chkHorizontal__.connect('toggled', self.__flipChanged__) vBoxFrame = gtk.VBox() vBoxFrame.pack_start(self.__chkVertical__, False, False) vBoxFrame.pack_start(self.__chkHorizontal__, False, False) aMainFrame.add(vBoxFrame) fMain.add(aMainFrame) self.__iPreview__ = ImagePreview() hBox = gtk.HBox() hBox.set_spacing(2) hBox.pack_start(self.__iPreview__.getControl(), True, True) hBox.pack_start(fMain, True, True) self.get_child().pack_start(hBox, True, True) hBox.show_all()
class RotateDialog(gtk.Dialog): """ @summary: Class that manage rotate dialog. """ __DEFAULT_WINDOW_WIDTH__ = 500 __DEFAULT_WINDOW_HEIGHT__ = 350 def __init__(self, callback=None, parent=None): """ @summary: Create rotation dialog. @param callback: Callback that it will do after close dialog. @param parent: GtkWindow parent. """ super(RotateDialog, self).__init__() super(RotateDialog, self).set_title(self.__trans__("Rotate Images")) super(RotateDialog, self).set_flags(gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) super(RotateDialog, self).add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK) super(RotateDialog, self).set_transient_for(parent) if parent != None: super(RotateDialog, self).set_position(gtk.WIN_POS_CENTER_ON_PARENT) else: super(RotateDialog, self).set_position(gtk.WIN_POS_CENTER) # Add signals super(RotateDialog, self).connect("response", self.__closeEvent__) super(RotateDialog, self).set_size_request(self.__DEFAULT_WINDOW_WIDTH__, self.__DEFAULT_WINDOW_HEIGHT__) self.__initUI__() # Set callback that will be executing when the dialog closes with # accept response self.__callback__ = callback self.__img__ = None self.__item__ = None def __trans__(self, msg): """ @summary: Translate msg. @param msg: str within message. @return: str translated. """ return gettext.translation( RotateOperation.camimgplugin.camimgpluginName, __LOCALE_FOLDER__, languages=[__LANGKEY__], fallback=True ).gettext(msg) def __initUI__(self): """ @summary: Initialize UI of dialog. """ fMain = gtk.Frame() lMainFrame = gtk.Label() lMainFrame.set_use_markup(True) lMainFrame.set_text(self.__trans__("Select one option")) fMain.set_label_widget(lMainFrame) aMainFrame = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) aMainFrame.set_padding(0, 0, 12, 0) self.__rb0Degrees__ = gtk.RadioButton(label=self.__trans__("0º")) self.__rb0Degrees__.set_name("__rb0Degrees__") self.__rb0Degrees__.set_active(True) self.__rb0Degrees__.connect("toggled", self.__rotationChanged__) self.__rb90Degrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("90º")) self.__rb90Degrees__.set_name("__rb90Degrees__") self.__rb90Degrees__.set_active(False) self.__rb90Degrees__.connect("toggled", self.__rotationChanged__) self.__rb180Degrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("180º")) self.__rb180Degrees__.set_name("__rb180Degrees__") self.__rb180Degrees__.set_active(False) self.__rb180Degrees__.connect("toggled", self.__rotationChanged__) self.__rb270Degrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("270º")) self.__rb270Degrees__.set_name("__rb270Degrees__") self.__rb270Degrees__.set_active(False) self.__rb270Degrees__.connect("toggled", self.__rotationChanged__) self.__rbCustomDegrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("Custom")) self.__rbCustomDegrees__.set_name("__rbCustomDegrees__") self.__rbCustomDegrees__.set_active(False) self.__rbCustomDegrees__.connect("toggled", self.__customToggledEvent__) self.__spCustom__ = gtk.SpinButton(climb_rate=1.00) self.__spCustom__.set_name("__spCustom__") self.__spCustom__.set_increments(1.00, 15.00) self.__spCustom__.set_range(0.00, 360.00) self.__spCustom__.set_numeric(True) self.__spCustom__.set_editable(True) self.__spCustom__.set_update_policy(gtk.UPDATE_IF_VALID) self.__spCustom__.set_value(0.00) self.__spCustom__.set_sensitive(False) self.__bUpdatePreview__ = gtk.Button(stock=gtk.STOCK_REFRESH) self.__bUpdatePreview__.set_name("__bUpdatePreview__") self.__bUpdatePreview__.connect("clicked", self.__updateImage__) self.__bUpdatePreview__.set_sensitive(False) hBoxCustom = gtk.HBox() hBoxCustom.set_spacing(5) hBoxCustom.pack_start(self.__rbCustomDegrees__, False, True) hBoxCustom.pack_start(self.__spCustom__, False, True) hBoxCustom.pack_start(self.__bUpdatePreview__, False, True) vBoxFrame = gtk.VBox() vBoxFrame.pack_start(self.__rb0Degrees__, False, False) vBoxFrame.pack_start(self.__rb90Degrees__, False, False) vBoxFrame.pack_start(self.__rb180Degrees__, False, False) vBoxFrame.pack_start(self.__rb270Degrees__, False, False) vBoxFrame.pack_start(hBoxCustom, False, True) aMainFrame.add(vBoxFrame) fMain.add(aMainFrame) self.__iPreview__ = ImagePreview() hBox = gtk.HBox() hBox.set_spacing(2) hBox.pack_start(self.__iPreview__.getControl(), True, True) hBox.pack_start(fMain, True, True) self.get_child().pack_start(hBox, True, True) hBox.show_all() def __closeEvent__(self, w, res): """ @summary: Handle response of rotate dialog. @param w: GtkDialog that raise event. @param res: Response associated with the event. """ if res == gtk.RESPONSE_OK: degrees = self.getData() if degrees == -1: FactoryControls.getMessage( self.__trans__("There is not valid degrees selected.\nPlease select correct degrees"), title=self.__trans__("Rotate"), type=gtk.MESSAGE_ERROR, parent=self, ) return gtk.FALSE if self.__callback__ != None: self.__callback__(self, degrees) w.hide() def __customToggledEvent__(self, b): """ @summary: Handle rCustom toggled event. @param b: RadioButton associated with the event. """ self.__spCustom__.set_sensitive(self.__rbCustomDegrees__.get_active()) self.__bUpdatePreview__.set_sensitive(self.__rbCustomDegrees__.get_active()) self.__rotationChanged__(b) def setResponseCallback(self, callback): """ @summary: Sets callback that will call when dialog close. @param callback: Function reference. @note: callback model: callback (dialog: gtk.Dialog, degrees: int) """ self.__callback__ = callback def getData(self): """ @summary: Get data from dialog. @return: Degrees selected. -1 = Error. """ degrees = 0 if self.__rb0Degrees__.get_active(): degrees = 0 elif self.__rb90Degrees__.get_active(): degrees = 90 elif self.__rb180Degrees__.get_active(): degrees = 180 elif self.__rb270Degrees__.get_active(): degrees = 270 elif self.__rbCustomDegrees__.get_active(): degrees = self.__spCustom__.get_value_as_int() else: __log__.warning("There is not a radio button selected.") degrees = -1 return degrees def setData(self, item): """ @summary: Set data to dialog. @param item: Item to edit. """ if not isinstance(item, pycamimg.core.CamItem.CamItem): sMessage = "item must be CamItem" __log__.error(sMessage) raise TypeError(sMessage) degrees = 0 if item != None: op = item.getOperation(Operation.OPERATION) if op != None: degrees = op.getParameter("degrees") self.__setImage__(item) self.__setDataDegrees__(degrees) def __setDataDegrees__(self, rotation): """ @summary: Set data to dialog. @param rotation: Initial degrees """ if not isinstance(rotation, int): sMessage = "Rotation must be integer number" __log__.error(sMessage) raise TypeError(sMessage) while (rotation < 0) and (rotation >= 360): if rotation < 0: rotation += 360 else: rotation -= 360 radio = None if rotation == 0: radio = self.__rb0Degrees__ elif rotation == 90: radio = self.__rb90Degrees__ elif rotation == 180: radio = self.__rb180Degrees__ elif rotation == 270: radio = self.__rb270Degrees__ else: radio = self.__rbCustomDegrees__ self.__spCustom__.set_value(float(rotation)) if radio != None: radio.set_active(True) else: __log__.warning("There is not radiobutton selected.") def __rotationChanged__(self, toggledButton): """ @summary: Attend toggled event of checkbuttons. @param toggledButton: Button that fired event. """ degrees = 0 degrees = self.getData() img = self.__img__.copy() op = Operation.Rotate(degrees=degrees) img = op.preview(img) self.__refreshImage__(img) def __updateImage__(self, b): """ @summary: Attend update button event. @param b: Button that fire the event. """ degrees = self.getData() img = self.__img__.copy() op = Operation.Rotate(degrees=degrees) img = op.preview(img) self.__refreshImage__(img) def __setImage__(self, item): """ @summary: Sets image into image control. @param item: CamItem to set as image. """ im = self.__iPreview__.getImageControl() self.__item__ = item self.__item__.refreshThumbnail(im.getMaxSize()[1]) self.__img__ = self.__item__.doPreview() meta = None self.__refreshImage__(self.__img__) def __refreshImage__(self, img): """ @summary: Refresh image on ImageArea. """ if (img != None) and (self.__item__ != None): meta = ImgMeta(self.__item__.getPath(), image=img) im = self.__iPreview__.getImageControl() if meta != None: pb = meta.getIcon(rescale=100.0, maxHeight=im.getMaxSize()[1]) im.set_from_pixbuf(pb) else: __log__.warning("It could not retrieve metadata from item. %s" % self.__item__.getPath()) else: __log__.debug("Img or Item is None. It can not refresh image.")
def __initUI__(self): """ @summary: Initialize UI of dialog. """ fMain = gtk.Frame() lMainFrame = gtk.Label() lMainFrame.set_use_markup(True) lMainFrame.set_text(self.__trans__("Select one option")) fMain.set_label_widget(lMainFrame) aMainFrame = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) aMainFrame.set_padding(0, 0, 12, 0) self.__rb0Degrees__ = gtk.RadioButton(label=self.__trans__("0º")) self.__rb0Degrees__.set_name("__rb0Degrees__") self.__rb0Degrees__.set_active(True) self.__rb0Degrees__.connect("toggled", self.__rotationChanged__) self.__rb90Degrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("90º")) self.__rb90Degrees__.set_name("__rb90Degrees__") self.__rb90Degrees__.set_active(False) self.__rb90Degrees__.connect("toggled", self.__rotationChanged__) self.__rb180Degrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("180º")) self.__rb180Degrees__.set_name("__rb180Degrees__") self.__rb180Degrees__.set_active(False) self.__rb180Degrees__.connect("toggled", self.__rotationChanged__) self.__rb270Degrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("270º")) self.__rb270Degrees__.set_name("__rb270Degrees__") self.__rb270Degrees__.set_active(False) self.__rb270Degrees__.connect("toggled", self.__rotationChanged__) self.__rbCustomDegrees__ = gtk.RadioButton(group=self.__rb0Degrees__, label=self.__trans__("Custom")) self.__rbCustomDegrees__.set_name("__rbCustomDegrees__") self.__rbCustomDegrees__.set_active(False) self.__rbCustomDegrees__.connect("toggled", self.__customToggledEvent__) self.__spCustom__ = gtk.SpinButton(climb_rate=1.00) self.__spCustom__.set_name("__spCustom__") self.__spCustom__.set_increments(1.00, 15.00) self.__spCustom__.set_range(0.00, 360.00) self.__spCustom__.set_numeric(True) self.__spCustom__.set_editable(True) self.__spCustom__.set_update_policy(gtk.UPDATE_IF_VALID) self.__spCustom__.set_value(0.00) self.__spCustom__.set_sensitive(False) self.__bUpdatePreview__ = gtk.Button(stock=gtk.STOCK_REFRESH) self.__bUpdatePreview__.set_name("__bUpdatePreview__") self.__bUpdatePreview__.connect("clicked", self.__updateImage__) self.__bUpdatePreview__.set_sensitive(False) hBoxCustom = gtk.HBox() hBoxCustom.set_spacing(5) hBoxCustom.pack_start(self.__rbCustomDegrees__, False, True) hBoxCustom.pack_start(self.__spCustom__, False, True) hBoxCustom.pack_start(self.__bUpdatePreview__, False, True) vBoxFrame = gtk.VBox() vBoxFrame.pack_start(self.__rb0Degrees__, False, False) vBoxFrame.pack_start(self.__rb90Degrees__, False, False) vBoxFrame.pack_start(self.__rb180Degrees__, False, False) vBoxFrame.pack_start(self.__rb270Degrees__, False, False) vBoxFrame.pack_start(hBoxCustom, False, True) aMainFrame.add(vBoxFrame) fMain.add(aMainFrame) self.__iPreview__ = ImagePreview() hBox = gtk.HBox() hBox.set_spacing(2) hBox.pack_start(self.__iPreview__.getControl(), True, True) hBox.pack_start(fMain, True, True) self.get_child().pack_start(hBox, True, True) hBox.show_all()
class FlipDialog (gtk.Dialog): """ @summary: Class that manage flip dialog. """ __DEFAULT_WINDOW_WIDTH__ = 500 __DEFAULT_WINDOW_HEIGHT__ = 350 def __init__(self, callback=None, parent=None): """ @summary: Create flip dialog. @param callback: Callback that it will do after close dialog. @param parent: GtkWindow parent. """ super(FlipDialog, self).__init__() super(FlipDialog, self).set_title(self.__trans__("Flip/Mirror Images")) super(FlipDialog, self).set_flags(gtk.DIALOG_MODAL | gtk.DIALOG_DESTROY_WITH_PARENT) super(FlipDialog, self).add_buttons(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OK, gtk.RESPONSE_OK) super(FlipDialog, self).set_transient_for(parent) if (parent != None): super(FlipDialog, self).set_position(gtk.WIN_POS_CENTER_ON_PARENT) else: super(FlipDialog, self).set_position(gtk.WIN_POS_CENTER) # Add signals super(FlipDialog, self).connect("response", self.__closeEvent__) self.__initUI__() super(FlipDialog, self).set_size_request(self.__DEFAULT_WINDOW_WIDTH__, self.__DEFAULT_WINDOW_HEIGHT__) # Set callback that will be executing when the dialog closes with # accept response self.__callback__ = callback self.__img__ = None self.__item__ = None def __trans__(self, msg): """ @summary: Translate msg. @param msg: str within message. @return: str translated. """ return gettext.translation(FlipOperation.camimgplugin.camimgpluginName, __LOCALE_FOLDER__, languages=[__LANGKEY__], fallback=True).gettext(msg) def __initUI__(self): """ @summary: Initialize UI of dialog. """ fMain = gtk.Frame() lMainFrame = gtk.Label() lMainFrame.set_use_markup(True) lMainFrame.set_text(self.__trans__("Orientations")) fMain.set_label_widget(lMainFrame) aMainFrame = gtk.Alignment(xalign=0.5, yalign=0.5, xscale=1.0, yscale=1.0) aMainFrame.set_padding(0, 0, 12, 0) self.__chkVertical__ = gtk.CheckButton(label=self.__trans__("Vertical")) self.__chkVertical__.set_name("__chkVertical__") self.__chkVertical__.set_active(False) self.__chkVertical__.connect('toggled', self.__flipChanged__) self.__chkHorizontal__ = gtk.CheckButton(label=self.__trans__("Horizontal")) self.__chkHorizontal__.set_name("__chkHorizontal__") self.__chkHorizontal__.set_active(False) self.__chkHorizontal__.connect('toggled', self.__flipChanged__) vBoxFrame = gtk.VBox() vBoxFrame.pack_start(self.__chkVertical__, False, False) vBoxFrame.pack_start(self.__chkHorizontal__, False, False) aMainFrame.add(vBoxFrame) fMain.add(aMainFrame) self.__iPreview__ = ImagePreview() hBox = gtk.HBox() hBox.set_spacing(2) hBox.pack_start(self.__iPreview__.getControl(), True, True) hBox.pack_start(fMain, True, True) self.get_child().pack_start(hBox, True, True) hBox.show_all() def __closeEvent__(self, w, res): """ @summary: Handle response of rotate dialog. @param w: GtkDialog that raise event. @param res: Response associated with the event. """ if (res == gtk.RESPONSE_OK): orientation = self.getData() if (self.__callback__ != None): self.__callback__(self, orientation) w.hide() def setResponseCallback(self, callback): """ @summary: Sets callback that will call when dialog close. @param callback: Function reference. @note: callback model: callback (dialog: gtk.Dialog, degrees: int) """ self.__callback__ = callback def getData(self): """ @summary: Get data from dialog. @return: Orienatation selected. """ orientation = Operation.NONE if (self.__chkVertical__.get_active()): orientation += Operation.VERTICAL elif (self.__chkHorizontal__.get_active()): orientation = Operation.HORIZONTAL return orientation def setData(self, item): """ @summary: Set data to dialog. @param item: Item to edit. """ if (not isinstance(item, pycamimg.core.CamItem.CamItem)): sMessage = "Orientation must be CamItem" __log__.error(sMessage) raise TypeError(sMessage) orientation = Operation.NONE if (item != None): op = item.getOperation(Operation.OPERATION) if (op != None): orientation = op.getParameter("orientation") self.__setImage__(item) while ((orientation < Operation.NONE) and (orientation >= Operation.BOTH)): if (orientation < Operation.NONE): orientation += Operation.BOTH else: orientation -= Operation.BOTH if (orientation in (Operation.VERTICAL, Operation.BOTH)): self.__chkVertical__.set_active(True) elif (orientation in (Operation.HORIZONTAL, Operation.BOTH)): self.__chkHorizontal__.set_active(True) else: __log__.debug("There is not check selected.") def __setImage__(self, item): """ @summary: Sets image into image control. @param item: CamItem to set as image. """ im = self.__iPreview__.getImageControl() self.__item__ = item self.__item__.refreshThumbnail(im.getMaxSize()[1]) self.__img__ = self.__item__.doPreview() meta = None self.__refreshImage__(self.__img__) def __flipChanged__(self, toggledButton): """ @summary: Attend toggled event of checkbuttons. @param toggledButton: Button that fired event. """ orientation = Operation.NONE if (self.__chkHorizontal__.get_active()): orientation += Operation.HORIZONTAL if (self.__chkVertical__.get_active()): orientation += Operation.VERTICAL img = self.__img__.copy() op = Operation.Flip(orientation=orientation) img = op.preview(img) self.__refreshImage__(img) def __refreshImage__(self, img): """ @summary: Refresh image on ImageArea. """ if ((img != None) and (self.__item__ != None)): meta = ImgMeta(self.__item__.getPath(), image=img) im = self.__iPreview__.getImageControl() if (meta != None): pb = meta.getIcon(rescale=100.0, maxHeight=im.getMaxSize()[1]) im.set_from_pixbuf(pb) else: __log__.warning("It could not retrieve metadata from item. %s" % self.__item__.getPath()) else: __log__.debug("Img or Item is None. It can not refresh image.")