View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update | 
|---|---|---|---|---|---|
| 0017156 | Scribus | Scripter | public | 2024-02-08 11:19 | 2024-02-08 21:38 | 
| Reporter | ale | Assigned To | |||
| Priority | normal | Severity | feature | Reproducibility | N/A | 
| Status | new | Resolution | open | ||
| Product Version | 1.7.0.svn | ||||
| Summary | 0017156: setting the text formatting for text in table cells | ||||
| Description | - it should be possible to select text inside of table cells - it should be possible to apply text formatting to the text inside of the table cells - modify the cell's text  | ||||
| Tags | No tags attached. | ||||
| Patch | No | ||||
| 
		 | 
	
	Here is a patch to enable setTextColor() on the current text selection in a table cell. The patch adds GetUniqueItemAsText(), that is like (and calls) GetUniqueItem() but returns nullptr if the PageItem cannot be used for text operations. Please review this approach. If it's a good idea, using GetUniqueItemAsText() (and replacing / simplifying the check for the matching item type) should allow to select text inside of the active cell and apply formatting to it. p.s.: the patch does not consider the case where a table is get by name but is not currently selected and has no active cell. i will add it later.  set-table-cell-text-color.diff (3,031 bytes)   
 
diff --git a/scribus/plugins/scriptplugin/cmdtext.cpp b/scribus/plugins/scriptplugin/cmdtext.cpp
index f09c93848..a2dab83ff 100644
--- a/scribus/plugins/scriptplugin/cmdtext.cpp
+++ b/scribus/plugins/scriptplugin/cmdtext.cpp
@@ -17,7 +17,6 @@ for which a new license (GPL+exception) is in place.
 #include "selection.h"
 #include "util.h"
 
-
 template<typename T>
 class ApplyCharstyleHelper
 {
@@ -1149,18 +1148,58 @@ PyObject *scribus_settextfill(PyObject* /* self */, PyObject* args)
 		return nullptr;
 	if (!checkHaveDocument())
 		return nullptr;
-	PageItem *item = GetUniqueItem(QString::fromUtf8(Name));
+	PageItem *item = GetUniqueItemAsText(QString::fromUtf8(Name));
 	if (item == nullptr)
-		return nullptr;
-	if (!item->isTextFrame() && !item->isPathText())
 	{
-		PyErr_SetString(WrongFrameTypeError, QObject::tr("Cannot set text fill on a non-text frame.","python error").toLocal8Bit().constData());
+		PyErr_SetString(WrongFrameTypeError, QObject::tr("Can only set text color on an item that behaves as a text frame.","python error").toLocal8Bit().constData());
 		return nullptr;
 	}
 	ApplyCharstyleHelper<QString>(item, QString::fromUtf8(Color)).apply(&CharStyle::setFillColor, 0, item->itemText.length());
 	Py_RETURN_NONE;
 }
 
 PyObject *scribus_settextstroke(PyObject* /* self */, PyObject* args)
 {
 	char *Name = const_cast<char*>("");
diff --git a/scribus/plugins/scriptplugin/cmdutil.cpp b/scribus/plugins/scriptplugin/cmdutil.cpp
index bbb26392d..6a1ddb643 100644
--- a/scribus/plugins/scriptplugin/cmdutil.cpp
+++ b/scribus/plugins/scriptplugin/cmdutil.cpp
@@ -6,6 +6,7 @@ for which a new license (GPL+exception) is in place.
 */
 
 #include "cmdutil.h"
+#include "pageitem_table.h"
 #include "prefsmanager.h"
 #include "resourcecollection.h"
 #include "scpage.h"
@@ -109,6 +110,26 @@ PageItem* GetUniqueItem(const QString& name)
 	return getPageItemByName(name);
 }
 
+PageItem* GetUniqueItemAsText(const QString& name)
+{
+	PageItem * item = GetUniqueItem(name);
+
+	if (item == nullptr)
+		return nullptr;
+
+	if (!item->isTextFrame() && !item->isPathText() && !item->isTable())
+		return nullptr;
+
+	if (item->isTable())
+	{
+		auto tableItem = item->asTable();
+		const auto& cell = tableItem->activeCell();
+		item = static_cast<PageItem *>(cell.textFrame());
+	}
+
+	return item;
+}
+
 PageItem* getPageItemByName(const QString& name)
 {
 	if (name.length() == 0)
diff --git a/scribus/plugins/scriptplugin/cmdutil.h b/scribus/plugins/scriptplugin/cmdutil.h
index fc2f3f2cd..642fc3699 100644
--- a/scribus/plugins/scriptplugin/cmdutil.h
+++ b/scribus/plugins/scriptplugin/cmdutil.h
@@ -43,6 +43,13 @@ void ReplaceColor(const QString& col, const QString& rep);
  */
 PageItem* GetUniqueItem(const QString& name);
 
+/*!
+ * @brief Returns PageItem if GetUniqueItem returns a PageItem that can be used as a TextFrame.
+ *
+ * @author 2024-02-08 ale rimoldi
+ */
+PageItem* GetUniqueItemAsText(const QString& name);
+
 /*!
  * @brief Returns named PageItem, or exception and NULL if not found.
  *
 | 
| 
		 | 
	
	@jghali / @mrb what do you think about creating the GetUniqueItemAsText() function that returns nullptr if the item cannot be used as a text frame? i'd like to prepare a patch that i can give to zinal (and let them help out for patching all formatting function to get support for tables)  | 
| Date Modified | Username | Field | Change | 
|---|---|---|---|
| 2024-02-08 11:19 | ale | New Issue | |
| 2024-02-08 11:23 | ale | Note Added: 0050972 | |
| 2024-02-08 11:23 | ale | File Added: set-table-cell-text-color.diff | |
| 2024-02-08 13:58 | ale | Description Updated | |
| 2024-02-08 14:49 | ale | Note Edited: 0050972 | |
| 2024-02-08 14:49 | ale | Note Edited: 0050972 | |
| 2024-02-08 21:38 | ale | Note Added: 0050973 |