From: SourceForge.net <no...@so...> - 2008-06-28 15:58:43
|
Feature Requests item #2003560, was opened at 2008-06-26 15:48 Message generated for change (Comment added) made by daleanson You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350588&aid=2003560&group_id=588 Please note that this message will contain a full copy of the comment thread, including the initial issue submission, for this request, not just the latest update. Category: None Group: None Status: Closed Resolution: Accepted Priority: 5 Private: No Submitted By: Alan Ezust (ezust) Assigned to: Alan Ezust (ezust) Summary: DynamicContextMenuService Initial Comment: It would be nice if plugins could offer as a jEdit service, something derived from class DynamicContextMenuService. I have not decided exactly what this interface should be yet, but I have some ideas. Currently, jEdit regens the context menu whenever the properties are changed. This is not often enough. The context menu should be regenned each time the context menu is requested by the user. Further, when the context menu is genned, jedit core should look for all services offered that contain additional menus and display them (or not) in the context menu depending on whether the editpane is in the right state, or the cursor is over a particular word, etc. Plugins that offer this service need info about the EditPane (such as caret position, buffer mode, etc), so the ctor of the DynamicContextMenuService needs to include the EditPane, and there must be a getEditPane() method in the base class. ---------------------------------------------------------------------- >Comment By: Dale Anson (daleanson) Date: 2008-06-28 08:58 Message: Logged In: YES user_id=187628 Originator: NO Alan, I made some changes that seem to work well, at least for the SVN Plugin. I've attached another patch. This patch assumes your DynamicContextMenuService class exists and assumes your original patch has not been applied to either EditPane.java or GUIUtilities.java. I changed the API in GUIUtilities somewhat. It's backward compatible, but the main change is I added a couple of new methods for loading the popup menu that accept an EditPane as a parameter. If the EditPane parameter is not null, this tells GUIUtilities to load any menu items defined by DynamicContextMenuServices. If it is null, which is the case for backward compatibility, then the menu items defined by DynamicContextMenuServices are not loaded. I did this because otherwise a plugin that called GUIUtilities.loadPopupMenu(String name) to create its own menu would also get the service-defined menu items even if they are not pertinent. So the basic rule I came up with is if you want the service-defined menu items to be provided by GUIUtilities, you have to pass in a reference to an EditPane. Otherwise, you don't get them. The attached patch adjusts EditPane to pass in a reference to itself, so the service-defined menu items will be added to the popup. I discovered a problem, though, and it's the ContextMenu plugin. I didn't realize I had it loaded and it took me a while to figure out it was rebuilding the context menu after the EditPane and replacing it minus the service-provided menu items. The ContextMenu plugin will need some work to play nicely with these changes, but it doesn't look like a lot of work. ---------------------------------------------------------------------- Comment By: Alan Ezust (ezust) Date: 2008-06-27 07:12 Message: Logged In: YES user_id=935841 Originator: YES What I committed is not 100% finished yet. There may still be some bugs. If you want to try making it work with the svn plugin and perhaps help me resolve the outstanding issues, that would be appreciated. ---------------------------------------------------------------------- Comment By: Dale Anson (daleanson) Date: 2008-06-26 21:45 Message: Logged In: YES user_id=187628 Originator: NO Did you mean to close this? I'm getting it all to compile, and getting the service to work from the SVN Plugin. Things aren't quite right, though. I can get the menu item to appear in the text area context menu, but the actions don't work. For the SVN Plugin, the added menu item provides a pull out menu, and none of the actions on the pull out menu work. In the ProjectViewer context menu I now have 2 pull out menu items, probably because one is added by the service and one I'm still adding directly. In this context menu, the pull out menu items work, the other does not. I noticed too that there appears to be an empty menu item in all cases. It is clickable, but doesn't do anything. It's late, I'll look at this some more tomorrow, but thanks, Alan, this looks real close and is a great addition. ---------------------------------------------------------------------- Comment By: Alan Ezust (ezust) Date: 2008-06-26 21:19 Message: Logged In: YES user_id=935841 Originator: YES Committed svn rev# 12937. This one compiles. ---------------------------------------------------------------------- Comment By: Dale Anson (daleanson) Date: 2008-06-26 20:38 Message: Logged In: YES user_id=187628 Originator: NO I got around the line 90 problem like this for now: menu.add(dcms.createMenu(null); We still need to figure out how to get a reference to an EditPane for that line. ---------------------------------------------------------------------- Comment By: Dale Anson (daleanson) Date: 2008-06-26 20:32 Message: Logged In: YES user_id=187628 Originator: NO Yeah, I know about that being busy part, I've been meaning to work on the unit tests for a couple of weeks now, but just haven't had the time. I can't get your patch to compile. I'm looking into it now. The problem is on line 90 of the patch, it's missing a ; at the end of the line, but the bigger problem is on that same line menu.add(dcms.createMenu(pane); it references "pane", but there is no pane in scope. ---------------------------------------------------------------------- Comment By: Alan Ezust (ezust) Date: 2008-06-26 18:04 Message: Logged In: YES user_id=935841 Originator: YES Here is the idea... What do you think about it? File Added: dcms.patch ---------------------------------------------------------------------- Comment By: Alan Ezust (ezust) Date: 2008-06-26 16:15 Message: Logged In: YES user_id=935841 Originator: YES The DynamicContextMenuService does not exist yet. It's something I'm thinking about now. I think I will slide it in before pre15 comes out. When it's available, we can use the Subversion Plugin (and the VoxSpell plugin) as guinea pigs for offering derived types as jEdit services. Sorry I didn't respond when you brought it up earlier, my head was buried in other things. ---------------------------------------------------------------------- Comment By: Dale Anson (daleanson) Date: 2008-06-26 16:11 Message: Logged In: YES user_id=187628 Originator: NO This is an excellent idea -- I think. You're talking about the text area context menu, right? Assuming so, I added a "Subversion" item to it whenever the SVN Plugin is loaded. What I've done feels like a kludge. Essentially, I've set up the SVNPlugin class to derive from EBPlugin, then on every message it receives, it rebuilds the context menu for that text area and inserts a new item for the Subversion menu and submenu. I'm sure that if anyone else wanted to do the same thing in another plugin there would be problems. I'd asked on the dev list before I did this, but didn't really get a response about the right way to do it. I've got the latest jEdit code from subversion, but I don't find the DynamicContextMenuService you reference. Is it part of a plugin, or what? ---------------------------------------------------------------------- You can respond by visiting: https://sourceforge.net/tracker/?func=detail&atid=350588&aid=2003560&group_id=588 |