diff -r 0fdfae822ca7 -r 562f9758d2e1 RefactoringRope/RestructureDialog.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/RefactoringRope/RestructureDialog.py Sun Jan 30 17:02:15 2011 +0100 @@ -0,0 +1,133 @@ +# -*- coding: utf-8 -*- + +# Copyright (c) 2011 Detlev Offenbach <detlev@die-offenbachs.de> +# + +""" +Module implementing the Restructure dialog. +""" + +from PyQt4.QtCore import pyqtSlot +from PyQt4.QtGui import QDialogButtonBox, QAbstractButton + +import rope.refactor.restructure + +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.trUtf8("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 + + 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'])