#java #swt #eclipse-rcp #rcp #cnf
#java #swt #eclipse-rcp #rcp #cnf
Вопрос:
В приложении RCP я хотел бы создать общее представление Navigator Framework, начиная только с ресурсов локальной файловой системы.
Я сделал это в одном проекте, который включает в себя подключаемый модуль org.eclipse.ui.ide. Однако это создает чрезмерно сложный пользовательский интерфейс, который не подходит для этого приложения. (Например, он добавляет около 20 панелей настроек, некоторые из которых связаны со сборками и контролем версий.)
Итак, теперь я пытаюсь сделать это без подключаемого модуля ~.ide — и без плагина org.eclipse.ui.navigator.resources, который зависит от него.
В приложении RCP мне удалось создать новый проект workspace (я думаю) с помощью приведенного ниже кода в плагине с расширениями ~ navigator.viewer, показанными ниже. Но в представлении CNF ничего не отображается.
Вопросы:
- Поскольку я исключаю подключаемый модуль org.eclipse.ui.navigator.resources, нужно ли мне определять моего собственного поставщика контента?
- Используется ли класс ResourceExtensionContentProvider в подключаемом модуле org.eclipse.ui.navigator.resources для реализации привязки содержимого org.eclipse.ui.navigator.resourceContent?
plugin.xml выдержка
<extension
point="org.eclipse.ui.navigator.viewer">
<viewerActionBinding
viewerId="com.mycompany.app.gen.workspace">
<includes>
<actionExtension pattern="org.eclipse.ui.navigator.resources.*" />
</includes>
</viewerActionBinding>
<viewerContentBinding
viewerId="com.dnastar.app.gen.workspace">
<includes>
<contentExtension pattern="org.eclipse.ui.navigator.resourceContent" />
<contentExtension pattern="org.eclipse.ui.navigator.resources.filters.*"/>
<contentExtension pattern="org.eclipse.ui.navigator.resources.linkHelper"/>
<contentExtension pattern="org.eclipse.ui.navigator.resources.workingSets"/>
</includes>
</viewerContentBinding>
</extension>
Код, используемый для создания нового проекта (включен для полноты):
Path path = new Path( sPath );
File filePath = new File( sPath );
String fileBaseName = filePath.getName();
String projectName = fileBaseName; // For now
IWorkspace workspace = ResourcesPlugin.getWorkspace();
IProjectDescription projDescr = workspace.newProjectDescription( projectName );
projDescr.setLocation( path );
IWorkspaceRoot root = workspace.getRoot();
IProject project = root.getProject( projectName );
try {
project.create( projDescr, null );
if ( ! project.isOpen() ) {
project.open( null );
}
} catch (CoreException e) {
MessageDialog.openError( Display.getCurrent().getActiveShell(),
"New Project Error", "Could not create new project." "n[" e "]");
}
Ответ №1:
Вместо использования класса CommonNavigator вам нужно расширить его, а затем переопределить метод getInitialInput(). Там возвращается IWorkspaceRoot
Комментарии:
1. По-прежнему ничего не отображается в окне навигатора. Добавлен подкласс CommonNavigator, а в getInitialInput() возвращен ResourcesPlugin.getWorkspace().getRoot(). В plugin.xml заменил класс представления CommonNavigator на подкласс. Спасибо за помощь. Я что-то упускаю?
2. Нет. Это должно сработать. Есть ли у вас какие-либо проекты в рабочей области? Если это так, я предлагаю вам исправить ошибку в Eclipse Bugzilla.
3. Нужно ли мне где-то предоставлять поставщика пользовательских меток?
4. В проекте, использующем подключаемые модули ~ide и ~navigator.resources, содержимое получается с помощью класса ~navigator.resources ResourceExtensionContentProvider.