protected override void CommandCallback(OleMenuCommand command)
        {
            if(!Package.StorageOptions.SaveBookmarksToOwnFile)
            {
                if (Helpers.ShowYesNoQuestionMessage(requiresSettingMessage))
                    this.Package.ShowOptionPage(typeof(StorageOptionsPage));

                return;
            }

            if(!File.Exists(Package.DataFilePath))
            {
                Helpers.ShowInfoMessage(noFileExistsMessage);
                return;
            }

            if (Package.ConfirmationOptions.ReplacingLoadRequiresConfirmation)
            {
                var existingCount = BookmarksManager.GetBookmarksCount(BookmarkActionTarget.Solution);
                if (existingCount != 0)
                {
                    var fileCount = BookmarksManager.GetFilesWithBookmarksCount();
                    var message =
$@"{Helpers.Quantifier(existingCount, @"existing bookmark")} in {Helpers.Quantifier(fileCount, "file")} will be replaced with the bookmarks read from the .SuperBookmarks.dat file.
Are you sure?";
                    if (!Helpers.ShowYesNoQuestionMessage(message))
                        return;
                }
            }

            Package.LoadBookmarksFromDatFile();
        }
        protected override void CommandCallback(OleMenuCommand command)
        {
            var fileName = FileDialogs.BrowseForFileOpen(IntPtr.Zero, ".dat files|*.dat|All files|*.*", Package.GetLastUsedExportImportFolder(), "Import Bookmarks");

            if (fileName == null)
            {
                return;
            }

            SerializableBookmarksInfo info;

            try
            {
                using (var stream = File.OpenRead(fileName))
                    info = SerializableBookmarksInfo.DeserializeFrom(stream);
            }
            catch
            {
                Helpers.ShowErrorMessage("Sorry, I couldn't parse the file. Perhaps it is malformed?", showHeader: false);
                return;
            }

            if (!Package.Options.MergeWhenImporting)
            {
                if (Package.ConfirmationOptions.ReplacingImportRequiresConfirmation)
                {
                    var existingCount = BookmarksManager.GetBookmarksCount(BookmarkActionTarget.Solution);
                    if (existingCount != 0)
                    {
                        var newCount = info.TotalBookmarksCount;
                        var message  =
                            $@"{Helpers.Quantifier(existingCount, @"existing bookmark")} will be replaced with {Helpers.Quantifier(newCount, "bookmark")} from the file.
Are you sure?";
                        if (!Helpers.ShowYesNoQuestionMessage(message))
                        {
                            return;
                        }
                    }
                }

                this.BookmarksManager.DeleteAllBookmarksIn(BookmarkActionTarget.Solution);
            }

            try
            {
                this.BookmarksManager.RecreateBookmarksFromSerializedInfo(info);
                Helpers.WriteToStatusBar($"Import done, solution has now {Helpers.Quantifier(BookmarksManager.GetBookmarksCount(BookmarkActionTarget.Solution), "bookmark")} in {Helpers.Quantifier(BookmarksManager.GetFilesWithBookmarksCount(), "file")}");
            }
            catch
            {
                Helpers.ShowErrorMessage("Sorry, I couldn't get bookmarks information from the file. Perhaps it is malformed?", showHeader: false);
                return;
            }

            Package.SetLastUsedExportImportFolder(Path.GetDirectoryName(fileName));
        }
        protected override void CommandCallback(OleMenuCommand command)
        {
            var shouldAskConfirmation = Package.ConfirmationOptions.ShouldConfirmForDeleteAllIn(Target);

            if (!shouldAskConfirmation)
            {
                BookmarksManager.DeleteAllBookmarksIn(Target);
                return;
            }

            string message;
            var    count = BookmarksManager.GetBookmarksCount(Target);

            if (count == 0)
            {
                message = $"There are no bookmarks in {TargetDisplayName}";
                Helpers.ShowInfoMessage(message);
                return;
            }

            message =
                $@"There {(count == 1 ? "is 1 bookmark" : $"are {count} bookmarks")} in {TargetDisplayName}.
        protected override void CommandCallback(OleMenuCommand command)
        {
            var count = BookmarksManager.GetBookmarksCount(BookmarkActionTarget.Solution);

            if (count == 0)
            {
                Helpers.ShowInfoMessage("There are no bookmarks to export");
                return;
            }

            var fileName = FileDialogs.BrowseForFileSave(IntPtr.Zero, ".dat files|*.dat|All files|*.*", Package.GetLastUsedExportImportFolder(), "Export Bookmarks");

            if (fileName != null)
            {
                var info = this.BookmarksManager.GetSerializableInfo();
                using (var stream = File.Create(fileName))
                    info.SerializeTo(stream, prettyPrint: true);

                Helpers.WriteToStatusBar($"{Helpers.Quantifier(info.TotalBookmarksCount, "bookmark")} from {Helpers.Quantifier(info.TotalFilesCount, "file")} have been exported to {Path.GetFileName(fileName)}");

                Package.SetLastUsedExportImportFolder(Path.GetDirectoryName(fileName));
            }
        }