本文整理汇总了Python中ninja_ide.gui.ide.IDE.register_signals方法的典型用法代码示例。如果您正苦于以下问题:Python IDE.register_signals方法的具体用法?Python IDE.register_signals怎么用?Python IDE.register_signals使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ninja_ide.gui.ide.IDE
的用法示例。
在下文中一共展示了IDE.register_signals方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(_ToolsDock, self).__init__(parent)
#Register signals connections
connections = (
{'target': 'main_container',
'signal_name': "findOcurrences(QString)",
'slot': self.show_find_occurrences},
{'target': 'main_container',
'signal_name': "updateFileMetadata()",
'slot': self.show_find_occurrences},
{'target': 'main_container',
'signal_name': "findOcurrences(QString)",
'slot': self.show_find_occurrences},
{'target': 'main_container',
'signal_name': "runFile(QString)",
'slot': self.execute_file},
{'target': 'explorer_container',
'signal_name': "removeProjectFromConsole(QString)",
'slot': self.remove_project_from_console},
{'target': 'explorer_container',
'signal_name': "addProjectToConsole(QString)",
'slot': self.add_project_to_console},
)
IDE.register_signals('tools_dock', connections)
IDE.register_service("tools_dock", self)
示例2: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(ExplorerContainer, self).__init__(Qt.Vertical, parent)
self.create_tab_widget()
IDE.register_service('explorer_container', self)
connections = (
{'target': 'central_container',
'signal_name': "splitterBaseRotated()",
'slot': self.rotate_tab_position},
{'target': 'central_container',
'signal_name': 'splitterBaseRotated()',
'slot': self.rotate_tab_position},
)
self._point = None
self._widget_index = 0
self.menu = QMenu()
self.actionSplit = self.menu.addAction(translations.TR_SPLIT_TAB)
self.connect(
self.actionSplit, SIGNAL("triggered()"), self._split_widget)
self.actionUndock = self.menu.addAction(translations.TR_UNDOCK)
self.connect(
self.actionUndock, SIGNAL("triggered()"), self._undock_widget)
self.actionCloseSplit = self.menu.addAction(translations.TR_CLOSE_SPLIT)
self.connect(
self.actionCloseSplit, SIGNAL("triggered()"), self._close_split)
self.menuMoveToSplit = self.menu.addMenu(translations.TR_MOVE_TO_SPLIT)
IDE.register_signals('explorer_container', connections)
self.__created = True
示例3: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(CentralWidget, self).__init__(parent)
self.parent = parent
#This variables are used to save the splitter sizes before hide
self._splitterBaseSizes = None
self._splitterInsideSizes = None
self.lateralPanel = LateralPanel()
self._add_functions = {
"central": self._insert_widget_region0,
"lateral": self._insert_widget_region1,
}
self._items = {}
hbox = QHBoxLayout(self)
hbox.setContentsMargins(0, 0, 0, 0)
hbox.setSpacing(0)
#Create Splitters to divide the UI 3 regions
self._splitterBase = dynamic_splitter.DynamicSplitter(Qt.Horizontal)
self._splitterInside = dynamic_splitter.DynamicSplitter(Qt.Vertical)
self._splitterBase.addWidget(self._splitterInside)
#Add to Main Layout
hbox.addWidget(self._splitterBase)
connects = (
{"target": "main_container",
"signal_name": "cursorPositionChange(int, int)",
"slot": self.update_column_number},
)
IDE.register_service('central_container', self)
IDE.register_signals("central_container", connects)
示例4: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(ProjectTreeColumn, self).__init__(parent,
Qt.WindowStaysOnTopHint)
vbox = QVBoxLayout(self)
vbox.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
vbox.setContentsMargins(0, 0, 0, 0)
self._buttons = []
self._combo_project = QComboBox()
self._combo_project.setMinimumHeight(30)
self._combo_project.setContextMenuPolicy(Qt.CustomContextMenu)
vbox.addWidget(self._combo_project)
self._projects_area = QStackedLayout()
logger.debug("This is the projects area")
logger.debug(self._projects_area)
vbox.addLayout(self._projects_area)
self.projects = []
self._combo_project.currentIndexChanged[int].connect(self._change_current_project)
self._combo_project.customContextMenuRequested['const QPoint &'].connect(self.context_menu_for_root)
connections = (
{'target': 'main_container',
'signal_name': 'addToProject',#(QString)
'slot': self._add_file_to_project},
{'target': 'main_container',
'signal_name': 'showFileInExplorer',#(QString)
'slot': self._show_file_in_explorer},
)
IDE.register_service('projects_explorer', self)
IDE.register_signals('projects_explorer', connections)
ExplorerContainer.register_tab(translations.TR_TAB_PROJECTS, self)
示例5: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(_MainContainer, self).__init__(parent)
self._parent = parent
self.stack = QStackedLayout(self)
self.stack.setStackingMode(QStackedLayout.StackAll)
self.splitter = dynamic_splitter.DynamicSplitter()
self.setAcceptDrops(True)
self.tabs_handler = tabs_handler.TabsHandler(self)
#documentation browser
self.docPage = None
#Code Navigation
self._locator = locator.GoToDefinition()
self.__codeBack = []
self.__codeForward = []
self.__bookmarksFile = ''
self.__bookmarksPos = -1
self.__breakpointsFile = ''
self.__breakpointsPos = -1
self.__operations = {
0: self._navigate_code_jumps,
1: self._navigate_bookmarks,
2: self._navigate_breakpoints}
self.connect(self, SIGNAL("locateFunction(QString, QString, bool)"),
self.locate_function)
IDE.register_service('main_container', self)
#Register signals connections
connections = (
{'target': 'menu_file',
'signal_name': 'openFile(QString)',
'slot': self.open_file},
{'target': 'explorer_container',
'signal_name': 'goToDefinition(int)',
'slot': self.editor_go_to_line},
{'target': 'explorer_container',
'signal_name': 'pep8Activated(bool)',
'slot': self.reset_pep8_warnings},
{'target': 'explorer_container',
'signal_name': 'lintActivated(bool)',
'slot': self.reset_lint_warnings},
)
IDE.register_signals('main_container', connections)
self.selector = main_selector.MainSelector(self)
self.add_widget(self.selector)
if settings.SHOW_START_PAGE:
self.show_start_page()
self.connect(self.selector, SIGNAL("changeCurrent(int)"),
self._change_current_stack)
self.connect(self.selector, SIGNAL("ready()"),
self._selector_ready)
示例6: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self):
super(_StatusBar, self).__init__()
self._widgetStatus = QWidget()
vbox = QVBoxLayout(self._widgetStatus)
vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0)
#Search Layout
self._searchWidget = SearchWidget(self)
vbox.addWidget(self._searchWidget)
#Replace Layout
self._replaceWidget = ReplaceWidget(self)
vbox.addWidget(self._replaceWidget)
self._replaceWidget.setVisible(False)
#Code Locator
self._codeLocator = locator.CodeLocatorWidget(self)
vbox.addWidget(self._codeLocator)
self._codeLocator.setVisible(False)
#File system completer
self._fileSystemOpener = FileSystemOpener()
vbox.addWidget(self._fileSystemOpener)
self._fileSystemOpener.setVisible(False)
self.addWidget(self._widgetStatus)
# Not Configurable Shortcuts
shortEscStatus = QShortcut(QKeySequence(Qt.Key_Escape), self)
self.connect(self, SIGNAL("messageChanged(QString)"), self.message_end)
self.connect(self._replaceWidget._btnCloseReplace, SIGNAL("clicked()"),
lambda: self._replaceWidget.setVisible(False))
self.connect(self._replaceWidget._btnReplace, SIGNAL("clicked()"),
self.replace)
self.connect(self._replaceWidget._btnReplaceAll, SIGNAL("clicked()"),
self.replace_all)
self.connect(self._replaceWidget._btnReplaceSelection,
SIGNAL("clicked()"), self.replace_selected)
self.connect(self._fileSystemOpener.btnClose, SIGNAL("clicked()"),
self.hide_status)
self.connect(self._fileSystemOpener, SIGNAL("requestHide()"),
self.hide_status)
self.connect(shortEscStatus, SIGNAL("activated()"), self.hide_status)
IDE.register_service('status_bar', self)
#Register signals connections
connections = (
{'target': 'main_container',
'signal_name': 'currentEditorChanged(QString)',
'slot': self.handle_tab_changed},
{'target': 'main_container',
'signal_name': 'updateLocator(QString)',
'slot': self.explore_file_code},
{'target': 'explorer_container',
'signal_name': 'updateLocator()',
'slot': self.explore_code},
)
IDE.register_signals('status_bar', connections)
示例7: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(ProjectTreeColumn, self).__init__(parent)
vbox = QVBoxLayout(self)
vbox.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0)
self._buttons = []
frame = QFrame()
frame.setObjectName("actionbar")
box = QVBoxLayout(frame)
box.setContentsMargins(1, 1, 1, 1)
box.setSpacing(0)
self._combo_project = QComboBox()
self._combo_project.setSizePolicy(
QSizePolicy.Expanding, QSizePolicy.Fixed)
self._combo_project.setSizeAdjustPolicy(
QComboBox.AdjustToMinimumContentsLengthWithIcon)
self._combo_project.setObjectName("combo_projects")
box.addWidget(self._combo_project)
vbox.addWidget(frame)
self._combo_project.setContextMenuPolicy(Qt.CustomContextMenu)
self._projects_area = QStackedLayout()
logger.debug("This is the projects area")
vbox.addLayout(self._projects_area)
# Empty widget
self._empty_proj = QLabel(translations.TR_NO_PROJECTS)
self._empty_proj.setAlignment(Qt.AlignCenter)
self._empty_proj.setAutoFillBackground(True)
self._empty_proj.setBackgroundRole(QPalette.Base)
self._projects_area.addWidget(self._empty_proj)
self._projects_area.setCurrentWidget(self._empty_proj)
self.projects = []
self._combo_project.activated.connect(
self._change_current_project)
self._combo_project.customContextMenuRequested[
'const QPoint&'].connect(self.context_menu_for_root)
connections = (
{
"target": "main_container",
"signal_name": "addToProject",
"slot": self._add_file_to_project
},
{
"target": "main_container",
"signal_name": "showFileInExplorer",
"slot": self._show_file_in_explorer
},
)
IDE.register_service('projects_explorer', self)
IDE.register_signals('projects_explorer', connections)
ExplorerContainer.register_tab(translations.TR_TAB_PROJECTS, self)
示例8: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super().__init__(parent)
self.setAcceptDrops(True)
self._vbox = QVBoxLayout(self)
self._vbox.setContentsMargins(0, 0, 0, 0)
self._vbox.setSpacing(0)
self.stack = QStackedLayout()
self.stack.setStackingMode(QStackedLayout.StackAll)
self._vbox.addLayout(self.stack)
self.splitter = dynamic_splitter.DynamicSplitter()
self._files_handler = files_handler.FilesHandler(self)
# Code Navigation
self.__code_back = []
self.__code_forward = []
self.__operations = {
0: self._navigate_code_jumps,
1: self._navigate_bookmarks
}
# Recent files list
self.__last_opened_files = []
# QML UI
self._add_file_folder = add_file_folder.AddFileFolderWidget(self)
if settings.SHOW_START_PAGE:
self.show_start_page()
IDE.register_service("main_container", self)
# Register signals connections
connections = (
# {
# "target": "main_container",
# "signal_name": "updateLocator",
# "slot": self._explore_code
# },
{
"target": "filesystem",
"signal_name": "projectOpened",
"slot": self._explore_code
},
# {
# "target": "projects_explore",
# "signal_name": "updateLocator",
# "slot": self._explore_code
# }
{
"target": "filesystem",
"signal_name": "projectClosed",
"slot": self._explore_code
}
)
IDE.register_signals("main_container", connections)
fhandler_short = QShortcut(QKeySequence(Qt.CTRL + Qt.Key_Tab), self)
fhandler_short.activated.connect(self.show_files_handler)
示例9: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(_MainContainer, self).__init__(parent)
self._parent = parent
self._vbox = QVBoxLayout(self)
self._vbox.setContentsMargins(0, 0, 0, 0)
self._vbox.setSpacing(0)
self.stack = QStackedLayout()
self.stack.setStackingMode(QStackedLayout.StackAll)
self._vbox.addLayout(self.stack)
self.splitter = dynamic_splitter.DynamicSplitter()
self.setAcceptDrops(True)
self._files_handler = files_handler.FilesHandler(self)
self._add_file_folder = add_file_folder.AddFileFolderWidget(self)
# documentation browser
self.docPage = None
# Code Navigation
self._locator = locator.GoToDefinition()
self.__codeBack = []
self.__codeForward = []
self.__bookmarksFile = ""
self.__bookmarksPos = -1
self.__breakpointsFile = ""
self.__breakpointsPos = -1
self.__operations = {0: self._navigate_code_jumps, 1: self._navigate_bookmarks, 2: self._navigate_breakpoints}
self.connect(self, SIGNAL("locateFunction(QString, QString, bool)"), self.locate_function)
IDE.register_service("main_container", self)
# Register signals connections
connections = (
{"target": "menu_file", "signal_name": "openFile(QString)", "slot": self.open_file},
{"target": "explorer_container", "signal_name": "goToDefinition(int)", "slot": self.editor_go_to_line},
{"target": "explorer_container", "signal_name": "pep8Activated(bool)", "slot": self.reset_pep8_warnings},
{"target": "explorer_container", "signal_name": "lintActivated(bool)", "slot": self.reset_lint_warnings},
)
IDE.register_signals("main_container", connections)
self.selector = main_selector.MainSelector(self)
self._opening_dialog = False
self.add_widget(self.selector)
if settings.SHOW_START_PAGE:
self.show_start_page()
self.connect(self.selector, SIGNAL("changeCurrent(int)"), self._change_current_stack)
self.connect(self.selector, SIGNAL("removeWidget(int)"), self._remove_item_from_stack)
self.connect(self.selector, SIGNAL("ready()"), self._selector_ready)
self.connect(self.selector, SIGNAL("animationCompleted()"), self._selector_animation_completed)
self.connect(self, SIGNAL("closeDialog(PyQt_PyObject)"), self.remove_widget)
示例10: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self):
super(_StatusBar, self).__init__()
self.current_status = _STATUSBAR_STATE_SEARCH
vbox = QVBoxLayout(self)
vbox.setContentsMargins(0, 0, 0, 0)
if settings.IS_MAC_OS:
vbox.setSpacing(0)
else:
vbox.setSpacing(3)
#Search Layout
self._searchWidget = SearchWidget()
vbox.addWidget(self._searchWidget)
#Replace Layout
self._replaceWidget = ReplaceWidget()
vbox.addWidget(self._replaceWidget)
self._replaceWidget.setVisible(False)
#File system completer
self._fileSystemOpener = FileSystemOpener()
vbox.addWidget(self._fileSystemOpener)
self._fileSystemOpener.setVisible(False)
# Not Configurable Shortcuts
shortEscStatus = QShortcut(QKeySequence(Qt.Key_Escape), self)
self.connect(shortEscStatus, SIGNAL("activated()"), self.hide_status)
self.connect(self._searchWidget._btnClose, SIGNAL("clicked()"),
self.hide_status)
self.connect(self._replaceWidget._btnCloseReplace, SIGNAL("clicked()"),
lambda: self._replaceWidget.setVisible(False))
self.connect(self._fileSystemOpener.btnClose, SIGNAL("clicked()"),
self.hide_status)
self.connect(self._fileSystemOpener, SIGNAL("requestHide()"),
self.hide_status)
#Register signals connections
connections = (
{'target': 'main_container',
'signal_name': 'currentEditorChanged(QString)',
'slot': self._handle_tab_changed},
{'target': 'main_container',
'signal_name': 'updateLocator(QString)',
'slot': self._explore_file_code},
{'target': 'filesystem',
'signal_name': 'projectOpened(QString)',
'slot': self._explore_code},
{'target': 'filesystem',
'signal_name': 'projectClosed(QString)',
'slot': self._explore_code},
)
IDE.register_signals('status_bar', connections)
IDE.register_service('status_bar', self)
示例11: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(_ToolsDock, self).__init__(parent)
#Register signals connections
connections = (
{'target': 'main_container',
'signal_name': "findOcurrences(QString)",
'slot': self.show_find_occurrences},
{'target': 'main_container',
'signal_name': "runFile(QString)",
'slot': self.execute_file},
)
IDE.register_signals('tools_dock', connections)
IDE.register_service("tools_dock", self)
示例12: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(ExplorerContainer, self).__init__(parent)
self.create_tab_widget()
IDE.register_service('explorer_container', self)
connections = (
{'target': 'central_container',
'signal_name': "splitterBaseRotated()",
'slot': self.rotate_tab_position},
{'target': 'central_container',
'signal_name': 'splitterBaseRotated()',
'slot': self.rotate_tab_position},
)
IDE.register_signals('explorer_container', connections)
self.__created = True
示例13: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self):
QWidget.__init__(self)
self.__programs = []
vbox = QVBoxLayout(self)
vbox.setContentsMargins(0, 0, 0, 0)
vbox.setSpacing(0)
connections = (
{
"target": "tools_dock",
"signal_name": "executeFile",
"slot": self.execute_file
},
{
"target": "tools_dock",
"signal_name": "executeProject",
"slot": self.execute_project
},
{
"target": "tools_dock",
"signal_name": "executeSelection",
"slot": self.execute_selection
},
{
"target": "tools_dock",
"signal_name": "stopApplication",
"slot": self.kill_application
}
)
IDE.register_signals("tools_dock", connections)
self._tabs = QTabWidget()
self._tabs.setTabsClosable(True)
self._tabs.setMovable(True)
self._tabs.setDocumentMode(True)
vbox.addWidget(self._tabs)
# Menu for tab
self._tabs.tabBar().setContextMenuPolicy(Qt.CustomContextMenu)
self._tabs.tabBar().customContextMenuRequested.connect(
self._menu_for_tabbar)
self._tabs.tabCloseRequested.connect(self.close_tab)
IDE.register_service("run_widget", self)
_ToolsDock.register_widget(translations.TR_OUTPUT, self)
示例14: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, *args, **kwargs):
super(ProjectTreeColumn, self).__init__(*args, **kwargs)
#self._widget = QWidget()
self._layout = QVBoxLayout()
self._layout.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
self._layout.setContentsMargins(0, 0, 0, 0)
self._layout.setSpacing(0)
self.setLayout(self._layout)
self._vbox = QVBoxLayout()
self._vbox.setContentsMargins(0, 0, 0, 0)
self._vbox.setSpacing(0)
self._vbox.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
self._buttons = []
self._projects_area = QWidget()
logger.debug("This is the projects area")
logger.debug(self._projects_area)
self._projects_area.setLayout(self._vbox)
self._scroll_area = QScrollArea()
self.layout().addWidget(self._scroll_area)
self._scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self._scroll_area.setWidgetResizable(True)
self._scroll_area.setEnabled(True)
self._scroll_area.setWidget(self._projects_area)
self._scroll_area.setGeometry(self.geometry())
#self._projects_area.setGeometry(self.geometry())
self._vbox.setGeometry(self.geometry())
self.projects = []
self._active_project = None
#for each_test in range(50):
# button = QPushButton('Test%d' % each_test)
# self._buttons.append(button)
# self._projects_area.layout().addWidget(button)
connections = (
{'target': 'main_container',
'signal_name': 'addToProject(QString)',
'slot': self._add_file_to_project},
)
IDE.register_service('projects_explorer', self)
IDE.register_signals('projects_explorer', connections)
ExplorerContainer.register_tab(translations.TR_TAB_PROJECTS, self)
示例15: __init__
# 需要导入模块: from ninja_ide.gui.ide import IDE [as 别名]
# 或者: from ninja_ide.gui.ide.IDE import register_signals [as 别名]
def __init__(self, parent=None):
super(ProjectTreeColumn, self).__init__(parent,
Qt.WindowStaysOnTopHint)
self._layout = QVBoxLayout()
self._layout.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
self._layout.setContentsMargins(0, 0, 0, 0)
self._layout.setSpacing(0)
self.setLayout(self._layout)
self._vbox = QVBoxLayout()
self._vbox.setContentsMargins(0, 0, 0, 0)
self._vbox.setSpacing(0)
self._vbox.setSizeConstraint(QVBoxLayout.SetDefaultConstraint)
self._buttons = []
self._projects_area = QWidget()
logger.debug("This is the projects area")
logger.debug(self._projects_area)
self._projects_area.setLayout(self._vbox)
self._scroll_area = QScrollArea()
self.layout().addWidget(self._scroll_area)
self._scroll_area.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOn)
self._scroll_area.setWidgetResizable(True)
self._scroll_area.setEnabled(True)
self._scroll_area.setWidget(self._projects_area)
self._scroll_area.setGeometry(self.geometry())
self._vbox.setGeometry(self.geometry())
self.projects = []
self._active_project = None
connections = (
{'target': 'main_container',
'signal_name': 'addToProject(QString)',
'slot': self._add_file_to_project},
{'target': 'main_container',
'signal_name': 'showFileInExplorer(QString)',
'slot': self._show_file_in_explorer},
)
IDE.register_service('projects_explorer', self)
IDE.register_signals('projects_explorer', connections)
ExplorerContainer.register_tab(translations.TR_TAB_PROJECTS, self)