void (@NotNull ToolWindow toolWindow) { // Create panels ContentFactory contentFactory = ContentFactory.getInstance(); Content allTodosContent = contentFactory.createContent(null, IdeUICustomization.getInstance().projectMessage("tab.title.project"), false); toolWindow.setHelpId("find.todoList"); myAllTodos = new TodoPanel(this, state.all, false, allTodosContent) { @Override protected TodoTreeBuilder createTreeBuilder(@NotNull JTree tree, @NotNull Project project) { AllTodosTreeBuilder builder = createAllTodoBuilder(tree, project); builder.init(); return builder; } }; allTodosContent.setComponent(myAllTodos); allTodosContent.setPreferredFocusableComponent(myAllTodos.getTree()); Disposer.register(this, myAllTodos); if (toolWindow instanceof ToolWindowEx) { DefaultActionGroup group = new DefaultActionGroup() { { getTemplatePresentation().setText(IdeBundle.messagePointer("group.view.options")); setPopup(true); add(myAllTodos.createAutoScrollToSourceAction()); addSeparator(); addAll(myAllTodos.createGroupByActionGroup()); } }; toolWindow.setAdditionalGearActions(group); } Content currentFileTodosContent = contentFactory.createContent(null, IdeBundle.message("title.todo.current.file"), false); myCurrentFileTodosPanel = new CurrentFileTodosPanel(this, state.current, currentFileTodosContent) { @Override protected TodoTreeBuilder createTreeBuilder(@NotNull JTree tree, @NotNull Project project) { CurrentFileTodosTreeBuilder builder = new CurrentFileTodosTreeBuilder(tree, project); builder.init(); return builder; } }; Disposer.register(this, myCurrentFileTodosPanel); currentFileTodosContent.setComponent(myCurrentFileTodosPanel); currentFileTodosContent.setPreferredFocusableComponent(myCurrentFileTodosPanel.getTree()); String tabName = myChangesSupport.getTabName(myProject); myChangeListTodosContent = contentFactory.createContent(null, tabName, false); myChangeListTodosPanel = myChangesSupport.createPanel(this, state.current, myChangeListTodosContent); if (myChangeListTodosPanel != null) { Disposer.register(this, myChangeListTodosPanel); myChangeListTodosContent.setComponent(myChangeListTodosPanel); myChangeListTodosContent.setPreferredFocusableComponent(myChangeListTodosPanel.getTree()); } Content scopeBasedTodoContent = contentFactory.createContent(null, LangBundle.message("tab.title.scope.based"), false); myScopeBasedTodosPanel = new ScopeBasedTodosPanel(this, state.current, scopeBasedTodoContent); Disposer.register(this, myScopeBasedTodosPanel); scopeBasedTodoContent.setComponent(myScopeBasedTodosPanel); myToolWindow = toolWindow; myContentManager = toolWindow.getContentManager(); myContentManager.addContent(allTodosContent); myContentManager.addContent(currentFileTodosContent); myContentManager.addContent(scopeBasedTodoContent); if (myChangesSupport.isContentVisible(myProject)) { myChangesListener.setVisible(true); myContentManager.addContent(myChangeListTodosContent); } for (Content content : myNotAddedContent) { myContentManager.addContent(content); } myChangeListTodosContent.setCloseable(false); allTodosContent.setCloseable(false); currentFileTodosContent.setCloseable(false); scopeBasedTodoContent.setCloseable(false); Content content = myContentManager.getContent(state.selectedIndex); myContentManager.setSelectedContent(content == null ? allTodosContent : content); myPanels.add(myAllTodos); if (myChangeListTodosPanel != null) { myPanels.add(myChangeListTodosPanel); } myPanels.add(myCurrentFileTodosPanel); myPanels.add(myScopeBasedTodosPanel); MyVisibilityListener visibilityListener = new MyVisibilityListener(); myProject.getMessageBus().connect(this).subscribe(ToolWindowManagerListener.TOPIC, visibilityListener); toolWindow.addContentManagerListener(visibilityListener); }