private bool SaveToPicture(PictureMetaData pic, bool commit)
        {
            // todo: die worker und modelle können mehrfach verwendet werden!
            IptcWorker    iptcWorker    = new IptcWorker();
            ExifGpsWorker exifGpsWorker = new ExifGpsWorker();

            IptcModel    iptcModel    = iptcView.GetModel();
            ExifGpsModel exifGpsModel = exifGpsView.GetModel();

            bool somethingChanged = false;

            if (iptcWorker.ProcessFile(pic, iptcModel))
            {
                somethingChanged = true;
            }
            if (exifGpsWorker.ProcessFile(pic, exifGpsModel))
            {
                somethingChanged = true;
            }

            if (iptcModel.PendingUpdates)
            {
                iptcModel.UpdateSettings();
            }

            if (somethingChanged && commit)
            {
                if (!pic.SaveChanges())
                {
                    return(this.ShowFileVanishedMsg(pic.Filename));
                }
            }

            return(true);
        }
        public override RequestFileChangeResult RequestFileChange()
        {
            if (!askForFileSave)
            {
                return(RequestFileChangeResult.Close);
            }
            if (this.currentPicture == null)
            {
                return(RequestFileChangeResult.Close);
            }
            if (!this.currentPicture.ExistFile)
            {
                return(RequestFileChangeResult.Close);
            }
            IptcModel    iptcModel    = iptcView.GetModel();
            ExifGpsModel exifGpsModel = exifGpsView.GetModel();

            if (!iptcModel.PendingUpdates && !exifGpsModel.PendingUpdates)
            {
                return(RequestFileChangeResult.Close);
            }
            if (!isDataLoaded)
            {
                return(RequestFileChangeResult.Close);
            }

            DialogResult r = MessageBox.Show("Save changes to this picture?", "Iptc and Gps Editor", MessageBoxButtons.YesNoCancel, MessageBoxIcon.Question);

            if (r == DialogResult.Cancel)
            {
                return(RequestFileChangeResult.DoNotClose);
            }

            if (r == DialogResult.Yes)
            {
                mainForm.WaitCursor(true);
                SaveToPicture(currentPicture, false);
                mainForm.WaitCursor(false);
                return(RequestFileChangeResult.CloseAndSave);
            }

            askForFileSave = false;
            return(RequestFileChangeResult.Close);
        }
        public override void SetModel(ExifGpsModel m)
        {
            base.SetModel(m);

            this.bindingSource.DataSource = this.model;
        }