Fri, 01 Jan 2016 12:19:02 +0100
Updated copyright for 2016.
# -*- coding: utf-8 -*- # Copyright (c) 2010 - 2016 Detlev Offenbach <detlev@die-offenbachs.de> # """ Module implementing the Restructure dialog. """ from __future__ import unicode_literals from PyQt5.QtCore import pyqtSlot from PyQt5.QtWidgets import QDialogButtonBox, QAbstractButton from Ui_RestructureDialog import Ui_RestructureDialog from RefactoringDialogBase import RefactoringDialogBase class RestructureDialog(RefactoringDialogBase, Ui_RestructureDialog): """ Class implementing the Restructure dialog. """ history = None def __init__(self, refactoring, title, parent=None): """ Constructor @param refactoring reference to the main refactoring object (Refactoring) @param title title of the dialog (string) @param parent reference to the parent widget (QWidget) """ RefactoringDialogBase.__init__(self, refactoring, title, parent) self.setupUi(self) self.__okButton = self.buttonBox.button(QDialogButtonBox.Ok) self.__okButton.setEnabled(False) self.__previewButton = self.buttonBox.addButton( self.tr("Preview"), QDialogButtonBox.ActionRole) self.__previewButton.setDefault(True) self.__loadData() def __updateUI(self): """ Private slot to update the UI. """ self.__okButton.setEnabled( self.patternEdit.toPlainText() != "" and self.goalEdit.toPlainText() != "") @pyqtSlot() def on_patternEdit_textChanged(self): """ Private slot to react to changes of the pattern. """ self.__updateUI() @pyqtSlot() def on_goalEdit_textChanged(self): """ Private slot to react to changes of the goal. """ self.__updateUI() @pyqtSlot(QAbstractButton) def on_buttonBox_clicked(self, button): """ Private slot to act on the button pressed. @param button reference to the button pressed (QAbstractButton) """ if button == self.__previewButton: self.previewChanges() elif button == self.__okButton: self.applyChanges() def _calculateChanges(self, handle): """ Protected method to calculate the changes. @param handle reference to the task handle (rope.base.taskhandle.TaskHandle) @return reference to the Changes object (rope.base.change.ChangeSet) """ self.__saveData() pattern = self.patternEdit.toPlainText() goal = self.goalEdit.toPlainText() imports = [line for line in self.importsEdit.toPlainText().splitlines() if line.strip()] args = {} checks = self.argsEdit.toPlainText().splitlines() for check in checks: if ':' in check: splitted = check.split(':', 1) name = splitted[0].strip() value = splitted[1].strip() args[name] = value import rope.refactor.restructure self._refactoring.getProject().validate( self._refactoring.getProject().root) try: restructuring = rope.refactor.restructure.Restructure( self._refactoring.getProject(), pattern, goal, args=args, imports=imports) changes = restructuring.get_changes(task_handle=handle) except Exception as err: self._refactoring.handleRopeError(err, self._title) return None return changes def __saveData(self): """ Private slot to save the data for later reuse. """ data = {'pattern': self.patternEdit.toPlainText(), 'goal': self.goalEdit.toPlainText(), 'checks': self.argsEdit.toPlainText(), 'imports': self.importsEdit.toPlainText() } RestructureDialog.history = data def __loadData(self): """ Private slot to load the history data into the dialog. """ if RestructureDialog.history is not None: data = RestructureDialog.history self.patternEdit.setPlainText(data['pattern']) self.goalEdit.setPlainText(data['goal']) self.argsEdit.setPlainText(data['checks']) self.importsEdit.setPlainText(data['imports'])