def expand_tab_name(self, title): """Expand the tab title to differentiate files with the same name. The way it is currently implemented, it will only change the first conflicting title passed in, because it only searches until the new title isn't in the tab titles. """ if title == 'New Document': return elif title not in self.titles: self.titles.append(title) return indexes = [i for i in range(self.count()) if type(self.widget(i)) is editor.Editor and self.tabText(i) == title and self.widget(i).ID] # self.widget.ID returns the basename self.dontLoopInExpandTitle = True for i in indexes: newName = file_manager.create_path( file_manager.get_basename( file_manager.get_folder(self.widget(i).ID)), title) while newName in self.titles: # Keep prepending the folder name onto the title until it # does not conflict. path = self.widget(i).ID tempDir = path[:path.rfind(newName)] newName = file_manager.create_path( file_manager.get_basename( file_manager.get_folder(tempDir)), '..', title) self.titles.append(newName) self.setTabText(i, newName) self.dontLoopInExpandTitle = False
def _add_file_to_project(self, path): pathProject = [self.ide.explorer.get_actual_project()] addToProject = ui_tools.AddToProject(pathProject, self.ide) addToProject.exec_() if not addToProject.pathSelected: return editorWidget = self.ide.mainContainer.get_actual_editor() if not editorWidget.ID: name = unicode(QInputDialog.getText(None, self.tr("Add File To Project"), self.tr("File Name:"))[0]) if not name: QMessageBox.information(self, self.tr("Invalid Name"), self.tr("The file name is empty, please enter a name")) return else: name = file_manager.get_basename(editorWidget.ID) path = file_manager.create_path( unicode(addToProject.pathSelected), name) try: path = file_manager.store_file_content( path, editorWidget.get_text(), newFile=True) editorWidget.ID = path self.ide.explorer.add_existing_file(path) self.ide.change_window_title(path) name = file_manager.get_basename(path) self.ide.mainContainer.actualTab.setTabText( self.ide.mainContainer.actualTab.currentIndex(), name) editorWidget._file_saved() except file_manager.NinjaFileExistsException, ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % \ ex.filename))
def go_to_definition(self): self.dirty = True self.results = [] locations = self.get_locations() if self._isVariable: preResults = [ [file_manager.get_basename(x.path), x.path, x.lineno, ''] for x in locations if (x.type == FILTERS['attribs']) and (x.name == self._search)] else: preResults = [ [file_manager.get_basename(x.path), x.path, x.lineno, ''] for x in locations if ((x.type == FILTERS['functions']) or (x.type == FILTERS['classes'])) and (x.name.startswith(self._search))] for data in preResults: file_object = QFile(data[1]) if not file_object.open(QFile.ReadOnly): return stream = QTextStream(file_object) line_index = 0 line = stream.readLine() while not self._cancel and not stream.atEnd(): if line_index == data[2]: data[3] = line self.results.append(data) break #take the next line! line = stream.readLine() line_index += 1 self._search = None self._isVariable = None
def expand_tab_name(self, title): title = unicode(title) if title == 'New Document': return elif title not in self.titles: self.titles.append(title) return indexes = [i for i in xrange(self.count()) if type(self.widget(i)) is editor.Editor and \ self.tabText(i) == title and \ self.widget(i).ID] self.dontLoopInExpandTitle = True for i in indexes: newName = file_manager.create_path( file_manager.get_basename( file_manager.get_folder(self.widget(i).ID)), title) while newName in self.titles: path = self.widget(i).ID tempDir = path[:path.rfind(newName)] newName = file_manager.create_path( file_manager.get_basename( file_manager.get_folder(tempDir)), '..', title) self.titles.append(newName) self.setTabText(i, newName) self.dontLoopInExpandTitle = False
def _add_file_to_project(self, path): """Add the file for 'path' in the project the user choose here.""" pathProject = [self.ide.explorer.get_actual_project()] addToProject = ui_tools.AddToProject(pathProject, self.ide) addToProject.exec_() if not addToProject.pathSelected: return editorWidget = self.ide.mainContainer.get_actual_editor() if not editorWidget.ID: name = unicode(QInputDialog.getText(None, self.tr("Add File To Project"), self.tr("File Name:"))[0]) if not name: QMessageBox.information(self, self.tr("Invalid Name"), self.tr("The file name is empty, please enter a name")) return else: name = file_manager.get_basename(editorWidget.ID) path = file_manager.create_path( unicode(addToProject.pathSelected), name) try: path = file_manager.store_file_content( path, editorWidget.get_text(), newFile=True) editorWidget.ID = path self.ide.explorer.add_existing_file(path) self.ide.change_window_title(path) name = file_manager.get_basename(path) self.ide.mainContainer.actualTab.setTabText( self.ide.mainContainer.actualTab.currentIndex(), name) editorWidget._file_saved() except file_manager.NinjaFileExistsException, ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % \ ex.filename))
def go_to_definition(self): self.dirty = True self.results = [] locations = self.get_locations() if self._isVariable: preResults = [ [file_manager.get_basename(x.path), x.path, x.lineno, ''] for x in locations if (x.type == FILTERS['attribs']) and (x.name == self._search) ] else: preResults = [[ file_manager.get_basename(x.path), x.path, x.lineno, '' ] for x in locations if ((x.type == FILTERS['functions']) or (x.type == FILTERS['classes'])) and ( x.name.startswith(self._search))] for data in preResults: file_object = QFile(data[1]) if not file_object.open(QFile.ReadOnly): return stream = QTextStream(file_object) line_index = 0 line = stream.readLine() while not self._cancel and not stream.atEnd(): if line_index == data[2]: data[3] = line self.results.append(data) break #take the next line! line = stream.readLine() line_index += 1 self._search = None self._isVariable = None
def _add_new_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) result = QInputDialog.getText(self, self.tr("New File"), self.tr("Enter the File Name:")) fileName = result[0] if result[1] and fileName.strip() != '': try: fileName = os.path.join(pathForFile, fileName) fileName = file_manager.store_file_content( fileName, '', newFile=True) name = file_manager.get_basename(fileName) subitem = ProjectItem(item, name, pathForFile) subitem.setToolTip(0, name) subitem.setIcon(0, self._get_file_icon(name)) mainContainer = main_container.MainContainer() mainContainer.open_file(fileName) except file_manager.NinjaFileExistsException as ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename))
def save_recent_projects(self, folder): recent_project_list = QSettings( resources.SETTINGS_PATH, QSettings.IniFormat).value('recentProjects', {}) #if already exist on the list update the date time projectProperties = json_manager.read_ninja_project(folder) name = projectProperties.get('name', '') description = projectProperties.get('description', '') if name == '': name = file_manager.get_basename(folder) if description == '': description = _translate("_s_ExplorerContainer", 'no description available') if folder in recent_project_list: properties = recent_project_list[folder] properties["lastopen"] = QDateTime.currentDateTime() properties["name"] = name properties["description"] = description recent_project_list[folder] = properties else: recent_project_list[folder] = { "name": name, "description": description, "isFavorite": False, "lastopen": QDateTime.currentDateTime()} #if the length of the project list it's high that 10 then delete #the most old #TODO: add the length of available projects to setting if len(recent_project_list) > 10: del recent_project_list[self.find_most_old_open()] QSettings(resources.SETTINGS_PATH, QSettings.IniFormat).setValue( 'recentProjects', recent_project_list)
def _rename_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) result = QInputDialog.getText(self, self.tr("Rename File"), self.tr("Enter New File Name:"), text=item.text(0)) fileName = result[0] if result[1] and fileName.strip() != '': fileName = os.path.join( file_manager.get_folder(pathForFile), fileName) if pathForFile == fileName: return try: fileName = file_manager.rename_file(pathForFile, fileName) name = file_manager.get_basename(fileName) mainContainer = main_container.MainContainer() if mainContainer.is_open(pathForFile): mainContainer.change_open_tab_name(pathForFile, fileName) subitem = ProjectItem(item.parent(), name, file_manager.get_folder(fileName)) subitem.setToolTip(0, name) subitem.setIcon(0, self._get_file_icon(name)) index = item.parent().indexOfChild(item) subitem.parent().takeChild(index) except file_manager.NinjaFileExistsException as ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename))
def _move_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) pathProjects = [p.path for p in self.get_open_projects()] addToProject = ui_tools.AddToProject(pathProjects, self) addToProject.setWindowTitle(self.tr("Copy File to")) addToProject.exec_() if not addToProject.pathSelected: return name = file_manager.get_basename(pathForFile) path = file_manager.create_path(addToProject.pathSelected, name) try: content = file_manager.read_file_content(pathForFile) path = file_manager.store_file_content(path, content, newFile=True) file_manager.delete_file(pathForFile) index = item.parent().indexOfChild(item) item.parent().takeChild(index) self.add_existing_file(path) except file_manager.NinjaFileExistsException as ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename))
def _add_new_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, unicode(item.text(0))) result = QInputDialog.getText(self, self.tr("New File"), self.tr("Enter the File Name:")) fileName = unicode(result[0]) if result[1] and fileName.strip() != '': try: fileName = os.path.join(pathForFile, fileName) fileName = file_manager.store_file_content( fileName, '', newFile=True) name = file_manager.get_basename(fileName) subitem = ProjectItem(item, name, pathForFile) subitem.setToolTip(0, name) subitem.setIcon(0, self._get_file_icon(name)) item.sortChildren(0, Qt.AscendingOrder) mainContainer = main_container.MainContainer() mainContainer.open_file(fileName) editorWidget = mainContainer.get_actual_editor() editorWidget.textCursor().insertText("# -*- coding: utf-8 *-*") main_container.MainContainer().save_file() except file_manager.NinjaFileExistsException, ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % \ ex.filename))
def get_item_for_path(self, path): items = self.findItems(file_manager.get_basename(path), Qt.MatchRecursive, 0) folder = file_manager.get_folder(path) for item in items: if file_manager.belongs_to_folder(folder, item.path): return item
def save_file_as(self): editorWidget = self.get_actual_editor() if not editorWidget: return False try: filter = '(*.py);;(*.*)' if editorWidget.ID: ext = file_manager.get_file_extension(editorWidget.ID) if ext != 'py': filter = '(*.%s);;(*.py);;(*.*)' % ext fileName = unicode(QFileDialog.getSaveFileName( self._parent, self.tr("Save File"), editorWidget.ID, filter)) if not fileName: return False if settings.REMOVE_TRAILING_SPACES: helpers.remove_trailing_spaces(editorWidget) newFile = file_manager.get_file_extension(fileName) == '' fileName = file_manager.store_file_content( fileName, editorWidget.get_text(), addExtension=True, newFile=newFile) self.actualTab.setTabText(self.actualTab.currentIndex(), file_manager.get_basename(fileName)) editorWidget.register_syntax( file_manager.get_file_extension(fileName)) editorWidget.ID = fileName self.emit(SIGNAL("fileSaved(QString)"), self.tr("File Saved: %1").arg(fileName)) editorWidget._file_saved() return True except file_manager.NinjaFileExistsException, ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % \ ex.filename))
def load_project(self, folderStructure, folder): if not folder: return name = file_manager.get_basename(folder) item = ProjectTree(self, name, folder) item.isFolder = True item.setToolTip(0, name) item.setIcon(0, QIcon(resources.IMAGES['tree-app'])) self._projects[folder] = item if folderStructure[folder][1] is not None: folderStructure[folder][1].sort() if item.extensions != settings.SUPPORTED_EXTENSIONS: folderStructure = file_manager.open_project_with_extensions( item.path, item.extensions) self._load_folder(folderStructure, folder, item) item.setExpanded(True) if len(self._projects) == 1: self.set_default_project(item) if self.currentItem() is None: item.setSelected(True) self.setCurrentItem(item) if folder not in self._fileWatcher.directories(): DEBUG("Ading '%s' to watcher" % folder) self._fileWatcher.addPath(folder)
def save_recent_projects(self, folder): recent_project_list = QSettings().value('recentProjects', {}).toMap() #if already exist on the list update the date time projectProperties = json_manager.read_ninja_project(folder) name = projectProperties.get('name', '') description = projectProperties.get('description', '') if name == '': name = file_manager.get_basename(folder) if description == '': description = self.tr('no description available') if QString(folder) in recent_project_list: properties = recent_project_list[QString(folder)].toMap() properties[QString("lastopen")] = QDateTime.currentDateTime() properties[QString("name")] = name properties[QString("description")] = description recent_project_list[QString(folder)] = properties else: recent_project_list[QString(folder)] = { "name": name, "description": description, "isFavorite": False, "lastopen": QDateTime.currentDateTime()} #if the length of the project list it's high that 10 then delete #the most old #TODO: add the length of available projects to setting if len(recent_project_list) > 10: del recent_project_list[self.find_most_old_open()] QSettings().setValue('recentProjects', recent_project_list)
def _rename_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) result = QInputDialog.getText(self, self.tr("Rename File"), self.tr("Enter New File Name:"), text=item.text(0)) fileName = result[0] if result[1] and fileName.strip() != '': fileName = os.path.join(file_manager.get_folder(pathForFile), fileName) if pathForFile == fileName: return try: fileName = file_manager.rename_file(pathForFile, fileName) name = file_manager.get_basename(fileName) mainContainer = main_container.MainContainer() if mainContainer.is_open(pathForFile): mainContainer.change_open_tab_name(pathForFile, fileName) subitem = ProjectItem(item.parent(), name, file_manager.get_folder(fileName)) subitem.setToolTip(0, name) subitem.setIcon(0, self._get_file_icon(name)) index = item.parent().indexOfChild(item) subitem.parent().takeChild(index) except file_manager.NinjaFileExistsException as ex: QMessageBox.information( self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename))
def _add_new_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) result = QInputDialog.getText(self, self.tr("New File"), self.tr("Enter the File Name:")) fileName = result[0] if result[1] and fileName.strip() != '': try: fileName = os.path.join(pathForFile, fileName) fileName = file_manager.store_file_content(fileName, '', newFile=True) name = file_manager.get_basename(fileName) subitem = ProjectItem(item, name, pathForFile) subitem.setToolTip(0, name) subitem.setIcon(0, self._get_file_icon(name)) mainContainer = main_container.MainContainer() mainContainer.open_file(fileName) except file_manager.NinjaFileExistsException as ex: QMessageBox.information( self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename))
def _move_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) pathProjects = [p.path for p in self.get_open_projects()] addToProject = ui_tools.AddToProject(pathProjects, self) addToProject.setWindowTitle(self.tr("Copy File to")) addToProject.exec_() if not addToProject.pathSelected: return name = file_manager.get_basename(pathForFile) path = file_manager.create_path(addToProject.pathSelected, name) try: content = file_manager.read_file_content(pathForFile) path = file_manager.store_file_content(path, content, newFile=True) file_manager.delete_file(pathForFile) index = item.parent().indexOfChild(item) item.parent().takeChild(index) self.add_existing_file(path) except file_manager.NinjaFileExistsException as ex: QMessageBox.information( self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename))
def add_editor(self, fileName="", project=None, tabIndex=None, content=None, syntax=None): editorWidget = editor.create_editor(fileName=fileName, project=project, syntax=syntax) if not fileName: tabName = "New Document" else: tabName = file_manager.get_basename(fileName) # add the tab inserted_index = self.add_tab(editorWidget, tabName, tabIndex=tabIndex) self.actualTab.setTabToolTip(inserted_index, fileName) self.connect(editorWidget, SIGNAL("modificationChanged(bool)"), self._editor_tab_was_modified) self.connect(editorWidget, SIGNAL("fileSaved(QPlainTextEdit)"), self._editor_tab_was_saved) self.connect(editorWidget, SIGNAL("openDropFile(QString)"), self.open_file) self.connect( editorWidget, SIGNAL("addBackItemNavigation()"), lambda: self.emit(SIGNAL("addBackItemNavigation()")) ) self.connect(editorWidget, SIGNAL("locateFunction(QString, QString, bool)"), self._editor_locate_function) self.connect(editorWidget, SIGNAL("warningsFound(QPlainTextEdit)"), self._show_warning_tab_indicator) self.connect(editorWidget, SIGNAL("errorsFound(QPlainTextEdit)"), self._show_error_tab_indicator) self.connect(editorWidget, SIGNAL("cleanDocument(QPlainTextEdit)"), self._hide_icon_tab_indicator) self.connect(editorWidget, SIGNAL("findOcurrences(QString)"), self._find_occurrences) # Cursor position changed self.connect(editorWidget, SIGNAL("cursorPositionChange(int, int)"), self._cursor_position_changed) # keyPressEventSignal for plugins self.connect(editorWidget, SIGNAL("keyPressEvent(QEvent)"), self._editor_keyPressEvent) # insert the content if present if content: editorWidget.setPlainText(content) # emit a signal about the file open self.emit(SIGNAL("fileOpened(QString)"), fileName) return editorWidget
def save_file_as(self): editorWidget = self.get_actual_editor() if not editorWidget: return False try: fileName = unicode(QFileDialog.getSaveFileName( self._parent, self.tr("Save File"), '', '(*.py);;(*.*)')) if not fileName: return False if settings.REMOVE_TRAILING_SPACES: helpers.remove_trailing_spaces(editorWidget) newFile = file_manager.get_file_extension(fileName) == '' fileName = file_manager.store_file_content( fileName, editorWidget.get_text(), addExtension=True, newFile=newFile) self.actualTab.setTabText(self.actualTab.currentIndex(), file_manager.get_basename(fileName)) editorWidget.register_syntax( file_manager.get_file_extension(fileName)) editorWidget.ID = fileName self.emit(SIGNAL("fileSaved(QString)"), self.tr("File Saved: %1").arg(fileName)) editorWidget._file_saved() return True except file_manager.NinjaFileExistsException, ex: QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % \ ex.filename))
def _move_file(self): item = self.currentItem() if item.parent() is None: pathForFile = item.path else: pathForFile = os.path.join(item.path, item.text(0)) pathProjects = [p.path for p in self.get_open_projects()] addToProject = ui_tools.AddToProject(pathProjects, self) addToProject.setWindowTitle(_translate("TreeProjectsWidget", "Copy File to")) addToProject.exec_() if not addToProject.pathSelected: return name = file_manager.get_basename(pathForFile) path = file_manager.create_path(addToProject.pathSelected, name) try: content = file_manager.read_file_content(pathForFile) path = file_manager.store_file_content(path, content, newFile=True) file_manager.delete_file(pathForFile) index = item.parent().indexOfChild(item) item.parent().takeChild(index) self.add_existing_file(path) # Update path of opened file main = main_container.MainContainer() if main.is_open(pathForFile): widget = main.get_widget_for_path(pathForFile) if widget: widget.ID = path except file_manager.NinjaFileExistsException as ex: QMessageBox.information(self, _translate("TreeProjectsWidget", "File Already Exists"), (_translate("TreeProjectsWidget", "Invalid Path: the file '%s' already exists.") % ex.filename))
def save_recent_projects(self, folder): recent_project_list = QSettings().value("recentProjects", {}) # if already exist on the list update the date time projectProperties = json_manager.read_ninja_project(folder) name = projectProperties.get("name", "") description = projectProperties.get("description", "") if name == "": name = file_manager.get_basename(folder) if description == "": description = self.tr("no description available") if folder in recent_project_list: properties = recent_project_list[folder] properties["lastopen"] = QDateTime.currentDateTime() properties["name"] = name properties["description"] = description recent_project_list[folder] = properties else: recent_project_list[folder] = { "name": name, "description": description, "isFavorite": False, "lastopen": QDateTime.currentDateTime(), } # if the length of the project list it's high that 10 then delete # the most old # TODO: add the length of available projects to setting if len(recent_project_list) > 10: del recent_project_list[self.find_most_old_open()] QSettings().setValue("recentProjects", recent_project_list)
def save_recent_projects(self, folder): recent_project_list = QSettings().value('recentProjects', {}) #if already exist on the list update the date time projectProperties = json_manager.read_ninja_project(folder) name = projectProperties.get('name', '') description = projectProperties.get('description', '') if name == '': name = file_manager.get_basename(folder) if description == '': description = self.tr('no description available') if folder in recent_project_list: properties = recent_project_list[folder] properties["lastopen"] = QDateTime.currentDateTime() properties["name"] = name properties["description"] = description recent_project_list[folder] = properties else: recent_project_list[folder] = { "name": name, "description": description, "isFavorite": False, "lastopen": QDateTime.currentDateTime() } #if the length of the project list it's high that 10 then delete #the most old #TODO: add the length of available projects to setting if len(recent_project_list) > 10: del recent_project_list[self.find_most_old_open()] QSettings().setValue('recentProjects', recent_project_list)
def _advanced_filter_by_file(self, filterOptions): if filterOptions[1] == '@': index = 2 else: index = 3 self.tempLocations = [x for x in self.tempLocations \ if file_manager.get_basename(x[2]).lower().find( filterOptions[index]) > -1]
def only_expand(self): for tab in self.tabs: tabName = file_manager.get_basename(tab.ID) self.actions.ide.mainContainer.add_tab(tab, tabName) index = self.actions.ide.mainContainer._tabMain.indexOf(self) self.actions.ide.mainContainer._tabMain.removeTab(index) self.tabs = [] self.listWidget.clear()
def locate_file_code(self): file_name = file_manager.get_basename(self._file_path) try: self._grep_file_locate(self._file_path, file_name) self.dirty = True self.execute = self.locate_code except Exception, reason: logger.error('locate_file_code, error: %r' % reason)
def _advanced_filter_by_file(self, filterOptions): if filterOptions[1] == FILTERS['files']: index = 2 else: index = 3 self.tempLocations = [x for x in self.tempLocations \ if file_manager.get_basename(x.path).lower().find( filterOptions[index]) > -1]
def _advanced_filter_by_file(self, filterOptions): if filterOptions[1] == FILTERS['files']: index = 2 else: index = 3 self.tempLocations = [x for x in self.tempLocations if file_manager.get_basename(x.path).lower().find( filterOptions[index]) > -1]
def locate_file_code(self): file_name = file_manager.get_basename(self._file_path) try: self._grep_file_locate(self._file_path, file_name) self.dirty = True self.execute = self.locate_code except Exception as reason: logger.error('locate_file_code, error: %r' % reason)
def add_editor(self, fileName="", project=None, tabIndex=None, syntax=None, use_open_highlight=False): project_obj = self._parent.explorer.get_project_given_filename( fileName) editorWidget = editor.create_editor( fileName=fileName, project=project, syntax=syntax, use_open_highlight=use_open_highlight, project_obj=project_obj) if not fileName: tabName = "New Document" else: tabName = file_manager.get_basename(fileName) #add the tab inserted_index = self.add_tab(editorWidget, tabName, tabIndex=tabIndex) self.actualTab.setTabToolTip(inserted_index, QDir.toNativeSeparators(fileName)) #Connect signals self.connect(editorWidget, SIGNAL("modificationChanged(bool)"), self._editor_tab_was_modified) self.connect(editorWidget, SIGNAL("fileSaved(QPlainTextEdit)"), self._editor_tab_was_saved) self.connect(editorWidget, SIGNAL("openDropFile(QString)"), self.open_file) self.connect(editorWidget, SIGNAL("addBackItemNavigation()"), lambda: self.emit(SIGNAL("addBackItemNavigation()"))) self.connect(editorWidget, SIGNAL("locateFunction(QString, QString, bool)"), self._editor_locate_function) self.connect(editorWidget, SIGNAL("warningsFound(QPlainTextEdit)"), self._show_warning_tab_indicator) self.connect(editorWidget, SIGNAL("errorsFound(QPlainTextEdit)"), self._show_error_tab_indicator) self.connect(editorWidget, SIGNAL("cleanDocument(QPlainTextEdit)"), self._hide_icon_tab_indicator) self.connect(editorWidget, SIGNAL("findOcurrences(QString)"), self._find_occurrences) self.connect(editorWidget, SIGNAL("migrationAnalyzed()"), lambda: self.emit(SIGNAL("migrationAnalyzed()"))) #Cursor position changed self.connect(editorWidget, SIGNAL("cursorPositionChange(int, int)"), self._cursor_position_changed) #keyPressEventSignal for plugins self.connect(editorWidget, SIGNAL("keyPressEvent(QEvent)"), self._editor_keyPressEvent) #emit a signal about the file open self.emit(SIGNAL("fileOpened(QString)"), fileName) return editorWidget
def __init__(self, parent): super(ProjectData, self).__init__() self._parent = parent grid = QGridLayout(self) grid.addWidget(QLabel(self.tr("Name:")), 0, 0) self.name = QLineEdit() if self._parent._item.name == '': self.name.setText(file_manager.get_basename( self._parent._item.path)) else: self.name.setText(self._parent._item.name) grid.addWidget(self.name, 0, 1) grid.addWidget(QLabel(self.tr("Project Type:")), 1, 0) self.txtType = QLineEdit() completer = QCompleter(sorted(settings.PROJECT_TYPES)) completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.txtType.setCompleter(completer) self.txtType.setText(self._parent._item.projectType) grid.addWidget(self.txtType, 1, 1) grid.addWidget(QLabel(self.tr("Description:")), 2, 0) self.description = QPlainTextEdit() self.description.setPlainText(self._parent._item.description) grid.addWidget(self.description, 2, 1) grid.addWidget(QLabel(self.tr("URL:")), 3, 0) self.url = QLineEdit() self.url.setText(self._parent._item.url) grid.addWidget(self.url, 3, 1) grid.addWidget(QLabel(self.tr("Licence:")), 4, 0) self.cboLicense = QComboBox() self.cboLicense.addItem('Apache License 2.0') self.cboLicense.addItem('Artistic License/GPL') self.cboLicense.addItem('Eclipse Public License 1.0') self.cboLicense.addItem('GNU General Public License v2') self.cboLicense.addItem('GNU General Public License v3') self.cboLicense.addItem('GNU Lesser General Public License') self.cboLicense.addItem('MIT License') self.cboLicense.addItem('Mozilla Public License 1.1') self.cboLicense.addItem('New BSD License') self.cboLicense.addItem('Other Open Source') self.cboLicense.addItem('Other') self.cboLicense.setCurrentIndex(4) index = self.cboLicense.findText(self._parent._item.license) self.cboLicense.setCurrentIndex(index) grid.addWidget(self.cboLicense, 4, 1) self.txtExtensions = QLineEdit() self.txtExtensions.setText(', '.join(self._parent._item.extensions)) grid.addWidget(QLabel(self.tr("Supported Extensions:")), 5, 0) grid.addWidget(self.txtExtensions, 5, 1) grid.addWidget(QLabel(self.tr("Indentation: ")), 6, 0) self.spinIndentation = QSpinBox() self.spinIndentation.setValue(self._parent._item.indentation) self.spinIndentation.setMinimum(1) grid.addWidget(self.spinIndentation, 6, 1) self.checkUseTabs = QCheckBox(self.tr("Use Tabs.")) self.checkUseTabs.setChecked(self._parent._item.useTabs) grid.addWidget(self.checkUseTabs, 6, 2)
def __init__(self, parent): super(ProjectData, self).__init__() self._parent = parent grid = QGridLayout(self) grid.addWidget(QLabel(self.tr("Name:")), 0, 0) self.name = QLineEdit() if self._parent._item.name == '': self.name.setText( file_manager.get_basename(self._parent._item.path)) else: self.name.setText(self._parent._item.name) grid.addWidget(self.name, 0, 1) grid.addWidget(QLabel(self.tr("Project Type:")), 1, 0) self.txtType = QLineEdit() completer = QCompleter(sorted(settings.PROJECT_TYPES)) completer.setCompletionMode(QCompleter.UnfilteredPopupCompletion) self.txtType.setCompleter(completer) self.txtType.setText(self._parent._item.projectType) grid.addWidget(self.txtType, 1, 1) grid.addWidget(QLabel(self.tr("Description:")), 2, 0) self.description = QPlainTextEdit() self.description.setPlainText(self._parent._item.description) grid.addWidget(self.description, 2, 1) grid.addWidget(QLabel(self.tr("URL:")), 3, 0) self.url = QLineEdit() self.url.setText(self._parent._item.url) grid.addWidget(self.url, 3, 1) grid.addWidget(QLabel(self.tr("Licence:")), 4, 0) self.cboLicense = QComboBox() self.cboLicense.addItem('Apache License 2.0') self.cboLicense.addItem('Artistic License/GPL') self.cboLicense.addItem('Eclipse Public License 1.0') self.cboLicense.addItem('GNU General Public License v2') self.cboLicense.addItem('GNU General Public License v3') self.cboLicense.addItem('GNU Lesser General Public License') self.cboLicense.addItem('MIT License') self.cboLicense.addItem('Mozilla Public License 1.1') self.cboLicense.addItem('New BSD License') self.cboLicense.addItem('Other Open Source') self.cboLicense.addItem('Other') self.cboLicense.setCurrentIndex(4) index = self.cboLicense.findText(self._parent._item.license) self.cboLicense.setCurrentIndex(index) grid.addWidget(self.cboLicense, 4, 1) self.txtExtensions = QLineEdit() self.txtExtensions.setText(', '.join(self._parent._item.extensions)) grid.addWidget(QLabel(self.tr("Supported Extensions:")), 5, 0) grid.addWidget(self.txtExtensions, 5, 1) grid.addWidget(QLabel(self.tr("Indentation: ")), 6, 0) self.spinIndentation = QSpinBox() self.spinIndentation.setValue(self._parent._item.indentation) self.spinIndentation.setMinimum(1) grid.addWidget(self.spinIndentation, 6, 1) self.checkUseTabs = QCheckBox(self.tr("Use Tabs.")) self.checkUseTabs.setChecked(self._parent._item.useTabs) grid.addWidget(self.checkUseTabs, 6, 2)
def get_this_file_locations(self, path): global mapping_locations thisFileLocations = mapping_locations.get(path, ()) if not thisFileLocations: file_name = file_manager.get_basename(path) self._grep_file_locate(path, file_name) thisFileLocations = mapping_locations.get(path, ()) thisFileLocations = thisFileLocations[1:] return thisFileLocations
def expand_this(self): self.actions.group_tabs_together() for tab in self.tabs: tabName = file_manager.get_basename(tab.ID) self.actions.ide.mainContainer.add_tab(tab, tabName) index = self.actions.ide.mainContainer._tabMain.indexOf(self) self.actions.ide.mainContainer._tabMain.removeTab(index) self.tabs = [] self.listWidget.clear()
def get_this_file_locations(self, path): global mapping_locations thisFileLocations = mapping_locations.get(path, ()) if not thisFileLocations: file_name = file_manager.get_basename(path) self._grep_file_locate(path, file_name) thisFileLocations = mapping_locations.get(path, ()) thisFileLocations = sorted(thisFileLocations[1:], key=lambda item: item.name) return thisFileLocations
def save_file_as(self): editorWidget = self.get_actual_editor() if not editorWidget: return False try: editorWidget.just_saved = True filters = '(*.py);;(*.*)' if editorWidget.ID: ext = file_manager.get_file_extension(editorWidget.ID) if ext != 'py': filters = '(*.%s);;(*.py);;(*.*)' % ext save_folder = self._get_save_folder(editorWidget.ID) fileName = QFileDialog.getSaveFileName(self._parent, self.tr("Save File"), save_folder, filters) if not fileName: return False if settings.REMOVE_TRAILING_SPACES: helpers.remove_trailing_spaces(editorWidget) newFile = file_manager.get_file_extension(fileName) == '' fileName = file_manager.store_file_content(fileName, editorWidget.get_text(), addExtension=True, newFile=newFile) self.actualTab.setTabText(self.actualTab.currentIndex(), file_manager.get_basename(fileName)) editorWidget.register_syntax( file_manager.get_file_extension(fileName)) self._file_watcher.allow_kill = False if editorWidget.ID != fileName: self.remove_standalone_watcher(editorWidget.ID) editorWidget.ID = fileName self.emit(SIGNAL("fileSaved(QString)"), self.tr("File Saved: %s" % fileName)) self.emit(SIGNAL("currentTabChanged(QString)"), fileName) editorWidget._file_saved() self.add_standalone_watcher(fileName) self._file_watcher.allow_kill = True return True except file_manager.NinjaFileExistsException as ex: editorWidget.just_saved = False QMessageBox.information( self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename)) except Exception as reason: editorWidget.just_saved = False logger.error('save_file_as: %s', reason) QMessageBox.information(self, self.tr("Save Error"), self.tr("The file couldn't be saved!")) self.actualTab.setTabText(self.actualTab.currentIndex(), self.tr("New Document")) return False
def open_image(self, fileName): try: if not self.is_open(fileName): viewer = image_viewer.ImageViewer(fileName) self.add_tab(viewer, file_manager.get_basename(fileName)) viewer.id = fileName else: self.move_to_open(fileName) except Exception, reason: logger.error("open_image: %s", reason) QMessageBox.information(self, self.tr("Incorrect File"), self.tr("The image couldn't be open"))
def _add_file_to_project(self, path): """Add the file for 'path' in the project the user choose here.""" pathProject = [self.ide.explorer.get_actual_project()] addToProject = ui_tools.AddToProject(pathProject, self.ide) addToProject.exec_() if not addToProject.pathSelected: return editorWidget = self.ide.mainContainer.get_actual_editor() if not editorWidget.ID: name = QInputDialog.getText(None, self.tr("Add File To Project"), self.tr("File Name:"))[0] if not name: QMessageBox.information( self, self.tr("Invalid Name"), self.tr("The file name is empty, please enter a name")) return else: name = file_manager.get_basename(editorWidget.ID) path = file_manager.create_path(addToProject.pathSelected, name) try: path = file_manager.store_file_content(path, editorWidget.get_text(), newFile=True) self.ide.mainContainer._file_watcher.allow_kill = False if path != editorWidget.ID: self.ide.mainContainer.remove_standalone_watcher( editorWidget.ID) editorWidget.ID = path self.ide.mainContainer.add_standalone_watcher(path) self.ide.mainContainer._file_watcher.allow_kill = True self.ide.explorer.add_existing_file(path) self.ide.change_window_title(path) name = file_manager.get_basename(path) self.ide.mainContainer.actualTab.setTabText( self.ide.mainContainer.actualTab.currentIndex(), name) editorWidget._file_saved() except file_manager.NinjaFileExistsException as ex: QMessageBox.information( self, self.tr("File Already Exists"), (self.tr("Invalid Path: the file '%s' already exists.") % ex.filename))
def get_this_file_locations(self, path): global mapping_locations thisFileLocations = mapping_locations.get(path, ()) try: if not thisFileLocations: file_name = file_manager.get_basename(path) self._grep_file_locate(path, file_name) thisFileLocations = mapping_locations.get(path, ()) thisFileLocations = sorted(thisFileLocations[1:], key=lambda item: item.name) except Exception, reason: logger.error('get_this_file_locations, error: %r' % reason)
def print_file(self): """Call the print of ui_tool Call print of ui_tool depending on the focus of the application""" #TODO: Add funtionality for proyect tab and methods tab editorWidget = self.ide.mainContainer.get_actual_editor() if editorWidget is not None: fileName = "newDocument.pdf" if editorWidget.ID: fileName = file_manager.get_basename(editorWidget.ID) fileName = fileName[:fileName.rfind('.')] + '.pdf' ui_tools.print_file(fileName, editorWidget.print_)
def open_image(self, fileName): try: if not self.is_open(fileName): viewer = image_viewer.ImageViewer(fileName) self.add_tab(viewer, file_manager.get_basename(fileName)) viewer.id = fileName else: self.move_to_open(fileName) except Exception, reason: logger.error('open_image: %s', reason) QMessageBox.information(self, self.tr("Incorrect File"), self.tr("The image couldn\'t be open"))
def print_file(self): """Call the print of ui_tool Call print of ui_tool depending on the focus of the application""" # TODO: Add funtionality for proyect tab and methods tab editorWidget = self.ide.mainContainer.get_actual_editor() if editorWidget is not None: fileName = "newDocument.pdf" if editorWidget.ID: fileName = file_manager.get_basename(editorWidget.ID) fileName = fileName[: fileName.rfind(".")] + ".pdf" ui_tools.print_file(fileName, editorWidget.print_)
def open_image(self, fileName): try: if not self.is_open(fileName): viewer = image_viewer.ImageViewer(fileName) self.add_tab(viewer, file_manager.get_basename(fileName)) viewer.id = fileName else: self.move_to_open(fileName) except Exception as reason: logger.error('open_image: %s', reason) QMessageBox.information(self, _translate("_s_MainContainer", "Incorrect File"), _translate("_s_MainContainer", "The image couldn\'t be open"))
def save_file_as(self): editorWidget = self.get_actual_editor() if not editorWidget: return False try: editorWidget.just_saved = True filters = '(*.py);;(*.*)' if editorWidget.ID: ext = file_manager.get_file_extension(editorWidget.ID) if ext != 'py': filters = '(*.%s);;(*.py);;(*.*)' % ext save_folder = self._get_save_folder(editorWidget.ID) fileName = QFileDialog.getSaveFileName( self._parent, self.tr("Save File"), save_folder, filters) if not fileName: return False if settings.REMOVE_TRAILING_SPACES: helpers.remove_trailing_spaces(editorWidget) newFile = file_manager.get_file_extension(fileName) == '' fileName = file_manager.store_file_content( fileName, editorWidget.get_text(), addExtension=True, newFile=newFile) self.actualTab.setTabText(self.actualTab.currentIndex(), file_manager.get_basename(fileName)) editorWidget.register_syntax( file_manager.get_file_extension(fileName)) self._file_watcher.allow_kill = False if editorWidget.ID != fileName: self.remove_standalone_watcher(editorWidget.ID) editorWidget.ID = fileName self.emit(SIGNAL("fileSaved(QString)"), self.tr("File Saved: %s" % fileName)) self.emit(SIGNAL("currentTabChanged(QString)"), fileName) editorWidget._file_saved() self.add_standalone_watcher(fileName) self._file_watcher.allow_kill = True return True except file_manager.NinjaFileExistsException as ex: editorWidget.just_saved = False QMessageBox.information(self, self.tr("File Already Exists"), self.tr("Invalid Path: the file '%s' already exists." % ex.filename)) except Exception as reason: editorWidget.just_saved = False logger.error('save_file_as: %s', reason) QMessageBox.information(self, self.tr("Save Error"), self.tr("The file couldn't be saved!")) self.actualTab.setTabText(self.actualTab.currentIndex(), self.tr("New Document")) return False
def _add_file_to_project(self, path): """Add the file for 'path' in the project the user choose here.""" pathProject = [self.ide.explorer.get_actual_project()] addToProject = ui_tools.AddToProject(pathProject, self.ide) addToProject.exec_() if not addToProject.pathSelected: return editorWidget = self.ide.mainContainer.get_actual_editor() if not editorWidget.ID: name = QInputDialog.getText(None, _translate("_s_Actions", "Add File To Project"), _translate("_s_Actions", "File Name:"))[0] if not name: QMessageBox.information(None, _translate("_s_Actions", "Invalid Name"), _translate("_s_Actions", "The file name is empty, please enter a name")) return else: name = file_manager.get_basename(editorWidget.ID) path = file_manager.create_path(addToProject.pathSelected, name) try: path = file_manager.store_file_content( path, editorWidget.get_text(), newFile=True) self.ide.mainContainer._file_watcher.allow_kill = False if path != editorWidget.ID: self.ide.mainContainer.remove_standalone_watcher( editorWidget.ID) editorWidget.ID = path self.ide.mainContainer.add_standalone_watcher(path) self.ide.mainContainer._file_watcher.allow_kill = True self.ide.explorer.add_existing_file(path) self.ide.change_window_title(path) name = file_manager.get_basename(path) self.ide.mainContainer.actualTab.setTabText( self.ide.mainContainer.actualTab.currentIndex(), name) editorWidget._file_saved() except file_manager.NinjaFileExistsException as ex: QMessageBox.information(None, _translate("_s_Actions", "File Already Exists"), (_translate("_s_Actions", "Invalid Path: the file '%s' already exists.") % ex.filename))
def _load_project(self, folderStructure, folder): if not folder: return name = file_manager.get_basename(folder) item = QTreeWidgetItem(self._tree) item.setText(0, name) item.setToolTip(0, folder) item.setIcon(0, QIcon(resources.IMAGES['tree-folder'])) if folderStructure[folder][1] is not None: folderStructure[folder][1].sort() self._load_folder(folderStructure, folder, item) item.setExpanded(True) self._root = item
def change_open_tab_name(self, id, newId): """Search for the Tab with id, and set the newId to that Tab.""" index = self._tabMain.is_open(id) if index != -1: widget = self._tabMain.widget(index) tabContainer = self._tabMain elif self._tabSecondary.is_open(id): # tabSecondaryIndex is recalculated because there is a really # small chance that the tab is there, so there is no need to # calculate this value by default index = self._tabSecondary.is_open(id) widget = self._tabSecondary.widget(index) tabContainer = self._tabSecondary tabName = file_manager.get_basename(newId) tabContainer.change_open_tab_name(index, tabName) widget.ID = newId
def add_existing_file(self, path): relative = file_manager.convert_to_relative(self._actualProject.path, path) paths = relative.split(os.sep)[:-1] itemParent = self._actualProject for p in paths: for i in range(itemParent.childCount()): item = itemParent.child(i) if item.text(0) == p: itemParent = item break itemParent.setSelected(True) name = file_manager.get_basename(path) subitem = ProjectItem(itemParent, name, file_manager.get_folder(path)) subitem.setToolTip(0, name) subitem.setIcon(0, self._get_file_icon(name)) itemParent.setExpanded(True)
def _add_new_folder(self): item = self.currentItem() if item.parent() is None: pathForFolder = item.path else: pathForFolder = os.path.join(item.path, item.text(0)) result = QInputDialog.getText(self, self.tr("New Folder"), self.tr("Enter the Folder Name:")) folderName = result[0] if result[1] and folderName.strip() != '': folderName = os.path.join(pathForFolder, folderName) file_manager.create_folder(folderName) name = file_manager.get_basename(folderName) subitem = ProjectItem(item, name, pathForFolder) subitem.setToolTip(0, name) subitem.setIcon(0, QIcon(resources.IMAGES['tree-folder'])) self._refresh_project(item)
def group_tabs_together(self): if self.ide.explorer._treeProjects is None: return projects_obj = self.ide.explorer.get_opened_projects() projects = [p.path for p in projects_obj] for project in projects: projectName = self.ide.explorer.get_project_name(project) if not projectName: projectName = file_manager.get_basename(project) tabGroup = tab_group.TabGroup(project, projectName, self) for index in reversed(xrange( self.ide.mainContainer._tabMain.count())): widget = self.ide.mainContainer._tabMain.widget(index) if type(widget) is editor.Editor and \ file_manager.belongs_to_folder(project, widget.ID): tabGroup.add_widget(widget) self.ide.mainContainer._tabMain.removeTab(index) if tabGroup.tabs: self.ide.mainContainer._tabMain.add_tab(tabGroup, projectName)
def load_project(self, folderStructure, folder): if not folder: return self.remove_loading_icon(folder) name = file_manager.get_basename(folder) item = ProjectTree(self, name, folder) item.isFolder = True item.setToolTip(0, name) item.setIcon(0, QIcon(resources.IMAGES['tree-app'])) self._projects[folder] = item if folderStructure[folder][1] is not None: folderStructure[folder][1].sort() self._load_folder(folderStructure, folder, item) item.setExpanded(True) if len(self._projects) == 1: self.set_default_project(item) if self.currentItem() is None: item.setSelected(True) self.setCurrentItem(item)
def navigate_code(self): explorerContainer = explorer_container.ExplorerContainer() projects_obj = explorerContainer.get_opened_projects() projects = [p.path for p in projects_obj] project = None for p in projects: if self._filePath.startswith(p): project = p break #Search in files if not project: fileName = file_manager.get_basename(self._filePath) self._grep_file(self._filePath, fileName) return queue = Queue.Queue() queue.put(project) file_filter = QDir.Files | QDir.NoDotAndDotDot | QDir.Readable dir_filter = QDir.Dirs | QDir.NoDotAndDotDot | QDir.Readable while not self._cancel and not queue.empty(): current_dir = QDir(queue.get()) #Skip not readable dirs! if not current_dir.isReadable(): continue #Collect all sub dirs! current_sub_dirs = current_dir.entryInfoList(dir_filter) for one_dir in current_sub_dirs: queue.put(one_dir.absoluteFilePath()) current_sub_dirs = current_dir.entryInfoList(dir_filter) #all files in sub_dir first apply the filters current_files = current_dir.entryInfoList(['*.py'], file_filter) #process all files in current dir! for one_file in current_files: if one_file.fileName() != '__init__.py': self._grep_file(one_file.absoluteFilePath(), one_file.fileName())
def load_project(self, folderStructure, folder): if not folder: return name = file_manager.get_basename(folder) item = ProjectTree(self, name, folder) item.isFolder = True item.setToolTip(0, name) item.setIcon(0, QIcon(resources.IMAGES['tree-app'])) self._projects[folder] = item if folderStructure[folder][1] is not None: folderStructure[folder][1].sort() if item.extensions != settings.SUPPORTED_EXTENSIONS: folderStructure = file_manager.open_project_with_extensions( item.path, item.extensions) self._load_folder(folderStructure, folder, item) item.setExpanded(True) if len(self._projects) == 1: self.set_default_project(item) if self.currentItem() is None: item.setSelected(True) self.setCurrentItem(item) if not self._fileWatcher.directories().contains(folder): self._fileWatcher.addPath(folder)