Exemple #1
0
        public EditBuferTextMenuItem(
            BufermanMenuItem menuItem,
            BuferContextMenuState buferContextMenuState,
            IBufermanHost bufermanHost,
            IProgramSettingsGetter settings,
            IClipboardWrapper clipboardWrapper)
        {
            this._settings              = settings;
            this._bufermanHost          = bufermanHost;
            this._buferContextMenuState = buferContextMenuState;
            this._clipboardWrapper      = clipboardWrapper;

            menuItem.AddOnClickHandler(this._ChangeBufer);
            menuItem.ShortCut = Shortcut.CtrlE;
        }
Exemple #2
0
        public override void UpdateBuferItem(BuferContextMenuState contextMenuState)
        {
            if (contextMenuState.Bufer.ViewModel.IsChangeTextAvailable)
            {
                var buferTextRepresentation = contextMenuState.Bufer.ViewModel.TextRepresentation;

                if (buferTextRepresentation != null && buferTextRepresentation.Length > BigTextBuferPlugin.MaxBuferPresentationLength)
                {
                    buferTextRepresentation = this._ReduceRepresentation(buferTextRepresentation);

                    contextMenuState.Bufer.ViewModel.Representation = buferTextRepresentation;
                    contextMenuState.Bufer.SetMouseOverToolTip(buferTextRepresentation);
                    contextMenuState.Bufer.ViewModel.TextRepresentation = buferTextRepresentation;
                    contextMenuState.Bufer.ViewModel.TooltipTitle       = Resource.BigTextBufer;

                    contextMenuState.Bufer.MouseOverTooltip.ToolTipTitle = contextMenuState.Bufer.ViewModel.TooltipTitle;
                    contextMenuState.Bufer.FocusTooltip.ToolTipTitle     = contextMenuState.Bufer.ViewModel.TooltipTitle;
                }
            }
        }
Exemple #3
0
        public DeferredBuferDeletionWrapper(BuferContextMenuState buferContextMenuState, IBufermanHost bufermanHost, ITime time)
        {
            this._bufermanHost          = bufermanHost;
            this._buferContextMenuState = buferContextMenuState;
            this._time = time;

            var deleteBuferNowMenuItem = bufermanHost.CreateMenuItem(() => Resource.DeleteBuferNowMenuItem, this._DeleteBuferImmediately);

            deleteBuferNowMenuItem.ShortCut = Shortcut.Del;
            buferContextMenuState.DeleteBuferMenuItem.AddMenuItem(deleteBuferNowMenuItem);
            buferContextMenuState.DeleteBuferMenuItem.AddMenuItem(bufermanHost.CreateMenuItem(() => string.Format(Resource.DeleteBuferInNMinutesMenuItem, 1), this._GetDeferredDeleteBuferHandler(1)));
            buferContextMenuState.DeleteBuferMenuItem.AddMenuItem(bufermanHost.CreateMenuItem(() => string.Format(Resource.DeleteBuferInNMinutesMenuItem, 10), this._GetDeferredDeleteBuferHandler(10)));
            buferContextMenuState.DeleteBuferMenuItem.AddMenuItem(bufermanHost.CreateMenuItem(() => string.Format(Resource.DeleteBuferInNMinutesMenuItem, 45), this._GetDeferredDeleteBuferHandler(45)));

            buferContextMenuState.PinnedBufer += (object sender, BuferPinnedEventArgs args) =>
            {
                if (this.IsDeferredDeletionActivated())
                {
                    this.CancelDeferredBuferDeletion(sender, args);
                }
            };
        }
Exemple #4
0
 public virtual void UpdateBuferItem(BuferContextMenuState contextMenuModel)
 {
     return;
 }
        public IEnumerable <BufermanMenuItem> GenerateContextMenuItems(BuferContextMenuState buferContextMenuState,
                                                                       IBufermanHost bufermanHost,
                                                                       IBuferTypeMenuGenerator buferTypeMenuGenerator)
        {
            var bufer          = buferContextMenuState.Bufer;
            var buferViewModel = bufer.ViewModel;

            IList <BufermanMenuItem> menuItems = new List <BufermanMenuItem>();

            buferContextMenuState.MarkAsPinnedMenuItem.ShortCut = Shortcut.CtrlS;
            menuItems.Add(buferContextMenuState.MarkAsPinnedMenuItem);

            var formats          = buferContextMenuState.Bufer.ViewModel.Clip.GetFormats();
            var formatsMenuItems = new List <BufermanMenuItem>();

            foreach (var format in formats)
            {
                if (format != ClipboardFormats.CUSTOM_IMAGE_FORMAT && format != ClipboardFormats.FROM_FILE_FORMAT)
                {
                    var particularFormatMenu = bufermanHost.CreateMenuItem(format);

                    var formatData = buferContextMenuState.Bufer.ViewModel.Clip.GetData(format);

                    if (formatData is Stream)
                    {
                        particularFormatMenu.Text += $" ({Resource.StreamFormat})";
                    }
                    else if (formatData is string)
                    {
                        particularFormatMenu.Text += $" ({Resource.TextFormat})";
                    }

                    if (formatData == null)
                    {
                        particularFormatMenu.Enabled = false;
                    }
                    else
                    {
                        var data = formatData.ToString();
                        if (data.Length > 2300)
                        {
                            data = $"{data.Substring(0, 2000)}{Environment.NewLine}{Environment.NewLine}...";
                        }

                        particularFormatMenu.AddOnClickHandler((object sender, EventArgs args) =>
                        {
                            bufermanHost.UserInteraction.ShowPopup(data, format);
                        });
                    }
                    formatsMenuItems.Add(particularFormatMenu);
                }
            }

            var formatsMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuFormats + $" ({formatsMenuItems.Count})");

            foreach (var formatMenuItem in formatsMenuItems)
            {
                formatsMenuItem.AddMenuItem(formatMenuItem);
            }

            menuItems.Add(formatsMenuItem);
            buferContextMenuState.DeleteBuferMenuItem = bufermanHost.CreateMenuItem(() => Resource.DeleteBuferMenuItem, (object sender, EventArgs args) => {
                buferContextMenuState.RemoveBufer();
            });
            menuItems.Add(buferContextMenuState.DeleteBuferMenuItem);

            buferContextMenuState.PasteMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuPaste);

            menuItems.Add(buferContextMenuState.PasteMenuItem);

            buferContextMenuState.PlaceInBuferMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuPlaceInBufer, (object sender, EventArgs e) =>
            {
                this._clipboardWrapper.SetDataObject(buferContextMenuState.Bufer.ViewModel.Clip);
            });
            buferContextMenuState.PlaceInBuferMenuItem.ShortCut = Shortcut.CtrlC;

            if (bufer.ViewModel.IsChangeTextAvailable)
            {
                buferContextMenuState.PasteMenuItem.AddMenuItem(bufermanHost.CreateMenuItem(() => Resource.MenuPasteAsIs + $" {new String('\t', 4)} Enter", (object sender, EventArgs ars) =>
                {
                    new KeyboardEmulator().PressEnter();
                }));

                if (formats.Length != 3 || ClipboardFormats.TextFormats.Any(tf => !formats.Contains(tf)))
                {
                    var pasteAsTextMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuPasteAsText, (object sender, EventArgs args) =>
                    {
                        var textDataObject = new DataObject();
                        textDataObject.SetText(buferViewModel.OriginBuferTitle);

                        var oldClip                   = buferViewModel.Clip;
                        buferViewModel.Clip           = textDataObject;
                        var textBuferSelectionHandler = this._buferSelectionHandlerFactory.CreateHandler(bufer, bufermanHost);
                        textBuferSelectionHandler.DoOnClipSelection(sender, args);
                        buferViewModel.Clip = oldClip;
                    });
                    buferContextMenuState.PasteMenuItem.AddMenuItem(pasteAsTextMenuItem);

                    pasteAsTextMenuItem.ShortCut = Shortcut.CtrlA;
                }

                buferContextMenuState.PasteMenuItem.AddMenuItem(bufermanHost.CreateMenuItem(() => Resource.MenuCharByChar, (object sender, EventArgs args) =>
                {
                    bufermanHost.HideWindow();
                    new KeyboardEmulator().TypeText(buferContextMenuState.Bufer.ViewModel.OriginBuferTitle);
                }));

                menuItems.Add(bufermanHost.CreateMenuSeparatorItem());

                var editTextMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuEdit);
                new EditBuferTextMenuItem(editTextMenuItem, buferContextMenuState, bufermanHost, this._settings, this._clipboardWrapper);
                menuItems.Add(editTextMenuItem);

                var returnTextToInitialMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuReturn);
                new ReturnToInitialTextMenuItem(returnTextToInitialMenuItem, buferContextMenuState.Bufer, bufermanHost);
                buferContextMenuState.ReturnTextToInitialMenuItem = returnTextToInitialMenuItem;
                var changeTextMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuChange);
                var ctmi = new ChangeTextMenuItem(changeTextMenuItem, buferContextMenuState.Bufer, bufermanHost, this._settings);
                if (!string.IsNullOrWhiteSpace(buferViewModel.Alias))
                {
                    ctmi.TryChangeText(buferViewModel.Alias);
                }
                ctmi.TextChanged += (object sender, TextChangedEventArgs e) =>
                {
                    buferContextMenuState.ReturnTextToInitialMenuItem.Enabled = !e.IsOriginText;
                };
                buferContextMenuState.ChangeTextMenuItem = changeTextMenuItem;
                menuItems.Add(buferContextMenuState.ChangeTextMenuItem);
                menuItems.Add(buferContextMenuState.ReturnTextToInitialMenuItem);

                buferContextMenuState.AddToFileMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuAddToFile);

                if (formats.Contains(ClipboardFormats.FROM_FILE_FORMAT))
                {
                    buferContextMenuState.MarkMenuItemAsAddedToFile();
                }
                else
                {
                    var addToDefaultFileMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuAddToDefaultFile, (object sender, EventArgs args) =>
                    {
                        var bufersStorage = this._bufersStorageFactory.CreateStorageByFileExtension(
                            this._fileStorage.CombinePaths(
                                this._fileStorage.DataDirectory,
                                this._settings.DefaultBufersFileName));

                        var buferItem = buferContextMenuState.Bufer.ViewModel.ToModel();

                        bufersStorage.SaveBufer(buferItem);

                        buferContextMenuState.MarkMenuItemAsAddedToFile();
                    });

                    addToDefaultFileMenuItem.ShortCut = Shortcut.CtrlF;
                    buferContextMenuState.AddToFileMenuItem.AddMenuItem(addToDefaultFileMenuItem);

                    var addToFileMenuItem = bufermanHost.CreateMenuItem(() => Resource.MenuAddToSelectedFile, (object sender, EventArgs args) =>
                    {
                        var buferItem = buferContextMenuState.Bufer.ViewModel.ToModel();

                        this._userFileSelector.TrySelectBufersStorage(storage => storage.SaveBufer(buferItem));
                    });

                    buferContextMenuState.AddToFileMenuItem.AddSeparator();
                    buferContextMenuState.AddToFileMenuItem.AddMenuItem(addToFileMenuItem);
                }
                menuItems.Add(buferContextMenuState.AddToFileMenuItem);

                var loginCredentialsMenuItem = bufermanHost.CreateMenuItem(() => Resource.CreateCredsMenuItem);
                var clcmi = new CreateLoginCredentialsMenuItem(loginCredentialsMenuItem, buferContextMenuState.Bufer, bufermanHost);
                clcmi.LoginCreated += (object sender, CreateLoginCredentialsEventArgs e) =>
                {
                    buferContextMenuState.PasteMenuItem.SetTextFunction(() => $"{Resource.LoginWith} {new String('\t', 2)} Enter");
                    buferContextMenuState.PasteMenuItem.TextRefresh();

                    buferContextMenuState.ReturnTextToInitialMenuItem.Enabled = false;
                    buferContextMenuState.PlaceInBuferMenuItem.Enabled        = false;
                    buferContextMenuState.ChangeTextMenuItem.Enabled          = false;
                    buferViewModel.Clip.SetData(ClipboardFormats.PASSWORD_FORMAT, e.Password);
                    if (!buferViewModel.Pinned)
                    {
                        buferContextMenuState.TryTogglePinBufer(sender, e);
                    }

                    buferContextMenuState.RemoveBuferSelectionHandler();
                };
                buferContextMenuState.CreateLoginDataMenuItem = loginCredentialsMenuItem;
                menuItems.Add(buferContextMenuState.CreateLoginDataMenuItem);

                buferContextMenuState.PasteMenuItem.AddSeparator();

                buferContextMenuState.PasteMenuItem.AddMenuItem(buferContextMenuState.PlaceInBuferMenuItem);
            }
            else
            {
                buferContextMenuState.PasteMenuItem.Text += $" {new String('\t', 4)} Enter";
                buferContextMenuState.PasteMenuItem.AddOnClickHandler((object sender, EventArgs ars) =>
                {
                    new KeyboardEmulator().PressEnter();
                });

                menuItems.Add(buferContextMenuState.PlaceInBuferMenuItem);
            }

            if (buferTypeMenuGenerator != null)
            {
                menuItems = buferTypeMenuGenerator.Generate(menuItems, bufermanHost);
            }

            menuItems.Add(bufermanHost.CreateMenuSeparatorItem());
            var createdAtMenuItem = bufermanHost.CreateMenuItem(() => string.Format(Resource.MenuCopyingTime, buferViewModel.CreatedAt));

            createdAtMenuItem.Enabled = false;
            menuItems.Add(createdAtMenuItem);

            return(menuItems);
        }
Exemple #6
0
 public override void UpdateBuferItem(BuferContextMenuState contextMenuState)
 {
     new DeferredBuferDeletionWrapper(contextMenuState, this.BufermanHost, this._time);
 }
Exemple #7
0
        public BuferHandlersWrapper(
            IClipboardBuferService clipboardBuferService,
            IBuferContextMenuGenerator buferContextMenuGenerator,
            IBuferSelectionHandlerFactory buferSelectionHandlerFactory,
            IFileStorage fileStorage,
            IBufermanHost bufermanHost,
            IProgramSettingsGetter settingsGetter,
            IProgramSettingsSetter settingsSetter,
            IEnumerable<IBufermanPlugin> plugins,
            IBufer bufer)
        {
            this._settingsGetter = settingsGetter;
            this._settingsSetter = settingsSetter;

            this._clipboardBuferService = clipboardBuferService;
            this._bufermanHost = bufermanHost;
            this._bufer = bufer;
            this._buferSelectionHandlerFactory = buferSelectionHandlerFactory;
            this._fileStorage = fileStorage;

            var formats = this._bufer.ViewModel.Clip.GetFormats();

            string buferTitle = null;

            var clipFiles = this._bufer.ViewModel.Clip.GetData(DataFormats.FileDrop) as string[];
            if (clipFiles != null && clipFiles.Length > 0)
            {
                var firstFile = clipFiles.First();
                var onlyFolders = clipFiles.Select(f => this._fileStorage.GetFileAttributes(f).HasFlag(FileAttributes.Directory))
                    .All(f => f);

                if (clipFiles.Length == 1)
                {
                    buferTitle = this._MakeSpecialBuferText(
                        firstFile.Length < settingsGetter.MaxFilePathLengthForBuferTitle ?
                        firstFile :
                        (onlyFolders ? Resource.FolderBufer : Resource.FileBufer));// TODO (m) these resources are duplicated in BuferMAN.Application project
                }
                else
                {
                    buferTitle = this._MakeSpecialBuferText($"{(onlyFolders ? Resource.FoldersBufer : Resource.FilesBufer)} ({clipFiles.Length})");
                }
            }
            else
            {
                if (formats.Contains(ClipboardFormats.CUSTOM_IMAGE_FORMAT) ||
                    formats.Contains(ClipboardFormats.FILE_CONTENTS_FORMAT))
                {
                    this._bufer.ApplyFontStyle(FontStyle.Italic | FontStyle.Bold);
                }
            }

            string buferText = buferTitle ?? this._bufer.ViewModel.TextRepresentation;
            if (string.IsNullOrWhiteSpace(buferText))
            {
                this._bufer.ApplyFontStyle(FontStyle.Italic | FontStyle.Bold);
                this._bufer.ViewModel.IsChangeTextAvailable = false;

                if (buferText == null)
                {
                    if (formats.Any(f => string.Equals(f, ClipboardFormats.VISUAL_STUDIO_PROJECT_ITEMS, StringComparison.InvariantCultureIgnoreCase)))
                    {
                        buferText = "<< VISUAL STUDIO project items >>";
                    }
                    else
                    {
                        buferText = Resource.NotTextBufer;
                        // TODO (l) maybe track such cases and/or ask user to send info (at least formats list) of this bufer?
                        // Or user can think of some name for this combination of formats
                    }
                }
                else
                {
                    buferText = this._MakeSpecialBuferText($"{buferText.Length}   {Resource.WhiteSpaces}");
                    this._bufer.ViewModel.TooltipTitle = buferText;
                }
            }
            this._bufer.ViewModel.DefaultBackColor = this._bufer.BackColor;
            buferText = buferText.Trim();
            this._bufer.SetText(buferText);
            this._bufer.ViewModel.OriginBuferTitle = buferText;

            this._bufer.SetMouseOverToolTip(this._bufer.ViewModel.TextRepresentation);
            this._bufer.ViewModel.TooltipTitle = this._bufer.ViewModel.TooltipTitle ?? buferTitle;

            if (!string.IsNullOrWhiteSpace(this._bufer.ViewModel.TooltipTitle))
            {
                this._bufer.MouseOverTooltip.ToolTipTitle = this._bufer.ViewModel.TooltipTitle;
                this._bufer.FocusTooltip.ToolTipTitle = this._bufer.ViewModel.TooltipTitle;
            }

            IBuferTypeMenuGenerator buferTypeMenuGenerator = null;
            if (Uri.TryCreate(this._bufer.ViewModel.OriginBuferTitle, UriKind.Absolute, out var uriResult)
                        && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps))
            {
                buferTypeMenuGenerator = new HttpUrlBuferMenuGenerator(this._bufer.ViewModel.OriginBuferTitle, this._settingsGetter, this._settingsSetter);
            }
            else
            {
                var files = this._bufer.ViewModel.Clip.GetData(DataFormats.FileDrop) as string[];
                if (files != null && files.Length > 0)
                {
                    var firstFile = files.First();

                    if (files.Length == 1)
                    {
                        buferTypeMenuGenerator = new FileBuferMenuGenerator(firstFile);
                    }
                }
            }

            if (formats.Contains(ClipboardFormats.CUSTOM_IMAGE_FORMAT))
            {
                var image = this._bufer.ViewModel.Clip.GetData(ClipboardFormats.CUSTOM_IMAGE_FORMAT) as Image;
                if (image != null)
                {
                    this._bufer.ViewModel.Representation = image;
                    this._bufer.MouseOverTooltip.IsBalloon = false;
                    this._bufer.MouseOverTooltip.OwnerDraw = true;
                    this._bufer.MouseOverTooltip.Popup += (object sender, PopupEventArgs e) =>
                    {
                        e.ToolTipSize = new Size((int)(image.Width * IMAGE_SCALE), (int)(image.Height * IMAGE_SCALE));
                    };
                    this._bufer.MouseOverTooltip.Draw += (object sender, DrawToolTipEventArgs e) =>
                    {
                        using (var b = new TextureBrush(new Bitmap(image)))
                        {
                            b.ScaleTransform(IMAGE_SCALE, IMAGE_SCALE);

                            var g = e.Graphics;
                            g.FillRectangle(b, e.Bounds);
                        }
                    };
                }
            }

            this._bufer.AddOnFocusHandler(this._Bufer_GotFocus);
            this._bufer.AddOnUnfocusHandler(this._Bufer_LostFocus);

            var buferSelectionHandler = this._buferSelectionHandlerFactory.CreateHandler(this._bufer, bufermanHost);
            if (this._settingsGetter.IsBuferClickingExplained)
            {
                this._bufer.AddOnClickHandler(buferSelectionHandler.DoOnClipSelection);
            }
            else
            {
                this._bufer.AddOnClickHandler((object sender, EventArgs e) =>
                {
                    if (this._settingsGetter.IsBuferClickingExplained)
                    {
                        buferSelectionHandler.DoOnClipSelection(sender, e);
                    }
                    else
                    {
                        this._bufermanHost.UserInteraction.ShowPopup(Resource.BuferClickingExplanationText, Application.ProductName);
                        this._settingsSetter.MarkThatBuferClickingWasExplained();
                    }
                });
            }

            var buferContextMenuState = new BuferContextMenuState(
                clipboardBuferService,
                buferSelectionHandler,
                bufermanHost,
                () => Resource.MenuPin, // TODO (m) remove these actions
                () => Resource.MenuUnpin,
                () => Resource.MenuAddedToFile,
                bufer);

            bufer.ContextMenu = buferContextMenuGenerator.GenerateContextMenuItems(buferContextMenuState, bufermanHost, buferTypeMenuGenerator);

            foreach (var plugin in plugins) if (plugin.Available && plugin.Enabled)
                {
                    try
                    {
                        plugin.UpdateBuferItem(buferContextMenuState);
                    }
                    catch (Exception exc)
                    {
                        bufermanHost
                            .UserInteraction
                            .ShowPopup(exc.Message, plugin.Name);
                    }
                }
        }