Author: jghali
Date: Fri May 29 19:08:01 2020
New Revision: 23853

URL: http://scribus.net/websvn/listing.php?repname=Scribus&sc=1&rev=23853
Log:
Improve performance of scripter's getAllText() and getFrameText()

Modified:
    trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.cpp
    trunk/Scribus/scribus/plugins/scriptplugin_py2x/cmdtext.cpp

Modified: trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23853&path=/trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.cpp      (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin/cmdtext.cpp      Fri May 29 
19:08:01 2020
@@ -314,7 +314,6 @@
                return nullptr;
        if (!checkHaveDocument())
                return nullptr;
-       QString text = "";
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
        if (item == nullptr)
                return nullptr;
@@ -323,16 +322,20 @@
                PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot get 
text of non-text frame.","python error").toLocal8Bit().constData());
                return nullptr;
        }
+       
+       const StoryText& story = item->itemText;
+       QString text;
+       text.reserve(story.isSelected() ? story.selectionLength() : 
story.length());
        for (int i = item->firstInFrame(); i <= item->lastInFrame(); ++i)
        {
                if (item->HasSel)
                {
-                       if (item->itemText.selected(i))
-                               text += item->itemText.text(i);
+                       if (story.selected(i))
+                               text += story.text(i);
                }
                else
                {
-                       text += item->itemText.text(i);
+                       text += story.text(i);
                }
        }
        return PyUnicode_FromString(text.toUtf8());
@@ -345,7 +348,6 @@
                return nullptr;
        if (!checkHaveDocument())
                return nullptr;
-       QString text = "";
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
        if (item == nullptr)
                return nullptr;
@@ -356,18 +358,21 @@
        }
 
        // collect all chars from a storytext
-       for (int i = 0; i < item->itemText.length(); i++)
+       const StoryText& story = item->itemText;
+       QString text;
+       text.reserve(story.isSelected() ? story.selectionLength() : 
story.length());
+       for (int i = 0; i < story.length(); i++)
        {
                if (item->HasSel)
                {
-                       if (item->itemText.selected(i))
-                               text += item->itemText.text(i);
+                       if (story.selected(i))
+                               text += story.text(i);
                }
                else
                {
-                       text += item->itemText.text(i);
+                       text += story.text(i);
                }
-       } // for
+       }
        return PyUnicode_FromString(text.toUtf8());
 }
 

Modified: trunk/Scribus/scribus/plugins/scriptplugin_py2x/cmdtext.cpp
URL: 
http://scribus.net/websvn/diff.php?repname=Scribus&rev=23853&path=/trunk/Scribus/scribus/plugins/scriptplugin_py2x/cmdtext.cpp
==============================================================================
--- trunk/Scribus/scribus/plugins/scriptplugin_py2x/cmdtext.cpp (original)
+++ trunk/Scribus/scribus/plugins/scriptplugin_py2x/cmdtext.cpp Fri May 29 
19:08:01 2020
@@ -314,7 +314,6 @@
                return nullptr;
        if (!checkHaveDocument())
                return nullptr;
-       QString text = "";
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
        if (item == nullptr)
                return nullptr;
@@ -323,16 +322,20 @@
                PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot get 
text of non-text frame.","python error").toLocal8Bit().constData());
                return nullptr;
        }
+       
+       const StoryText& story = item->itemText;
+       QString text;
+       text.reserve(story.isSelected() ? story.selectionLength() : 
story.length());
        for (int i = item->firstInFrame(); i <= item->lastInFrame(); ++i)
        {
                if (item->HasSel)
                {
-                       if (item->itemText.selected(i))
-                               text += item->itemText.text(i);
+                       if (story.selected(i))
+                               text += story.text(i);
                }
                else
                {
-                       text += item->itemText.text(i);
+                       text += story.text(i);
                }
        }
        return PyString_FromString(text.toUtf8());
@@ -345,7 +348,6 @@
                return nullptr;
        if (!checkHaveDocument())
                return nullptr;
-       QString text = "";
        PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
        if (item == nullptr)
                return nullptr;
@@ -356,18 +358,21 @@
        }
 
        // collect all chars from a storytext
-       for (int i = 0; i < item->itemText.length(); i++)
+       const StoryText& story = item->itemText;
+       QString text;
+       text.reserve(story.isSelected() ? story.selectionLength() : 
story.length());
+       for (int i = 0; i < story.length(); i++)
        {
                if (item->HasSel)
                {
-                       if (item->itemText.selected(i))
-                               text += item->itemText.text(i);
+                       if (story.selected(i))
+                               text += story.text(i);
                }
                else
                {
-                       text += item->itemText.text(i);
+                       text += story.text(i);
                }
-       } // for
+       }
        return PyString_FromString(text.toUtf8());
 }
 


_______________________________________________
scribus-commit mailing list
[email protected]
http://lists.scribus.net/mailman/listinfo/scribus-commit

Reply via email to