View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0012332 | Scribus | Text Frames / Story Editor | public | 2014-05-27 21:46 | 2014-06-14 06:39 |
| Reporter | ale | Assigned To | cbradney | ||
| Priority | normal | Severity | feature | Reproducibility | N/A |
| Status | closed | Resolution | fixed | ||
| Product Version | 1.5.0svn | ||||
| Fixed in Version | 1.5.0svn | ||||
| Summary | 0012332: [PATCH] truncate overflow and show number of overflowing white spaces | ||||
| Description | - implement the truncate function (in a similar way as clear contents) - extend the overflow tooltip to show howmany spaces there are in the overflow - since there is undo, remove the message from both clear and truncate | ||||
| Tags | No tags attached. | ||||
| Attached Files | truncate.diff (14,229 bytes)
Index: scribus/actionmanager.cpp
===================================================================
--- scribus/actionmanager.cpp (revision 19121)
+++ scribus/actionmanager.cpp (working copy)
@@ -214,6 +214,8 @@
scrActions->insert(name, new ScrAction(loadIcon("16/edit-paste.png"), loadIcon("22/edit-paste.png"), "", defaultKey(name), mainWindow));
name="editClearContents";
scrActions->insert(name, new ScrAction(loadIcon("16/edit-delete.png"), loadIcon("22/edit-delete.png"), "", defaultKey(name), mainWindow));
+ name="editTruncateContents";
+ scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
name="editSelectAll";
scrActions->insert(name, new ScrAction("", defaultKey(name), mainWindow));
name="editSelectAllOnLayer";
@@ -1304,6 +1306,7 @@
disconnect( (*scrActions)["itemPreviewNormal"], SIGNAL(triggeredData(int)) , 0, 0);
disconnect( (*scrActions)["itemPreviewFull"], SIGNAL(triggeredData(int)) , 0, 0);
disconnect( (*scrActions)["editClearContents"], 0, 0, 0);
+ disconnect( (*scrActions)["editTruncateContents"], 0, 0, 0);
}
void ActionManager::connectNewSelectionActions(ScribusView* /*currView*/, ScribusDoc* currDoc)
@@ -1313,6 +1316,7 @@
connect( (*scrActions)["itemPreviewNormal"], SIGNAL(triggeredData(int)), currDoc, SLOT(itemSelection_ChangePreviewResolution(int)) );
connect( (*scrActions)["itemPreviewFull"], SIGNAL(triggeredData(int)), currDoc, SLOT(itemSelection_ChangePreviewResolution(int)) );
connect( (*scrActions)["editClearContents"], SIGNAL(triggered()), currDoc, SLOT(itemSelection_ClearItem()) );
+ connect( (*scrActions)["editTruncateContents"], SIGNAL(triggered()), currDoc, SLOT(itemSelection_TruncateItem()) );
}
void ActionManager::saveActionShortcutsPreEditMode()
@@ -1477,6 +1481,7 @@
(*scrActions)["editPasteContentsAbs"]->setTexts( tr("Paste (&Absolute)"));
(*scrActions)["editPasteImageFromClipboard"]->setTexts( tr("Paste Image from Clipboard"));
(*scrActions)["editClearContents"]->setTexts( tr("C&lear"));
+ (*scrActions)["editTruncateContents"]->setTexts( tr("T&runcate"));
(*scrActions)["editSelectAll"]->setTexts( tr("Select &All"));
(*scrActions)["editSelectAllOnLayer"]->setTexts( tr("Advanced Select All..."));
(*scrActions)["editDeselectAll"]->setTexts( tr("&Deselect All"));
@@ -2032,6 +2037,7 @@
<< "editPasteContentsAbs"
<< "editPasteImageFromClipboard"
<< "editClearContents"
+ << "editTruncateContents"
<< "editSelectAll"
<< "editSelectAllOnLayer"
<< "editDeselectAll"
@@ -2530,6 +2536,7 @@
(*scrActions)["editPaste"]->setEnabled(false);
// scrMenuMgr->setMenuEnabled("EditPasteRecent", false);
(*scrActions)["editClearContents"]->setEnabled(false);
+ (*scrActions)["editTruncateContents"]->setEnabled(false);
(*scrActions)["editSelectAll"]->setEnabled(false);
(*scrActions)["editSelectAllOnLayer"]->setEnabled(false);
(*scrActions)["editDeselectAll"]->setEnabled(false);
Index: scribus/canvasmode_normal.cpp
===================================================================
--- scribus/canvasmode_normal.cpp (revision 19121)
+++ scribus/canvasmode_normal.cpp (working copy)
@@ -434,7 +434,7 @@
{
if (m_canvas->cursorOverTextFrameControl(m->globalPos(), hoveredItem))
{
- QToolTip::showText(m->globalPos() + QPoint(5, 5), tr("Overflow Characters: %1").arg(hoveredItem->frameOverflowCount()), m_canvas);
+ QToolTip::showText(m->globalPos() + QPoint(5, 5), tr("Overflow Characters: %1 (%2 White Spaces)").arg(hoveredItem->frameOverflowCount()).arg(hoveredItem->frameOverflowBlankCount()), m_canvas);
}
}
else
Index: scribus/pageitem.cpp
===================================================================
--- scribus/pageitem.cpp (revision 19121)
+++ scribus/pageitem.cpp (working copy)
@@ -32,6 +32,7 @@
#include <QFileInfo>
#include <qdrawutil.h>
#include <QRegExp>
+#include <QRegularExpression>
#include <QMessageBox>
#include <QPolygon>
#include <cassert>
@@ -1173,6 +1174,15 @@
return 0;
}
+int PageItem::frameOverflowBlankCount()
+{
+ if (frameOverflows())
+ return itemText.plainText().right(itemText.length() - MaxChars).count(QRegularExpression("\\s+"));
+
+ return 0;
+}
+
int PageItem::maxCharsInFrame()
{
return MaxChars;
Index: scribus/pageitem.h
===================================================================
--- scribus/pageitem.h (revision 19121)
+++ scribus/pageitem.h (working copy)
@@ -297,6 +297,7 @@
* The view does when these are called.
*/
virtual void clearContents() {}
+ virtual void truncateContents() {}
//>> ********* Functions to work on the contents of the items *********
@@ -378,6 +379,7 @@
bool frameOverflows() const;
bool frameUnderflows() const;
int frameOverflowCount() const;
+ int frameOverflowBlankCount();
/// Draws the overflow marker.
void drawOverflowMarker(ScPainter *p);
/// returns index of first char displayed in this frame, used to be 0
Index: scribus/pageitem_textframe.cpp
===================================================================
--- scribus/pageitem_textframe.cpp (revision 19121)
+++ scribus/pageitem_textframe.cpp (working copy)
@@ -4054,6 +4054,23 @@
}
}
+void PageItem_TextFrame::truncateContents()
+{
+ if ((this->nextInChain() == NULL) && frameOverflows())
+ {
+ ParagraphStyle defaultStyle = this->itemText.defaultStyle();
+ int pos = itemText.cursorPosition();
+ if (itemText.lengthOfSelection() == 0)
+ {
+ itemText.select(maxCharsInFrame(), itemText.length() - maxCharsInFrame(), true);
+ deleteSelectedTextFromFrame();
+ }
+ itemText.setCursorPosition(pos, true);
+
+ if(UndoManager::undoEnabled() && undoManager->getLastUndo())
+ undoManager->getLastUndo()->setName(Um::TruncateText);
+ this->itemText.setDefaultStyle(defaultStyle);
+ }
+}
+
void PageItem_TextFrame::handleModeEditKey(QKeyEvent *k, bool& keyRepeat)
{
if (frameUnderflows())
@@ -5269,6 +5286,7 @@
if (textLayout.lines() != 0)
{
actionList << "editClearContents";
+ actionList << "editTruncateContents";
actionList << "itemAdjustFrameHeightToText";
}
}
Index: scribus/pageitem_textframe.h
===================================================================
--- scribus/pageitem_textframe.h (revision 19121)
+++ scribus/pageitem_textframe.h (working copy)
@@ -55,6 +55,7 @@
virtual bool isTextFrame() const { return true; }
virtual void clearContents();
+ virtual void truncateContents();
/**
* \brief Handle keyboard interaction with the text frame while in edit mode
Index: scribus/plugins/export/CMakeLists.txt
===================================================================
--- scribus/plugins/export/CMakeLists.txt (revision 19121)
+++ scribus/plugins/export/CMakeLists.txt (working copy)
@@ -1,3 +1,4 @@
ADD_SUBDIRECTORY(pixmapexport)
ADD_SUBDIRECTORY(svgexplugin)
ADD_SUBDIRECTORY(xpsexport)
+ADD_SUBDIRECTORY(epub)
Index: scribus/scribus.cpp
===================================================================
--- scribus/scribus.cpp (revision 19121)
+++ scribus/scribus.cpp (working copy)
@@ -798,6 +798,7 @@
scrMenuMgr->addMenuItemString("editPasteContents", "EditContents");
scrMenuMgr->addMenuItemString("editPasteContentsAbs", "EditContents");
scrMenuMgr->addMenuItemString("editClearContents", "EditContents");
+ scrMenuMgr->addMenuItemString("editTruncateContents", "EditContents");
scrMenuMgr->addMenuItemString("itemDelete", "Edit");
scrMenuMgr->addMenuItemString("SEPARATOR", "Edit");
scrMenuMgr->addMenuItemString("editSelectAll", "Edit");
@@ -2766,6 +2767,7 @@
scrActions["editCopy"]->setEnabled(true);
scrMenuMgr->setMenuEnabled("EditContents", true);
scrActions["editClearContents"]->setEnabled(true);
+ scrActions["editTruncateContents"]->setEnabled(false);
scrActions["editSearchReplace"]->setEnabled(false);
scrActions["extrasHyphenateText"]->setEnabled(false);
scrActions["extrasDeHyphenateText"]->setEnabled(false);
@@ -2820,6 +2822,7 @@
scrActions["editCopy"]->setEnabled(true);
scrMenuMgr->setMenuEnabled("EditContents", true);
scrActions["editClearContents"]->setEnabled(true);
+ scrActions["editTruncateContents"]->setEnabled(true);
scrActions["editSearchReplace"]->setEnabled(currItem->itemText.length() != 0);
scrActions["extrasHyphenateText"]->setEnabled(true);
scrActions["extrasDeHyphenateText"]->setEnabled(true);
@@ -2937,6 +2940,7 @@
scrActions["editCut"]->setEnabled(true);
scrActions["editCopy"]->setEnabled(true);
scrActions["editClearContents"]->setEnabled(false);
+ scrActions["editTruncateContents"]->setEnabled(false);
scrActions["editSearchReplace"]->setEnabled(false);
scrActions["extrasHyphenateText"]->setEnabled(false);
scrActions["extrasDeHyphenateText"]->setEnabled(false);
@@ -3003,6 +3007,7 @@
scrActions["editCopy"]->setEnabled(true);
scrMenuMgr->setMenuEnabled("EditContents", false);
scrActions["editClearContents"]->setEnabled(false);
+ scrActions["editTruncateContents"]->setEnabled(false);
scrActions["editSearchReplace"]->setEnabled(false);
scrActions["extrasHyphenateText"]->setEnabled(false);
@@ -3195,6 +3200,7 @@
scrActions["itemSendToInline"]->setEnabled(true);
scrActions["editCut"]->setEnabled(false);
scrActions["editClearContents"]->setEnabled(false);
+ scrActions["editTruncateContents"]->setEnabled(false);
scrActions["toolsRotate"]->setEnabled(false);
}
else
@@ -6493,6 +6499,7 @@
zoomSpinBox->setFocusPolicy(Qt::ClickFocus);
pageSelector->setFocusPolicy(Qt::ClickFocus);
scrActions["editClearContents"]->setEnabled(false);
+ scrActions["editTruncateContents"]->setEnabled(false);
charPalette->setEnabled(false, 0);
// view->slotDoCurs(false);
if (currItem != 0)
@@ -6586,6 +6593,7 @@
scrActions["editCut"]->setEnabled(currItem->HasSel);
scrActions["editCopy"]->setEnabled(currItem->HasSel);
scrActions["editClearContents"]->setEnabled(currItem->HasSel);
+ scrActions["editTruncateContents"]->setEnabled(currItem->HasSel);
scrActions["editSearchReplace"]->setEnabled(true);
// Why the hell do you want to update the item here? - pm
Index: scribus/scribusdoc.cpp
===================================================================
--- scribus/scribusdoc.cpp (revision 19121)
+++ scribus/scribusdoc.cpp (working copy)
@@ -11615,12 +11615,6 @@
uint selectedItemCount = itemSelection->count();
if (selectedItemCount <= 0)
return;
- if (ScCore->usingGUI())
- {
- int t = QMessageBox::warning(m_ScMW, CommonStrings::trWarning, tr("Do you really want to clear the content of all selected frames?"), QMessageBox::Yes, QMessageBox::No | QMessageBox::Default);
- if (t == QMessageBox::No)
- return;
- }
for (uint i = 0; i < selectedItemCount; ++i)
{
PageItem *currItem = itemSelection->itemAt(i);
@@ -11635,6 +11629,23 @@
changed();
}
+void ScribusDoc::itemSelection_TruncateItem(Selection* customSelection)
+{
+ Selection* itemSelection = (customSelection != 0) ? customSelection : m_Selection;
+ assert(itemSelection != 0);
+
+ uint selectedItemCount = itemSelection->count();
+ if (selectedItemCount <= 0)
+ return;
+ for (uint i = 0; i < selectedItemCount; ++i)
+ {
+ PageItem *currItem = itemSelection->itemAt(i);
+ currItem->truncateContents();
+ }
+ regionsChanged()->update(QRectF());
+ changed();
+}
+
QList<PageItem*>* ScribusDoc::GroupOfItem(QList<PageItem*>* itemList, PageItem* item)
{
if (itemList->contains(item))
Index: scribus/scribusdoc.h
===================================================================
--- scribus/scribusdoc.h (revision 19121)
+++ scribus/scribusdoc.h (working copy)
@@ -1446,6 +1446,7 @@
void item_setFrameShape(PageItem* item, int frameType, int count, double* points);
void itemSelection_ClearItem(Selection* customSelection=0);
+ void itemSelection_TruncateItem(Selection* customSelection=0);
//! Delete the items in the current selection. When force is true, we do not warn the user and make SE happy too. Force is used from @sa Page::restorePageItemCreation
void itemSelection_DeleteItem(Selection* customSelection=0, bool forceDeletion=false);
void itemSelection_SetItemTextReversed(bool reversed, Selection* customSelection=0);
Index: scribus/ui/contextmenu.cpp
===================================================================
--- scribus/ui/contextmenu.cpp (revision 19121)
+++ scribus/ui/contextmenu.cpp (working copy)
@@ -473,6 +473,8 @@
if (currItem->asImageFrame() && m_actionList.contains("editPasteContentsAbs"))
menuEditContents->addAction(m_ScMW->scrActions["editPasteContentsAbs"]);
}
+ if (m_actionList.contains("editTruncateContents"))
+ menuEditContents->addAction(m_ScMW->scrActions["editTruncateContents"]);
if (m_actionList.contains("editClearContents"))
menuEditContents->addAction(m_ScMW->scrActions["editClearContents"]);
if (menuEditContents->actions().count()>0)
Index: scribus/undomanager.cpp
===================================================================
--- scribus/undomanager.cpp (revision 19121)
+++ scribus/undomanager.cpp (working copy)
@@ -1003,6 +1003,7 @@
UndoManager::AppendText = tr("Append text");
UndoManager::ImportText = tr("Import text");
UndoManager::ClearText = tr("Clear text");
+ UndoManager::TruncateText = tr("Truncate text");
UndoManager::AddLoremIpsum = tr("Add Lorem Ipsum");
UndoManager::InsertMark = tr("Insert mark");
UndoManager::InsertNote = tr("Insert note");
@@ -1274,6 +1275,7 @@
QString UndoManager::AppendText = "";
QString UndoManager::ImportText = "";
QString UndoManager::ClearText = "";
+QString UndoManager::TruncateText = "";
QString UndoManager::ReplaceText = "";
QString UndoManager::InsertText = "";
QString UndoManager::AddLoremIpsum = "";
Index: scribus/undomanager.h
===================================================================
--- scribus/undomanager.h (revision 19121)
+++ scribus/undomanager.h (working copy)
@@ -584,6 +584,7 @@
static QString AppendText;
static QString ImportText;
static QString ClearText;
+ static QString TruncateText;
static QString AddLoremIpsum;
static QString DeleteText;
static QString InsertText;
| ||||
| Patch | |||||
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2014-05-27 21:46 | ale | New Issue | |
| 2014-05-27 21:46 | ale | File Added: truncate.diff | |
| 2014-05-27 21:59 | ale | Summary | truncate overflow and show number of overflowing white spaces => [PATCH] truncate overflow and show number of overflowing white spaces |
| 2014-06-04 11:02 | ale | Relationship added | related to 0011847 |
| 2014-06-07 11:37 | cbradney | Status | new => resolved |
| 2014-06-07 11:37 | cbradney | Fixed in Version | => 1.5.0svn |
| 2014-06-07 11:37 | cbradney | Resolution | open => fixed |
| 2014-06-07 11:37 | cbradney | Assigned To | => cbradney |
| 2014-06-14 06:39 | cbradney | Status | resolved => closed |
| 2015-09-17 20:08 | Kunda | Category | Story Editor / Text Frames => Story Ed/Txt Frames |
| 2015-09-17 20:12 | Kunda | Category | Story Ed/Txt Frames => Story Editor / Text Frames |
| 2025-04-27 19:16 | cbradney | Category | Story Editor / Text Frames => Text Frames / Story Editor |