def set_active_image(self): print('Setting active image ...') # get reference to the preview img and label default_img = '{}/resources/default.png'.format(self.project_root) active_img_box = self.builder.get_object('active_img_box') current_label = active_img_box.get_children()[0] # # if single file if self.filename and not self.directory: # set image if data_reader.image_extension_checker(self.filename): pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale(self.filename, -1, 300, True) self.active_img.set_from_pixbuf(pixbuf) # # if directory elif self.directory and not self.filename: directory = '{}/'.format(engine.sanitize_filter(self.directory)) # get dir and add trailing slash file_list = [engine.sanitize_filter(file) for file in os.listdir(directory) if os.path.isfile('{}{}'.format(directory, file)) and self.m.file('{}{}'.format(directory, file)) in data_reader.AcceptedFormats.FORMATS] if file_list: pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_scale( '{}{}'.format(directory, file_list[0]), -1, 300, True) self.active_img.set_from_pixbuf(pixbuf) else: pass self.active_img.set_from_pixbuf( GdkPixbuf.Pixbuf.new_from_file_at_scale(default_img, -1, 300, True))
def on_file_chooser_selected(self, widget): if self.file_chooser_widget.get_action() == Gtk.FileChooserAction.OPEN: # set the filename in the tag editor if choosing a file self.filename = engine.sanitize_filter(self.file_chooser_widget.get_filename()) self.directory = None # update the file selected label for the tagger self.file_selected_label_label.set_text( self.builder.get_object('tagger_file_selected').get_text()) self.file_selected_label.set_text(self.filename) # add to log self.add_to_log(self.builder.get_object('log_file_selected'), self.filename) elif self.file_chooser_widget.get_action() == Gtk.FileChooserAction.SELECT_FOLDER: # set the directory in the tag editor if choosing a directory self.directory = engine.sanitize_filter(self.file_chooser_widget.get_filename()) self.filename = None # update the file selected label for the tagger self.file_selected_label_label.set_text( self.builder.get_object('tagger_dir_selected').get_text()) self.file_selected_label.set_text(self.directory) # add to log self.add_to_log(self.builder.get_object('log_directory_selected'), self.file_chooser_widget.get_filename()) # set the active image in the tagger self.set_active_image() # hide the chooser dialog self.file_chooser_dialog.hide()
def create_new_keywords_list_from_string(self, keyword_string=None): if keyword_string: # make list new_keyword_list_unclean = keyword_string.strip().split(", ") # return (limit to 10 keywords to avoid memory foolishness) return [engine.sanitize_filter(kw) for kw in new_keyword_list_unclean[:10]] or None return None
def on_file_chooser_selection_changed(self, widget): # when selection changed, if mode is to select a file, prevent selection of dir sel = engine.sanitize_filter(self.file_chooser_widget.get_filename()) if (sel and self.file_chooser_widget.get_action() == Gtk.FileChooserAction.OPEN and os.path.isdir(sel)): # self.file_chooser_widget.unselect_all() self.file_select_button.hide() elif (sel and self.file_chooser_widget.get_action() == Gtk.FileChooserAction.OPEN and os.path.isfile(sel)): self.file_select_button.show()
def __init__(self): # project_root = os.path.dirname(os.path.realpath(__file__)) self.project_root = os.path.dirname(os.path.dirname(__file__)) # make the config directory if does not exist user_home = os.getenv('USERPROFILE') or os.getenv('HOME') engine.Engine.make_config_dir(path='{}/.config/IptcEditor'.format(user_home)) # create a new xml file to store tag archive if doesn't already exist engine.XmlMachine.create_new_xml_file() # set version number from file with open('{}/VERSION.rst'.format(self.project_root)) as in_file: self.app_version = engine.sanitize_filter(in_file.read())[0:7] # create an instance of the TagEditor (which does the 'work') self.engine = engine.Engine() # # set up magic method to determine file mime type (for later) self.m = magic.open(magic.MAGIC_MIME_TYPE) self.m.load() ''' GLADE ''' # # # TOP LEVEL GLADE SETUP self.glade_file = '{}/resources/iptceditor.glade'.format(self.project_root) # create builder and add the glade file self.builder = Gtk.Builder() self.builder.add_from_file(self.glade_file) # connect the signals self.builder.connect_signals(self) # get the top level glade object self.window = self.builder.get_object('main_window') # # CREATE INSTANCE REFERENCES TO WIDGETS self.about_dialog = None self.file_chooser_dialog = self.builder.get_object('file_chooser_dialog') self.file_chooser_widget = self.builder.get_object('file_chooser_widget') self.file_select_button = self.builder.get_object('file_select') self.file_chooser_status = self.builder.get_object('file_chooser_dialog_status_bar') self.file_selected_label = self.builder.get_object('tagger_current_dataset_label') self.file_selected_label_label = self.builder.get_object('tagger_current_dataset_label_label') self.preview_img = None self.activity_log = self.builder.get_object('activity_log') self.keyword_list_dialog = self.builder.get_object('keyword_list_dialog') self.keyword_selection_viewport = self.builder.get_object('keyword_dialog_viewport') self.keyword_selection_list = None self.keywords_selected = [] self.active_img = self.builder.get_object('active_image') # # CREATE INSTANCE REFERENCES TO TEXT INPUT FIELDS (to allow clearing, etc) self.input_text_fields = [ self.builder.get_object('tagger_new_keyword_input'), self.builder.get_object('tagger_keyword_to_replace_input'), self.builder.get_object('iptc_remove_field') ] # # create file chooser filter self.filechooser_filter = Gtk.FileFilter() self.filechooser_filter.set_name('Images') list(map(self.filechooser_filter.add_mime_type, data_reader.AcceptedFormats.FORMATS)) # # store filename / directory self.filename = self.directory = None # SHOW THE MAIN WINDOW print('Showing window ...') self.window.show_all() # RUN THE GTK Gtk.main()