public void Start(String targetDB, bool isMove, ModeEnum modeType, OCMMainWindow win)
        {
            if (isMove)
            {
                Title = Catalog.GetString ("Move Caches...");
                copyLabel.Markup = Catalog.GetString ("Moving Geocaches");
            }
            List<Geocache> caches;
            if (modeType == CopyingProgress.ModeEnum.VISIBLE)
            {
                caches = win.CacheList.UnfilteredCaches;
            }
            else if (modeType == CopyingProgress.ModeEnum.SELECTED)
            {
                caches = new List<Geocache> ();
                caches.Add (win.CacheList.SelectedCache);
            }
            else
            {
                caches = null;
                //caches = new List<Geocache> (UIMonitor.getInstance ().CacheStore.GetUnfilteredCaches(0d,0d,new string[0]));
            }
            ACacheStore target = new FileStore (targetDB);
            ACacheStore source = win.App.CacheStore;
            targetDBLabel.Text = targetDB;
            double count = 0;
            total = caches.Count;
            if (target.NeedsUpgrade)
            {
                MessageDialog dlg = new MessageDialog(null, DialogFlags.Modal, MessageType.Info, ButtonsType.Ok,
                                                      Catalog.GetString("The target database needs to be upgraded. " +
                                                      	"Please open the target database before trying to copy/move caches."));
                dlg.Run();
                dlg.Hide();
                this.Hide();
                return;
            }
            buttonOk.Visible = false;
            List<String> str = new List<String>();
            foreach(Geocache c in caches)
            {
                str.Add(c.Name);
            }

            target.StartUpdate();
            target.PurgeAllLogs(str.ToArray());
            target.PurgeAllAttributes(str.ToArray());
            target.PurgeAllTravelBugs(str.ToArray());
            foreach(Geocache cache in caches)
            {
                if (cancel)
                {
                    target.CancelUpdate();
                    this.Hide();
                    this.Dispose();
                    return;
                }

                count++;
                UpdateProgress(count, cache.Name);
                target.AddWaypointOrCache(cache, false, false);
                List<CacheLog> logs = source.GetCacheLogs(cache.Name);
                foreach(CacheLog log in logs)
                {
                    target.AddLog(cache.Name, log);
                }

                List<Waypoint> children = source.GetChildWaypoints(new string[]{cache.Name});
                foreach (Waypoint child in children)
                {
                    target.AddWaypointOrCache(child, false, false);
                }

                CacheAttribute[]  attributes = source.GetAttributes(cache.Name);
                foreach (CacheAttribute attribute in attributes)
                {
                    target.AddAttribute(cache.Name,attribute);
                }

                if (isMove)
                    source.DeleteWaypoint(cache.Name);
            }
            statusLabel.Markup = Catalog.GetString("<i>Complete</i>");
            progressBar.Text = Catalog.GetString("Complete");
            buttonOk.Visible = true;
            buttonCancel.Visible = false;
            target.CompleteUpdate();
        }
        void HandleHandleClose(object sender, EventArgs e)
        {
            this.Hide ();
            this.Dispose ();

            if (!Directory.Exists (page2.DataDirectory))
                Directory.CreateDirectory (page2.DataDirectory);

            if (!File.Exists (page2.DBFile))
            {
                FileStore store = new FileStore (page2.DBFile);
                store.Dispose ();
            }

            Config config = new Config();
            config.DataDirectory = page2.DataDirectory;
            config.DBFile = page2.DBFile;
            config.HomeLat = page3.HomeLat;
            config.HomeLon = page3.HomeLon;
            config.OwnerID = page3.MemberID;
            config.ImperialUnits = page2.ImperialUnits;
            config.MapType = page2.DefaultMap;
            config.WizardDone = true;
            m_App.InitializeApp(null, false);
        }