def __init__(self, pyluggage_config, target_path=None, version_string=None, minimize_when_open=False):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        self.pyluggage_config = pyluggage_config
        self.version_string = version_string
        self.setupUi(self)
        gui_tools.center_widget(self)
        self.setWindowIcon(QIcon(":/pyluggage/img/cryptoluggage-logo.png"))

        self.frame_welcome = WelcomeFrame(pyluggage_config=pyluggage_config,  version_string=version_string)
        self.frame_luggage = LuggageFrame(pyluggage_config=pyluggage_config)
        self.verticalLayout.addWidget(self.frame_welcome)
        self.verticalLayout.addWidget(self.frame_luggage)
        self.frame_luggage.hide()

        self.frame_luggage.help_needed.connect(self._open_help)
        self.frame_welcome.luggage_opened.connect(self.display_luggage)
        self.frame_luggage.luggage_closed.connect(self.close_luggage)
        self.frame_welcome.help_needed.connect(self._open_help)

        self.setVisible(True)

        # If available, create a tray icon and a menu
        if QSystemTrayIcon.isSystemTrayAvailable():
            self.tray_icon = TrayIcon.LuggageTrayIcon(parent=self)
            self.tray_icon.clicked.connect(self.__process_tray_icon_click)
            self.tray_icon.close_luggage_clicked.connect(self.close_luggage)
            self.tray_icon.exit_clicked.connect(self.exit_app)
            self.tray_icon.show()
        else:
            self.tray_icon = None

        if target_path is not None:
            if not os.path.isfile(target_path):
                QMessageBox.critical(
                    self,
                    _translate("Luggage does not exist"),
                    _translate("The Luggage at {path} does not exist.\nPlease open manually.".format(
                        path=target_path)))
            else:
                self.frame_welcome.open_luggage_query_pass(luggage_path=target_path)
        else:
            self.close_luggage()

        if minimize_when_open:
            self.__process_tray_icon_click()
    def __init__(self, parent, pyluggage_config, previous_secret=None):
        """
        :param previous_secret: if not None, the dialog behaves as an 'Edit' dialog and
        the passed model.Secret is modified if it the dialog is accepted. Otherwise,
        the dialog behaves as a 'New' dialog
        """
        # Qt Designer
        HideableQDialog.__init__(self, parent)
        Ui_EditSecretDialog.__init__(self)
        self.setupUi(self)
        gui_tools.center_widget(self)

        self.pyluggage_config = pyluggage_config

        self.previous_secret = previous_secret
        if self.previous_secret is not None:
            self.lineedit_name.setText(self.previous_secret.name)
            self.plaintext_contents.setPlainText(self.previous_secret.contents)
            self.lineedit_tags.setText(" ".join(self.previous_secret.tags))
        self.accepted_secret = None
        self.check_show_contents.setChecked(self.pyluggage_config.show_secret_contents)
        self.check_use_special_chars.setChecked(self.pyluggage_config.generator_show_special_chars)
        self.spin_pass_length.setValue(self.pyluggage_config.generator_password_length)
        self.__update_controls()

        # Connections
        self.button_save.clicked.connect(self.__accept_changes)
        self.button_discard.clicked.connect(self.reject)
        self.lineedit_name.textChanged.connect(self.__update_controls)
        self.button_copy_user.clicked.connect(self.copy_user_to_clipboard)
        self.button_copy_pass.clicked.connect(self.copy_pass_to_clipboard)
        self.button_show_contents.clicked.connect(self.__show_contents)
        self.button_generate_pass.clicked.connect(self.generate_pass_to_clipboard)
        self.check_show_contents.stateChanged.connect(self.__update_config_show_contents_changed)
        self.spin_pass_length.valueChanged.connect(self.__update_config_generate_pass_length)
        self.check_use_special_chars.stateChanged.connect(self.__update_config_use_special_chars)
        self.plaintext_contents.textChanged.connect(self.__update_controls)