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()