def __initOperations__(self): """ @summary: Initialize operations TreeView """ self.__opsModel__ = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_FLOAT, gobject.TYPE_FLOAT, gobject.TYPE_FLOAT) __log__.debug("Create new model of treeview for the register") self.__tvOps__.set_model(self.__opsModel__) self.__tvOps__.set_headers_visible(True) self.__tvOps__.set_show_expanders(False) self.__tvOps__.get_selection().set_mode(gtk.SELECTION_NONE) __log__.debug("Sets features of the treeview") # Creates columns of the TreeView of Files columnProcess = FactoryControls.getTreeColumnText(_("Process"), self.__NAME_COLUMN__) self.__tvOps__.append_column(columnProcess) columnProgress = FactoryControls.getTreeColumnProgress(self.__VALUE_COLUMN__) self.__tvOps__.append_column(columnProgress) __log__.debug("Adds columns to treeview")
def getIcon(self, path): """ @summary: Gets an icon from path, matching with its mime. @param path: Path to get icon. @return: Icon of the path. None if it is not gnome or windows platform. """ if (GNOME): return FactoryControls.getPixbufFromStock(self.getIconName(path)) elif (WINDOWS): return FactoryControls.getPixbufFromStock(self.getIconName(path)) return None
def __initUI__(self): """ @summary: Initialize ui. """ self.__btConfig__ = gtk.Button(stock=gtk.STOCK_PREFERENCES) self.__btConfig__.set_sensitive(False) self.__btConfig__.show_all() super(PluginsDialog, self).add_action_widget(self.__btConfig__, self.__RESPONSE_PREFERENCE__) super(PluginsDialog, self).add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) treeview = gtk.TreeView() self.__model__ = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_OBJECT) # self.__model__.set_default_sort_func(lambda *args: -1) __log__.debug("Created model for new project") treeview.set_model(self.__model__) treeview.set_headers_visible(True) treeview.set_headers_clickable(False) treeview.set_rules_hint(True) treeview.set_enable_search(False) treeview.set_fixed_height_mode(False) treeview.set_tooltip_column(self.COLUMN_PLUGIN) treeview.set_show_expanders(False) treeview.get_selection().set_mode(gtk.SELECTION_SINGLE) treeview.set_reorderable(False) treeview.connect_after("cursor-changed", self.__changedRow__) # treeview.connect("cursor-changed", self.__changedRow__) # Creates columns of the TreeView of target files columnPlugin = FactoryControls.getTreeColumnText(_("Plugin"), self.COLUMN_PLUGIN, sortable=True) treeview.append_column(columnPlugin) columnType = FactoryControls.getTreeColumnText(_("Type"), self.COLUMN_TYPE, sortable=True) treeview.append_column(columnType) self.__treeview__ = treeview scroll = gtk.ScrolledWindow() scroll.add(self.__treeview__) vBox = gtk.VBox() vBox.pack_start(scroll, True, True) self.get_child().pack_start(vBox, True, True) vBox.show_all()
def run(self): """ @summary: Show option dialog. it will run this callback before show execute dialog. """ if (len(self.__core__.getItems()) <= 0): FactoryControls.getMessage( _("There aren't items"), title=_("Execute"), parent=self.get_transient_for()) __log__.info("Trying to execute a core without items. Exiting from execute dialog.") return super(ExecuteWindow, self).show_all()
def __initToolbar__(self): """ @summary: Initialize UI of toolbar. """ actionGroupExplorer = gtk.ActionGroup("ActionGroupExplorer") # Create actions actionGroupExplorer.add_actions([("BackExplorerAction", gtk.STOCK_GO_BACK, _("_Back"), None, _("Go back in history"), self.__goBackEvent__), ("ForwardExplorerAction", gtk.STOCK_GO_FORWARD, _("_Forward"), None, _("Go forward in history"), self.__goForwardEvent__), ("UpExplorerAction", gtk.STOCK_GO_UP, _("Up"), None, _("Go up level in explorer"), self.__goUpLevelEvent__), ("HomeExplorerAction", gtk.STOCK_HOME, _("_Home"), None, _("Go Home"), self.__goHomeEvent__)]) actionGroupExplorer.set_translation_domain(pycamimg.gettextName) __log__.debug("There is a xml path. UI Menus and tools will be recovered from path %s" % __XMLUI_FOLDER__) self.__uiManager__ = FactoryControls.getUIManager(os.path.join(__XMLUI_FOLDER__, "Explorer.xml"), None, actionGroupExplorer)[0] self.__toolBar__ = self.__uiManager__.get_widget("/ToolsExplorer") self.__toolBar__.set_style(gtk.TOOLBAR_BOTH_HORIZ) self.__toolBar__.set_tooltips(True) self.__bBack__ = self.__uiManager__.get_widget("/ToolsExplorer/Back") self.__bBack__.set_is_important(True) self.__bForward__ = self.__uiManager__.get_widget("/ToolsExplorer/Forward") self.__bUp__ = self.__uiManager__.get_widget("/ToolsExplorer/Up") self.__bHome__ = self.__uiManager__.get_widget("/ToolsExplorer/Home")
def __runEvent__ (self, b): """ @summary: Do current project. @param b: Button that threw event. """ if (self.__currentTab__ != None): self.__currentTab__.setOrderToCore() exWindow = ExecuteWindow(self.__currentTab__.getCore(), parent=self.__mainWindow__) __log__.debug("Execute window created. %s" % exWindow) exWindow.run() else: FactoryControls.getMessage( _("There isn't current project"), title=_("Execute"), parent=self.__mainWindow__)
def showAbout(self): """ @summary: Show about dialog. """ if (hasattr(self, "__aboutDialog__")): if (self.__aboutDialog__ == None): self.__aboutDialog__ = FactoryControls.getAbout( __VERSION_FILE__, self.__closeAbout__, __COPYING_FILE__, parent=self.__mainWindow__) else: self.__aboutDialog__ = FactoryControls.getAbout( __VERSION_FILE__, __COPYING_FILE__, parent=self.__mainWindow__) self.__aboutDialog__.run()
def __saveAsProjectEvent__ (self, b, raiseError=False): """ @summary: Handle save project action. @param b: Button that threw event. @param raiseError: True to throw an error when occurrs. """ if (self.__currentTab__ == None): __log__.debug("There is not current project") return fileSel = gtk.FileChooserDialog(title=_("Save project"), parent=self.__mainWindow__, action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_SAVE, gtk.RESPONSE_ACCEPT)) fileSel.set_default_response(gtk.RESPONSE_CANCEL) filterCam = gtk.FileFilter() filterCam.set_name(_("PyCamimg file")) filterCam.add_pattern("*%s" % self.PYCAMIMG_FILE_EXTENSION) fileSel.add_filter(filterCam) fileSel.set_modal(True) fileSel.set_position(gtk.WIN_POS_CENTER_ON_PARENT) if (fileSel.run() == gtk.RESPONSE_ACCEPT): filename = fileSel.get_filename() __log__.debug("Save project to %s" % filename) if (not filename.endswith(self.PYCAMIMG_FILE_EXTENSION)): filename = "%s%s" % (filename, self.PYCAMIMG_FILE_EXTENSION) try: if (not self.__currentTab__.getCore().save(path=filename)): raise Exception() except Exception, e: if (raiseError): raise e else: __log__.error("It could not save current project to %s. %s" % (filename, e)) FactoryControls.getMessage(_("An error was occurred when it was saving current project to %s" % filename), type=gtk.MESSAGE_ERROR, title=_("Save project"), parent=self.__mainWindow__) return finally:
def __initUI__(self): """ @summary: Initialize ui. """ treeview = gtk.TreeView() self.__model__ = gtk.ListStore(gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_BOOLEAN) # self.__model__.set_default_sort_func(lambda *args: -1) __log__.debug("Created model for new project") treeview.set_model(self.__model__) treeview.set_headers_visible(True) treeview.set_headers_clickable(False) treeview.set_rules_hint(True) treeview.set_enable_search(False) treeview.set_fixed_height_mode(False) treeview.set_tooltip_column(self.COLUMN_OPERATION) treeview.set_show_expanders(False) treeview.get_selection().set_mode(gtk.SELECTION_SINGLE) treeview.set_reorderable(False) # Creates columns of the TreeView of target files columnOperation = FactoryControls.getTreeColumnText(_("Operation"), self.COLUMN_OPERATION, sortable=False) treeview.append_column(columnOperation) columnParams = FactoryControls.getTreeColumnText(_("Parameters"), self.COLUMN_PARAMETERS, sortable=False) treeview.append_column(columnParams) columnDel = FactoryControls.getTreeColumnToggle(_("Delete"), self.__model__, self.COLUMN_DELETE) treeview.append_column(columnDel) self.__treeview__ = treeview scroll = gtk.ScrolledWindow() scroll.add(self.__treeview__) vBox = gtk.VBox() vBox.pack_start(scroll, True, True) self.get_child().pack_start(vBox, True, True) vBox.show_all()
def __deleteOperationsEvent__ (self, b): """ @summary: Delete operations of an item. @param b: Button that threw event. """ if (self.__currentTab__ == None): __log__.debug("There is not current project") return paths = self.__currentTab__.getSelection() model = self.__currentTab__.getModel() if ((paths == None) or (model == None)): __log__.error("It can not recover tree selection. Set selection at 0.") iNRows = 0 else: iNRows = len(paths) if iNRows > 0: path = paths[0] iter = model.get_iter(path) if (iter != None): file = model.get_value(iter, self.__currentTab__.COLUMN_SOURCE) item = self.__currentTab__.getCore().getItem(file) operationsDialog = OperationsDialog( item, iter, callback=self.__applyDeleteOperationsItemCallback__, parent=self.__mainWindow__) __log__.debug("Operations dialog created. %s" % operationsDialog) operationsDialog.run() del operationsDialog else: __log__.error("It can not recover iter from path %s. Abort open delete operations dialog." % path) FactoryControls.getMessage(_("It can not get item"), title=_("Delete operations"), type=gtk.MESSAGE_ERROR, parent=self.__mainWindow__) else: FactoryControls.getMessage(_("Select one item"), title=_("Delete operations"), parent=self.__mainWindow__)
def __initializeExplorer__(self): """ @summary: Initialize TreeView explorer. Add drives of OS. """ # Make a model for TreeView explorer self.__model__ = gtk.TreeStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING, gobject.TYPE_STRING) __log__.debug("Created model for TreeExplorer.") # Gets home icon iconHome = FactoryControls.getPixbufFromStock(gtk.STOCK_HOME) # Gets drive icon icon = FactoryControls.getPixbufFromStock(gtk.STOCK_HARDDISK) self.__explorer__.set_model(None) # Apply look to TreeView self.__explorer__.set_headers_visible(False) self.__explorer__.set_show_expanders(True) self.__explorer__.get_selection().set_mode(gtk.SELECTION_SINGLE) column = FactoryControls.getTreeColumnTextAndPixbuf(_("Explorer"), self.__NAME_COLUMN__, self.__IMG_COLUMN__) self.__explorer__.append_column(column) __log__.debug("Added columns to TreeExplorer") # Add home node self.addDirectory(self.__HOME_NODE__, os.path.expanduser("~"), iconHome, glock=False) # Gets drives from the OS for sDrive in self.__ioUtils__.getDrives(): if (sDrive != None) and (sDrive != ""): self.addDirectory (sDrive, sDrive, icon, glock=False) __log__.debug("Drives added.") # Set model to explorer TreeView self.__explorer__.set_model(self.__model__)
def __queryQuitEvent__(self, window, event=None): """ @summary: Handle query quit event. @param window: GtkWindow that threw event. """ if (gtk.RESPONSE_YES == FactoryControls.getConfirmMessage(_("Are you sure you want to close PyCamimg?"), title=_("Close PyCamimg"), parent=self.__mainWindow__)): return False else: return True
def __saveProjectEvent__ (self, b): """ @summary: Handle save project action. @param b: Button that threw event. """ if (self.__currentTab__ == None): __log__.debug("There is not current project") return core = self.__currentTab__.getCore() __log__.debug("Saving current project %s" % core.getName()) if (core.isSaved()): __log__.debug("Current project is already saved on %s. Overwriting file." % core.getFilename()) try: core.save() except Exception, e: __log__.error("It could not save current project to %s. %s" % (core.getFilename(), e)) FactoryControls.getMessage(_("An error was occurred when it was saving current project to %s" % core.getFilename()), type=gtk.MESSAGE_ERROR, title=_("Save project"), parent=self.__mainWindow__) return
def __cancelEvent__(self, b): """ @summary: Handle cancel button. @param b: Button that call this function """ if (self.__core__.getState() == STATE_EXEC): if (gtk.RESPONSE_YES == FactoryControls.getConfirmMessage(_("Are you sure you want to cancel project?"), title=_("Cancel project"), parent=self)): self.__cancelThread__() self.__updateOptions__(mode=__MODE_CLOSE__, blockGtk=False) else: __log__.debug("Execution is just finished")
def __queryClose__(self): """ @summary: Query close. """ if (self.__core__.getState() == STATE_EXEC): if (gtk.RESPONSE_YES == FactoryControls.getConfirmMessage(_("Current project is running. Are you sure you want to exit?"), title=_("Close execution project"), parent=self)): return True else: return False return True
def __openProjectEvent__ (self, b): """ @summary: Handle open project action. @param b: Button that threw event. """ fileSel = gtk.FileChooserDialog(title=_("Open project"), parent=self.__mainWindow__, action=gtk.FILE_CHOOSER_ACTION_OPEN, buttons=(gtk.STOCK_CANCEL, gtk.RESPONSE_CANCEL, gtk.STOCK_OPEN, gtk.RESPONSE_ACCEPT)) fileSel.set_default_response(gtk.RESPONSE_CANCEL) filterCam = gtk.FileFilter() filterCam.set_name(_("PyCamimg file")) filterCam.add_pattern("*%s" % self.PYCAMIMG_FILE_EXTENSION) fileSel.add_filter(filterCam) fileSel.set_modal(True) fileSel.set_position(gtk.WIN_POS_CENTER_ON_PARENT) if (fileSel.run() == gtk.RESPONSE_ACCEPT): filename = fileSel.get_filename() __log__.debug("Open project from %s" % filename) if (not filename.endswith(self.PYCAMIMG_FILE_EXTENSION)): filename = "%s%s" % (filename, self.PYCAMIMG_FILE_EXTENSION) try: core = CamCore.load(filename, tempFolder=__TEMP_FOLDER__) except Exception, e: __log__.error("It could not load project from %s. %s" % (filename, e)) FactoryControls.getMessage(_("An error was occurred when it was loading project from %s" % filename), type=gtk.MESSAGE_ERROR, title=_("Open project"), parent=self.__mainWindow__) return finally:
def openPreview (self, b): """ @summary: Open image. @param b: Button that threw event. """ if (self.__currentTab__ == None): __log__.debug("There is not current project") return paths = self.__currentTab__.getSelection() model = self.__currentTab__.getModel() if ((paths == None) or (model == None)): __log__.error("It can not recover tree selection. Set selection at 0.") iNRows = 0 else: iNRows = len(paths) if iNRows > 0: path = paths[0] iter = model.get_iter(path) if (iter != None): file = model.get_value(iter, 1) meta = ImgMeta(file) meta.show() else: __log__.error("It can not recover iter from path %s. Abort preview" % path) FactoryControls.getMessage(_("It can not show image"), title=_("Preview"), type=gtk.MESSAGE_ERROR, parent=self.__mainWindow__) else: FactoryControls.getMessage(_("Select one item"), title=_("Preview"), parent=self.__mainWindow__)
def __handlerDirectoryMonitorEvents__(self, path, operation, type): """ @summary: Handle events from directory monitors. @param path: Path of the event. @param operation: Operation that occurred. @param type: Type of path. Directory or File. """ if (type == DirectoryMonitor.DIRECTORY): if (operation == DirectoryMonitor.ADD): head, dirname = os.path.split(path) iter = self.__getIterFromPath__(head) if (iter != None): icon = FactoryControls.getPixbufFromStock(gtk.STOCK_DIRECTORY) self.addDirectory(dirname, path, icon, iter) elif (operation == DirectoryMonitor.DELETE): iter = self.__getIterFromPath__(path) if (iter != None): self.deleteNode(iter)
def __prepareDirectory__(self, directory, iter, glock=True): """ @summary: Checks if a directory has some directory. In truth case, add a temporal subitem. @param directory: Directory to prepare. @param iter: TreeIter of the directory. @param glock: True to lock gtk-loop. """ sSubDirs = self.__ioUtils__.getDirectories(directory) if (sSubDirs != None) and (len(sSubDirs) > 0): UIUtils.addIter(self.__model__, iter, (FactoryControls.getPixbufFromStock(gtk.STOCK_EXECUTE) , _("Loading..."), self.__TEMP_NODE__ ), glock )
def __loadCore__(self, core): """ @summary: Load core information in treeview. It will be called by a thread. @param core: Core that will be loaded into tab project. """ self.__doPreviewList__ = Configuration().getConfiguration().getboolean("TABPROJECT", "show_image_list") self.__maxHeight__ = Configuration().getConfiguration().getint("TABPROJECT", "max_height_list") self.__rescalePercent__ = Configuration().getConfiguration().getfloat("TABPROJECT", "resize_percent_list") self.__maxHeightImageIconView__ = Configuration().getConfiguration().getint("TABPROJECT", "max_height_imagelist") self.__numberOfColumns__ = Configuration().getConfiguration().getint("TABPROJECT", "number_of_columns_iconview") gtk.gdk.threads_enter() try: self.__iconview__.set_columns(self.__numberOfColumns__) finally: gtk.gdk.threads_leave() UIUtils.clearModelTreeview(self.__model__) # Gets pixbuf file icon = FactoryControls.getPixbufFromStock(gtk.STOCK_FILE) for key, item in core.getItems().iteritems(): item.refreshThumbnail() # Handler to extract metadata metaData = item.getMetadata() # Create a new row newRowData = [icon, item.getPath(), metaData.getDateTimeDigitized(), item.getTarget() , item.getDescription(), icon, False] iterAdd = UIUtils.insertIterAtPathPosition(self.__model__, newRowData, None, position=gtk.TREE_VIEW_DROP_AFTER) __log__.info("File inserted into target treeview. %s" % file) self.updateItemImage(iterAdd, item) self.__core__ = core
def __initToolbar__(self): """ @summary: Initialize toolbar """ actionGroupExecute = gtk.ActionGroup("ActionGroupExecute") # Create actions actionGroupExecute.add_actions([("ExitAction", gtk.STOCK_QUIT, _("Exit"), None, _("Close execute dialog"), self.__closeEvent__), ("ExecuteAction", gtk.STOCK_EXECUTE, _("Execute"), None, _("Execute current project"), self.__executeEvent__), ("CancelAction", gtk.STOCK_CANCEL, _("Cancel"), None, _("Cancel current execution"), self.__cancelEvent__)]) actionGroupExecute.set_translation_domain(self.__domain__) __log__.debug("There is a xml path. UI Menus and tools will be recovered from path %s" % __XMLUI_FOLDER__) self.__uiManager__ = FactoryControls.getUIManager(os.path.join(__XMLUI_FOLDER__, "execute.xml"), self, actionGroupExecute)[0] self.__toolBar__ = self.__uiManager__.get_widget("/ToolsExecute") self.__toolBar__.set_style(gtk.TOOLBAR_BOTH_HORIZ) self.__toolBar__.set_tooltips(True) self.__vMain__.pack_start(self.__toolBar__, False, True)
def addTargetFiles(self, files, iter=None, position=gtk.TREE_VIEW_DROP_AFTER, gtkLock=True): """ @summary: Add a file list into target view. @param files: A list of files to add. @param iter: Iter that it will use as reference to insert new files. @param position: Position over iter. @param gtkLock: True to do a lock on gtk loop. """ if (self.__core__ == None): __log__.debug("There is not a project in tabproject") return if (files != None): iNImages = len(files) __log__.debug("Adding new %d images" % iNImages) operations = RegOperations() iterOp = None if (operations != None): opData = operations.getDataOperation("AddImg", _("Adding images..."), iNImages) # Add new operation to operation treeview iterOp = operations.addOperation(opData) # Gets pixbuf file icon = FactoryControls.getPixbufFromStock(gtk.STOCK_FILE) self.__addTargetFiles__(files, icon, iterOp, iter=iter, position=position, gtkLock=gtkLock) if (iterOp != None): operations.removeOperation(iterOp) else: __log__.debug("There are not files to insert")
def __initUIMenu__(self, domain): """ @summary: Initialize menu of window. @param domain: Domain used to translation. """ actionGroupMenu = gtk.ActionGroup("ActionGroupMenu") # Create actions actionGroupMenu.add_actions([("FileMenuAction", None, _("_File")), ("NewProjectAction", None, _("New Project")), ("OpenProjectAction", gtk.STOCK_OPEN, _("_Open"), "<Control>o", _("Open PyCamimg project"), self.__openProjectEvent__), ("SaveProjectAction", gtk.STOCK_SAVE, _("_Save"), "<Control>s", _("Save current project"), self.__saveProjectEvent__), ("SaveAsProjectAction", gtk.STOCK_SAVE_AS, _("Save _As"), None, _("Save current project"), self.__saveAsProjectEvent__), ("QuitAction", gtk.STOCK_QUIT, _("_Quit"), "<Control>q", _("Quit PyCamimg"), self.__queryQuitMenuItemEvent__), ("ToolsMenuAction", None, _("_Tools")), ("OperationsAction", None, _("Operations")), ("PreferencesAction", gtk.STOCK_PREFERENCES, _("_Preferences"), None, _("Preferences of PyCamimg"), self.__openOptionsEvent__), ("PluginsAction", gtk.STOCK_CONNECT, _("P_lugins"), None, _("Plugins of PyCamimg"), self.__openPlunginsEvent__), ("HelpMenuAction", None, _("_Help")), ("AboutAction", gtk.STOCK_ABOUT, _("_About PyCamimg"), None, _("Preferences of PyCamimg"), self.__openAboutEvent__), ("AddItemAction", gtk.STOCK_ADD, _("Add Images"), None, _("Add selected images"), self.__addImageEvent__), ("DelItemAction", gtk.STOCK_DELETE, _("Delete Images"), None, _("Delete selected images"), self.__deleteImageEvent__), ("DelOperationsAction", gtk.STOCK_CLEAR, _("Delete Operations"), None, _("Delete selected operations"), self.__deleteOperationsEvent__), ("RunAction", gtk.STOCK_EXECUTE, _("Run"), None, _("Run current project"), self.__runEvent__)]) actionGroupMenu.add_toggle_actions([("ChangeViewAction", gtk.STOCK_CONVERT, _("Toggle view"), None, _("Toggle between differents views"), self.__changeViewProjectEvent__)]) actionGroupMenu.set_translation_domain(domain) __log__.debug("There is a xml path. UI Menus and tools will be recovered from path %s" % __XMLUI_FOLDER__) print __XMLUI_FOLDER__ self.__uiManager__ = FactoryControls.getUIManager(os.path.join(__XMLUI_FOLDER__, "MainMenu.xml"), self.__mainWindow__, actionGroupMenu)[0] self.__menuBar__ = self.__uiManager__.get_widget("/MenuPyCaming") self.__toolBar__ = self.__uiManager__.get_widget("/ToolsPyCamimg") self.__toolBar__.set_style(gtk.TOOLBAR_BOTH_HORIZ) self.__toolBar__.set_tooltips(True)
def __initializeUI__(self, numberColumns): """ @summary: Initialize TreeView Target. """ iconview = gtk.IconView() treeview = gtk.TreeView() model = gtk.ListStore(gtk.gdk.Pixbuf, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gobject.TYPE_STRING, gtk.gdk.Pixbuf, gobject.TYPE_BOOLEAN, gobject.TYPE_BOOLEAN) model.set_default_sort_func(lambda *args:-1) __log__.debug("Created model for new project") treeview.set_model(model) treeview.set_headers_visible(True) treeview.set_headers_clickable(True) treeview.set_rules_hint(True) treeview.set_enable_search(False) treeview.set_fixed_height_mode(False) treeview.set_tooltip_column(self.COLUMN_SOURCE) treeview.set_show_expanders(False) treeview.get_selection().set_mode(gtk.SELECTION_MULTIPLE) treeview.set_reorderable(True) iconview.set_model(model) iconview.set_text_column(self.COLUMN_TARGET) iconview.set_pixbuf_column(self.COLUMN_PREVIEW) iconview.set_tooltip_column(self.COLUMN_SOURCE) iconview.set_columns(numberColumns) iconview.set_selection_mode(gtk.SELECTION_MULTIPLE) iconview.set_reorderable(True) __log__.debug("Applied settings") # Creates columns of the TreeView of target files column = FactoryControls.getTreeColumnTextAndPixbuf(_("Name"), self.COLUMN_SOURCE, self.COLUMN_IMAGE) treeview.append_column(column) columnDate = FactoryControls.getTreeColumnText(_("Photo Date"), self.COLUMN_DATE) treeview.append_column(columnDate) columnTarget = FactoryControls.getTreeColumnText(_("Target Name"), self.COLUMN_TARGET) treeview.append_column(columnTarget) columnOps = FactoryControls.getTreeColumnText(_("Operations"), self.COLUMN_OPERATIONS) treeview.append_column(columnOps) __log__.debug("Columns added") # Enabled as drag source treeview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, self.FROM_ITSELF, gtk.gdk.ACTION_MOVE) iconview.enable_model_drag_source(gtk.gdk.BUTTON1_MASK, self.FROM_ITSELF, gtk.gdk.ACTION_MOVE) # Enabled as drop target treeview.enable_model_drag_dest(self.TO_TEXT, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) iconview.enable_model_drag_dest(self.TO_TEXT, gtk.gdk.ACTION_DEFAULT | gtk.gdk.ACTION_COPY | gtk.gdk.ACTION_MOVE) treeview.connect("drag-data-get", self.__dragTarget__) treeview.connect("drag-data-received", self.__dropTarget__) treeview.connect("key-press-event", self.__keyPressEvent__) iconview.connect("drag-data-get", self.__dragTarget__) iconview.connect("drag-data-received", self.__dropTarget__) iconview.connect("key-press-event", self.__keyPressEvent__) __log__.debug("Drag & Drop enabled") scroll = gtk.ScrolledWindow() scroll.add(treeview) size = gtk.icon_size_lookup(gtk.ICON_SIZE_MENU) if ((self.__iconName__ != None) and (self.__iconName__ != "")): pbProject = gtk.gdk.pixbuf_new_from_file_at_size(os.path.join(self.__iconsPath__, self.__iconName__), size[0], size[1]) else: pbProject = FactoryControls.getPixbufFromStock(gtk.STOCK_MISSING_IMAGE, gtk.ICON_SIZE_MENU) imageProject = gtk.Image() imageProject.set_from_pixbuf(pbProject) bClose = gtk.Button(label=None, stock=None, use_underline=False) image = gtk.Image() image.set_from_stock(gtk.STOCK_CLOSE, gtk.ICON_SIZE_MENU) bClose.set_relief(gtk.RELIEF_NONE) bClose.set_border_width(0) bClose.set_image(image) bClose.connect("clicked", self.__buttonActivateSignal__) lTitle = gtk.Label(str=self.__name__) hbTab = gtk.HBox() hbTab.pack_start(imageProject, expand=False, fill=False, padding=1) hbTab.pack_start(lTitle, expand=False, fill=False, padding=2) hbTab.pack_start(bClose, expand=False, fill=False) __log__.debug("Scroll created") self.__label__ = lTitle self.__button__ = bClose self.__tabWidget__ = hbTab self.__treeview__ = treeview self.__iconview__ = iconview self.__model__ = model self.__scroll__ = scroll
def __fillDirectory__(self, path): """ @summary: Fills a node with sub-directories. @param path: Folder path to fill. """ newExpand = False # Gets current path iter = self.__model__.get_iter(path) sPath = self.__model__.get_value(iter, self.__PATH_COLUMN__) monitor = FactoryDirectoryMonitor.getMonitor(sPath) # Checks if first child y a temporal node. If it is, it must be removed itFirstChild = self.__model__.iter_children(iter) if (itFirstChild != None): if (self.__model__.get_value(itFirstChild, self.__PATH_COLUMN__) == self.__TEMP_NODE__): # Gets number of nodes. If nNodes > 1, # there is another thread that is loading the directory nNodes = self.__model__.iter_n_children(iter) if (nNodes > 1): return newExpand = True else: __log__.warning("It can not get first child of %s" % sPath) # Gets directories of the path lDirectories = self.__ioUtils__.getDirectories(sPath, showhidden=self.__showHiddens__) if (lDirectories != None): icon = FactoryControls.getPixbufFromStock(gtk.STOCK_DIRECTORY) if (not newExpand): __log__.debug("It is not a new expand. Checking directories...") iterStep = self.__model__.iter_children(iter) # Find deleted iters while (iterStep != None): doStep = True sDirFind = self.__model__.get_value(iterStep, self.__NAME_COLUMN__) if (sDirFind != None): try: index = lDirectories.index(sDirFind) except ValueError, ve: __log__.debug("It can not get index of %s. %s" % (sDirFind, ve)) index = -1 if (index == -1): # In case of directory does not exist, it will remove from treeview iterDelete = iterStep iterStep = self.__model__.iter_next(iterStep) self.deleteNode(iterDelete) __log__.debug("Delete node %s" % sDirFind) doStep = False else: # In case of directory just exists, it will remove from list lDirectories.remove(sDirFind) __log__.debug("%s skipped" % sDirFind) if (doStep): iterStep = self.__model__.iter_next(iterStep) # Check directories in the list for sDir in lDirectories: sFullPath = os.path.join(sPath, sDir) checkIter = self.__findDirectoryOnParent__(iter, sDir) if (checkIter == None): self.addDirectory(sDir, sFullPath, icon, iter) __log__.debug("Add %s" % sFullPath) # Insert directories for sDir in lDirectories: sFullPath = os.path.join(sPath, sDir) self.addDirectory(sDir, sFullPath, icon, iter) __log__.debug("Add %s" % sFullPath) if ((itFirstChild != None) and newExpand): __log__.debug("Remove temporal node.") self.deleteNode(itFirstChild) monitor.addDirectories(lDirectories) monitor.addListener(self.__handlerDirectoryMonitorEvents__)
def set_from_stock(self, stock): """ @summary: Set image from stock image. @param Id stock of the image.: """ self.set_from_pixbuf(FactoryControls.getPixbufFromStock(stock))
core.save() except Exception, e: __log__.error("It could not save current project to %s. %s" % (core.getFilename(), e)) FactoryControls.getMessage(_("An error was occurred when it was saving current project to %s" % core.getFilename()), type=gtk.MESSAGE_ERROR, title=_("Save project"), parent=self.__mainWindow__) return else: __log__.debug("Current project is not saved yet. Opening save dialog") try: self.__saveAsProjectEvent__(b, raiseError=True) except Exception, e: __log__.error("It could not save current project to %s. %s" % (core.getFilename(), e)) FactoryControls.getMessage(_("An error was occurred when it was saving current project to %s" % core.getFilename()), type=gtk.MESSAGE_ERROR, title=_("Save project"), parent=self.__mainWindow__) return __log__.info("Current project save on %s" % core.getFilename()) def __saveAsProjectEvent__ (self, b, raiseError=False): """ @summary: Handle save project action. @param b: Button that threw event. @param raiseError: True to throw an error when occurrs. """ if (self.__currentTab__ == None): __log__.debug("There is not current project") return fileSel = gtk.FileChooserDialog(title=_("Save project"),