Изменить текст на кнопке в заголовке затмения на лету - PullRequest
3 голосов
/ 24 июня 2009

Я создаю представление в eclipse для отображения следов стека, и я хочу, чтобы представление было доступно с помощью кнопки в заголовке. Поэтому я создаю расширение с использованием фреймворка plugin.xml, например, вот так:

<extension
    point="org.eclipse.ui.commands">
  <command
        categoryId="com.commands.category"
        id="commands.tracing"
        name="0 Traces">
  </command>
 </extension>

Это создаст кнопку с «0 следами» в качестве текста. Однако я хочу увеличивать число в кнопке с каждой трассой, которую я собираю в слушателе. По сути, мне просто нужно иметь возможность редактировать кнопку в заголовке в файле Java, а не в файле plugin.xml. Но я понятия не имею, как это сделать! Я просмотрел справку eclipse SDK, но ничего не нашел. Пожалуйста, помогите!

Я также открыт для любого другого способа заставить это произойти в приложении, построенном на затмении, при условии, что текст изменяется и щелчок по тексту открывает представление.

1 Ответ

1 голос
/ 27 июня 2009

Я считаю, что заголовки используют значки, но я не уверен, что вы можете использовать текст. Вы можете добавить запись в контекстное (всплывающее) меню, в котором будет отображаться количество трассировок, и при щелчке по элементу запустите просмотр.

Я основал это на шаблоне Hello, World Command, который поставляется с Eclipse, и добавил вклад в меню.

Я расширил CompoundContributionItem, чтобы он выполнял роль меню следующим образом.


/**
 * Menu contribution which will update it's label to show the number of current
 * traces.
 */
public class TraceWindowContributionItem extends CompoundContributionItem {
    private static int demoTraceCount = 0;
    /**
     * Implemented to create a label which displays the number of traces.
     */
    @Override
    protected IContributionItem[] getContributionItems() {

        //Here is your dynamic label.
        final String label = getTraceCount() + " traces";

        //Create other items needed for creation of contribution.
        final String id = "test.dynamicContribution";
        final IServiceLocator serviceLocator = findServiceLocator();
        final String commandId = "test.commands.sampleCommand";
        final Map parameters = new HashMap();

        //Here is the contribution which will be displayed in the menu.
        final CommandContributionItem contribution = new CommandContributionItem(
                serviceLocator, id, commandId, parameters, null, null, null,
                label, null, null, SWT.NONE);

        return new IContributionItem[] { contribution };
    }

    /**
     * Demo method simply increments by 1 each time the popup is shown. Your
     * code would store or query for the actual trace count each time.
     * @return
     */
    private int getTraceCount() {
        return demoTraceCount++;
    }

    /**
     * Find the service locator to give to the contribution.
     */
    private IServiceLocator findServiceLocator() {
        return PlatformUI.getWorkbench().getActiveWorkbenchWindow();
    }
}

Теперь нам нужно подключить это к команде и обработчику, который запустит ваше представление.

Вот мой plugin.xml.


<!-- Wire up our dynamic menu contribution which will show the number of traces -->
<extension
     point="org.eclipse.ui.menus">
  <menuContribution
        locationURI="popup:org.eclipse.ui.popup.any?after=additions">
     <dynamic
           class="test.TraceWindowContributionItem"
           id="test.dynamicContribution">
     </dynamic>
  </menuContribution>
</extension>
<!-- Command and handler for launching the traces view -->
<extension
     point="org.eclipse.ui.commands">
  <category
        name="Sample Category"
        id="test.commands.category">
  </category>
  <command
        categoryId="test.commands.category"
        defaultHandler="test.handlers.SampleHandler"
        id="test.commands.sampleCommand"
        name="Sample Command">
  </command>
</extension>
<extension
     point="org.eclipse.ui.handlers">
  <handler
        commandId="test.commands.sampleCommand"
        class="test.handlers.SampleHandler">
  </handler>
</extension>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...