/* * WPCleaner: A tool to help on Wikipedia maintenance tasks. * Copyright (C) 2013 Nicolas Vervelle * * See README.txt file for licensing information. */ package org.wikipediacleaner.gui.swing.component; import javax.swing.AbstractButton; import javax.swing.JPopupMenu; import javax.swing.text.AttributeSet; import javax.swing.text.Element; import org.wikipediacleaner.api.constants.EnumWikipedia; import org.wikipediacleaner.api.data.DataManager; import org.wikipediacleaner.api.data.Namespace; import org.wikipediacleaner.api.data.Page; import org.wikipediacleaner.api.data.PageAnalysis; import org.wikipediacleaner.api.data.PageElementTemplate; import org.wikipediacleaner.api.data.TemplateMatcher; import org.wikipediacleaner.gui.swing.basic.BasicWindow; import org.wikipediacleaner.gui.swing.menu.MWPaneDisambiguationMenuCreator; import org.wikipediacleaner.utils.Configuration; import org.wikipediacleaner.utils.ConfigurationValueBoolean; /** * A popup menu listener for MediaWikiPane for disambiguation. */ public class MWPaneDisambiguationPopupListener extends MWPanePopupListener { public MWPaneDisambiguationPopupListener( EnumWikipedia wikipedia, BasicWindow window) { super(wikipedia, window); } /** * Construct popup menu. * * @param textPane Text pane. * @param position Position in text. * @param pageAnalysis Page analysis. */ @Override protected JPopupMenu createPopup( MWPane textPane, int position, PageAnalysis pageAnalysis) { if ((textPane == null) || (pageAnalysis == null)) { return null; } Element element = textPane.getStyledDocument().getCharacterElement(position); if (element == null) { return null; } int startOffset = MWPaneFormatter.getUUIDStartOffset(textPane, element); int endOffset = MWPaneFormatter.getUUIDEndOffet(textPane, element); // Retrieve main attributes AttributeSet attributes = element.getAttributes(); Object attrPage = attributes.getAttribute(MWPaneFormatter.ATTRIBUTE_PAGE); Object attrPageElement = attributes.getAttribute(MWPaneFormatter.ATTRIBUTE_PAGE_ELEMENT); Object attrTemplateMatcher = attributes.getAttribute(MWPaneFormatter.ATTRIBUTE_TEMPLATE_MATCHER); Object attrText = attributes.getAttribute(MWPaneFormatter.ATTRIBUTE_TEXT); Page page = (attrPage instanceof Page) ? (Page) attrPage : null; TemplateMatcher matcher = (attrTemplateMatcher instanceof TemplateMatcher) ? (TemplateMatcher) attrTemplateMatcher : null; MWPaneDisambiguationMenuCreator menu = new MWPaneDisambiguationMenuCreator(); // Manage TemplateMatcher if (attrPageElement instanceof PageElementTemplate) { PageElementTemplate template = (PageElementTemplate) attrPageElement; String templateTitle = getWikipedia().getWikiConfiguration().getPageTitle( Namespace.TEMPLATE, template.getTemplateName()); JPopupMenu popup = menu.createPopupMenu(templateTitle); if ((matcher != null) && (matcher.getExplanation() != null) && (matcher.getExplanation().length() > 0)) { menu.addDisabledText(popup, "→ " + matcher.getExplanation() + " ←"); } menu.addCurrentChapter(popup, position, pageAnalysis); menu.addSeparator(popup); Page templatePage = DataManager.getPage(getWikipedia(), templateTitle, null, null, null); menu.addReplaceTemplate( getWikipedia(), popup, template, matcher, page, pageAnalysis.getPage(), element, textPane); menu.addAnalyze(getWikipedia(), popup, page); menu.addAnalyze(getWikipedia(), popup, templatePage); menu.addView(getWikipedia(), popup, page, true); menu.addView(getWikipedia(), popup, templatePage, true); menu.addDisambiguation(getWikipedia(), popup, page); menu.addItemReloadLinks(getWikipedia(), popup, page, getWindow()); return popup; } if ((!(attrPage instanceof Page)) || (!(attrText instanceof String))) { return null; } // Menu name String text = (String) attrText; JPopupMenu popup = menu.createPopupMenu(null); // Create sub menus Configuration config = Configuration.getConfiguration(); AbstractButton addNote = null; if (config.getBoolean(null, ConfigurationValueBoolean.ADD_NOTE_FOR_HELP)) { addNote = textPane.getCheckBoxAddNote(); } menu.addReplaceLink(getWikipedia(), popup, page, text, element, textPane); menu.addItemRemoveLink(popup, text, textPane, startOffset, endOffset); menu.addMarkAsNormal(getWikipedia(), popup, page, text, element, textPane); menu.addMarkAsNeedingHelp(getWikipedia(), popup, page, text, element, textPane, addNote); menu.addLinkText(getWikipedia(), popup, page, text, element, textPane); menu.addSeparator(popup); if (page != null) { menu.addDisabledText(popup, page.getTitle()); } menu.addCurrentChapter(popup, position, pageAnalysis); menu.addSeparator(popup); menu.addAnalyze(getWikipedia(), popup, page); menu.addView(getWikipedia(), popup, page, true); menu.addDisambiguation(getWikipedia(), popup, page); menu.addItemReloadLinks(getWikipedia(), popup, page, getWindow()); return popup; } }