eric6/QScintilla/Editor.py

changeset 7278
1820a0344b62
parent 7276
25c93adb5de9
child 7286
7eb04391adf7
child 7293
4738aac944e6
--- a/eric6/QScintilla/Editor.py	Fri Sep 27 14:49:42 2019 +0200
+++ b/eric6/QScintilla/Editor.py	Sat Sep 28 18:44:48 2019 +0200
@@ -374,6 +374,8 @@
                 self.checkSyntax()
                 self.isResourcesFile = self.fileName.endswith(".qrc")
                 
+                self.__convertTabs()
+                
                 self.recolor()
         else:
             # clone the given editor
@@ -3005,17 +3007,6 @@
         
         modified = False
         
-        if (
-            (not self.__getEditorConfig("TabForIndentation")) and
-            Preferences.getEditor("ConvertTabsOnLoad") and
-            not (self.lexer_ and
-                 self.lexer_.alwaysKeepTabs())
-        ):
-            txtExpanded = txt.expandtabs(self.__getEditorConfig("TabWidth"))
-            if txtExpanded != txt:
-                modified = True
-            txt = txtExpanded
-        
         self.setText(txt)
         
         # get eric specific flags
@@ -3037,7 +3028,26 @@
         
         self.setModified(modified)
         self.lastModified = QFileInfo(self.fileName).lastModified()
-        
+    
+    def __convertTabs(self):
+        """
+        Private slot to convert tabulators to spaces.
+        """
+        if (
+            (not self.__getEditorConfig("TabForIndentation")) and
+            Preferences.getEditor("ConvertTabsOnLoad") and
+            not (self.lexer_ and
+                 self.lexer_.alwaysKeepTabs())
+        ):
+            txt = self.text()
+            txtExpanded = txt.expandtabs(self.__getEditorConfig("TabWidth"))
+            if txtExpanded != txt:
+                self.beginUndoAction
+                self.setText(txt)
+                self.endUndoAction()
+                
+                self.setModified(True)
+    
     def __removeTrailingWhitespace(self):
         """
         Private method to remove trailing whitespace.
@@ -5577,6 +5587,7 @@
         """
         encoding = act.data()
         self.readFile(self.fileName, encoding=encoding)
+        self.__convertTabs()
         self.__checkEncoding()
         
     def __contextSave(self):
@@ -7084,6 +7095,7 @@
             # do not prompt for this change again...
             self.lastModified = QDateTime.currentDateTime()
         self.setModified(False)
+        self.__convertTabs()
         
         # re-initialize the online change tracer
         self.__reinitOnlineChangeTrace()
@@ -8349,7 +8361,11 @@
             if nodefault:
                 return None
             else:
-                return Preferences.getEditor(option)
+                value = self.__getOverrideValue(option)
+                if value is None:
+                    # no override
+                    value = Preferences.getEditor(option)
+                return value
         
         try:
             if option == "EOLMode":
@@ -8383,7 +8399,10 @@
         
         if value is None and not nodefault:
             # use Preferences in case of error
-            value = Preferences.getEditor(option)
+            value = self.__getOverrideValue(option)
+            if value is None:
+                # no override
+                value = Preferences.getEditor(option)
         
         return value
     
@@ -8398,6 +8417,25 @@
         """
         return self.__getEditorConfig(option)
     
+    def __getOverrideValue(self, option):
+        """
+        Private method to get an override value for the current file type.
+        
+        @param option Preferences option key
+        @type str
+        @return override value; None in case nothing is defined
+        @rtype any
+        """
+        if option in ("TabWidth", "IndentWidth"):
+            overrides = Preferences.getEditor("TabIndentOverride")
+            if self.filetype in overrides:
+                if option == "TabWidth":
+                    return overrides[self.filetype][0]
+                elif option == "IndentWidth":
+                    return overrides[self.filetype][1]
+        
+        return None
+    
     def mouseDoubleClickEvent(self, evt):
         """
         Protected method to handle mouse double click events.

eric ide

mercurial