/*
    public void LoadCEStage(string filename, bool findRawForCEStage)
    {
        try
        {
            mStage.LoadStage(filename);

            string raw_filename; int prescale = 2;
            if (mStage.Prescale != 0) prescale = mStage.Prescale;

            if (findRawForCEStage && MainClass.FindRawsForCestageAndAskToOpen(filename, out raw_filename, ref prescale))
            {
                mStage.AskLoadImage(raw_filename, prescale);
            }
        }
        catch (StageDeserializationException sdex)
        {
            Gtk.MessageDialog md = new Gtk.MessageDialog(
                this, DialogFlags.Modal,
                MessageType.Error, ButtonsType.Ok,
                false, "Can't load stage from the file \"{0}\".\n{1}", filename, sdex.Message);

            md.Title = MainClass.APP_NAME;

            md.Run();
            md.Destroy();
        }
    }
    */
    public bool ShowLoadImageDialog()
    {
        if (mStage.TheUIState == UIState.Loading)
        {
            Gtk.MessageDialog md = new Gtk.MessageDialog(this, DialogFlags.Modal,
                                                         MessageType.Error, ButtonsType.Ok,
                                                         "Loading is in progress");
            md.Title = MainClass.APP_NAME;
            md.Run();
            md.Destroy();
        }
        else
        {
            Gtk.FileChooserDialog fcd = new Gtk.FileChooserDialog("Open RAW image",
                                                                  this,
                                                                  FileChooserAction.Open,
                                                                  "Cancel", ResponseType.Cancel,
                                                                  "Open", ResponseType.Accept);

            // Filter for RAWs
            FileFilter ff = new FileFilter();

            ff.AddCustom(FileFilterFlags.Filename, delegate (Gtk.FileFilterInfo ffi) {
                return RawLoader.IsRaw(ffi.Filename);
            });
            ff.Name = "RAW image";

            fcd.AddFilter(ff);

            // Setting current folder to stage file folder or to RAW file folder
            if (mStage.StageFileName != null && mStage.StageFileName != ""
                    && !fcd.SetCurrentFolder(System.IO.Path.GetDirectoryName(mStage.StageFileName)))
                fcd.SetCurrentFolder(System.IO.Path.GetDirectoryName(mStage.RawFileName));

            // Adding preview widget

            ReceiptSelectorWidget rsw = new ReceiptSelectorWidget();
            RawPreviewWidget rpw = new RawPreviewWidget();

            // Adding options widget

            PreScaleSelectorWidget pssw = new PreScaleSelectorWidget();
            pssw.Value = 2;
            if (mStage.Prescale != 0) pssw.Value = mStage.Prescale;

            VBox preview_box = new VBox(false, 4);
            preview_box.PackStart(rpw, true, true, 0);
            preview_box.ShowAll();
            fcd.PreviewWidget = preview_box;

            HBox options_box = new HBox(false, 20);
            options_box.PackStart(rsw, true, true, 0);
            options_box.PackEnd(pssw, false, true, 0);
            fcd.ExtraWidget = options_box;
            options_box.ShowAll();

            // Adding events

            fcd.UpdatePreview += delegate {
                rpw.Filename = fcd.Filename;
            };
            fcd.SelectionChanged += delegate {
                rpw.Filename = fcd.Filename;
                rsw.RawFileName = fcd.Filename;
            };
            rpw.FileIsGoodChanged += delegate {
                options_box.Sensitive = rpw.FileIsGood;
                fcd.PreviewWidgetActive = rpw.FileIsGood;
            };

            if (mStage.RawFileName != null)
            {
                fcd.SetFilename(mStage.RawFileName);
                rpw.Filename = mStage.RawFileName;
                rsw.RawFileName = mStage.RawFileName;
                fcd.PreviewWidgetActive = rpw.FileIsGood;
                options_box.Sensitive = rpw.FileIsGood;
            }

            string filename = ""; int prescale = 2;
            bool ok = false;

            if (fcd.Run() == (int)Gtk.ResponseType.Accept)
            {
                ok = true;
                filename = fcd.Filename;
                prescale = pssw.Value;
            }

            fcd.Destroy();

            if (ok)
            {
                if (mStage.RawFileName != filename)
                {
                    mStage.AskLoadImage(filename, prescale);
                }
                mStage.LoadStage(rsw.SelectedReceiptFileName);
                return true;
            }
        }
        return false;
    }
 protected virtual void OnOpenActionActivated(object sender, System.EventArgs e)
 {
     var fileChooser = new FileChooserDialog (Catalog.GetString ("Open directory"), this, FileChooserAction.Open, Stock.Cancel, ResponseType.Cancel, Stock.Open, ResponseType.Close);
     FileFilter filter = new FileFilter ();
     filter.AddCustom (FileFilterFlags.Filename, info => Directory.Exists (info.Filename));
     fileChooser.Filter = filter;
     if (fileChooser.Run () == (int)ResponseType.Close) {
         logic.LoadDirectory (fileChooser.Filename ?? fileChooser.CurrentFolder);
     }
     fileChooser.Destroy ();
 }