protected void OnButtonPictureClicked(object sender, EventArgs e) { Gtk.FileChooserDialog dlg = new Gtk.FileChooserDialog (Catalog.GetString ("Select Image"), ParentWin, Gtk.FileChooserAction.Open, Catalog.GetString ("Cancel"), Gtk.ResponseType.Cancel, Catalog.GetString ("Open"), Gtk.ResponseType.Accept); dlg.Modal = true; dlg.TransientFor = ParentWin; int res; do { if (pictureFolder != null) dlg.SetCurrentFolder (pictureFolder); res = dlg.Run (); if (res == (int) Gtk.ResponseType.Cancel) break; pictureFolder = dlg.CurrentFolder; filename = dlg.Filename; try { Gdk.Pixbuf load = new Gdk.Pixbuf (dlg.Filename); Gdk.Pixbuf orig = load.ApplyEmbeddedOrientation (); Gdk.Pixbuf big; int w = orig.Width; int h = orig.Height; if (w == h) { big = orig; } else if (w > h) { big = new Gdk.Pixbuf (orig, (w - h) / 2, 0, h, h); } else { big = new Gdk.Pixbuf (orig, 0, (h - w) / 2, w, w); } imagePicture.Pixbuf = big.ScaleSimple (PICTURE_WIDTH, PICTURE_HEIGHT, Gdk.InterpType.Hyper); pixbufOrig = orig; photoChanged = true; } catch (GLib.GException) { Gtk.MessageDialog msg = new Gtk.MessageDialog (ParentWin, Gtk.DialogFlags.Modal, Gtk.MessageType.Error, Gtk.ButtonsType.Ok, Catalog.GetString ("Error opening image")); msg.Title = "Error"; msg.Run (); msg.Destroy (); imagePicture.Pixbuf = Gdk.Pixbuf.LoadFromResource ("IMRpatient.img.image_unknown.png"); photoChanged = false; continue; } } while (res != (int) Gtk.ResponseType.Accept); dlg.Destroy (); }