[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/plugins/textshape
From: Thomas Zander <zander () kde ! org>
Date: 2010-01-24 11:38:14
Message-ID: 1264333094.075502.1390.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 1079499 by zander:
Fix design of texteditor plugins
The text-editor plugins should have one instance per document
instead of what it had before, one instance per tool (which equals view,
roughly). And this caused loads of crashes ;)
M +1 -0 CMakeLists.txt
A TextEditingPluginContainer.cpp [License: LGPL (v2+)]
A TextEditingPluginContainer.h [License: LGPL (v2+)]
M +41 -45 TextTool.cpp
M +3 -3 TextTool.h
M +1 -0 tests/CMakeLists.txt
--- trunk/koffice/plugins/textshape/CMakeLists.txt #1079498:1079499
@@ -17,6 +17,7 @@
TextShape.cpp
TextShapeFactory.cpp
TextTool.cpp
+ TextEditingPluginContainer.cpp
TextToolFactory.cpp
Layout.cpp
ListItemsHelper.cpp
--- trunk/koffice/plugins/textshape/TextTool.cpp #1079498:1079499
@@ -22,6 +22,7 @@
*/
#include "TextTool.h"
+#include "TextEditingPluginContainer.h"
#include "dialogs/SimpleStyleWidget.h"
#include "dialogs/StylesWidget.h"
#include "dialogs/ParagraphSettingsDialog.h"
@@ -96,7 +97,6 @@
m_prevCursorPosition(-1),
m_caretTimer(this),
m_caretTimerState(true),
- m_spellcheckPlugin(0),
m_currentCommand(0),
m_currentCommandHasChildren(false),
m_specialCharacterDocker(0),
@@ -310,35 +310,50 @@
action->setToolTip(i18n("Change text attributes to their default values"));
connect(action, SIGNAL(triggered()), this, SLOT(setDefaultFormat()));
- foreach (const QString &key, KoTextEditingRegistry::instance()->keys()) {
- KoTextEditingFactory *factory = \
KoTextEditingRegistry::instance()->value(key);
- Q_ASSERT(factory);
- if (m_textEditingPlugins.contains(factory->id())) {
- kWarning(32500) << "Duplicate id for textEditingPlugin, ignoring one! (" \
<< factory->id() << ")";
- continue;
- }
- QString factoryId = factory->id();
- KoTextEditingPlugin *plugin = factory->create();
- if (factoryId == "spellcheck") {
- kDebug(32500) << "KOffice SpellCheck plugin found";
- m_spellcheckPlugin = plugin;
- connect(canvas->resourceManager(), SIGNAL(resourceChanged(int, const \
QVariant &)),
- plugin, SLOT(resourceChanged(int, const QVariant &)));
- }
- m_textEditingPlugins.insert(factory->id(), plugin);
+ m_textEditingPlugins = canvas->resourceManager()->
+ resource(TextEditingPluginContainer::ResourceId).value<TextEditingPluginContainer*>();
+ if (m_textEditingPlugins == 0) {
+ m_textEditingPlugins = new \
TextEditingPluginContainer(canvas->resourceManager()); + QVariant variant;
+ variant.setValue(m_textEditingPlugins);
+ canvas->resourceManager()->setResource(TextEditingPluginContainer::ResourceId, \
variant); }
- foreach (KoTextEditingPlugin* plugin, m_textEditingPlugins) {
- connect(plugin, SIGNAL(startMacro(const QString &)), this, \
SLOT(startMacro(const QString &))); + foreach (KoTextEditingPlugin* plugin, \
m_textEditingPlugins->values()) { + connect(plugin, SIGNAL(startMacro(const \
QString &)), + this, SLOT(startMacro(const QString &)));
connect(plugin, SIGNAL(stopMacro()), this, SLOT(stopMacro()));
QHash<QString, KAction*> actions = plugin->actions();
QHash<QString, KAction*>::iterator i = actions.begin();
while (i != actions.end()) {
addAction(i.key(), i.value());
- i++;
+ ++i;
}
}
+ if (m_textEditingPlugins->spellcheck()) {
+ connect(canvas->resourceManager(), SIGNAL(resourceChanged(int, const \
QVariant&)), + m_textEditingPlugins->spellcheck(), \
SLOT(resourceChanged(int, const QVariant&))); + }
+ // setup the context list.
+ QSignalMapper *signalMapper = new QSignalMapper(this);
+ connect(signalMapper, SIGNAL(mapped(QString)), this, \
SLOT(startTextEditingPlugin(QString))); + QList<QAction*> list;
+ list.append(this->action("text_default"));
+ list.append(this->action("format_font"));
+ foreach (const QString &key, KoTextEditingRegistry::instance()->keys()) {
+ KoTextEditingFactory *factory = \
KoTextEditingRegistry::instance()->value(key); + if (factory->showInMenu()) {
+ KAction *a = new KAction(i18n("Apply %1").arg(factory->title()), this);
+ connect(a, SIGNAL(triggered()), signalMapper, SLOT(map()));
+ signalMapper->setMapping(a, factory->id());
+ list.append(a);
+ addAction(QString("apply_%1").arg(factory->id()), a);
+ }
+ }
+ setPopupActionList(list);
+
+
action = new KAction(i18n("Table..."), this);
addAction("insert_table", action);
action->setShortcut(Qt::ALT + Qt::CTRL + Qt::Key_P);
@@ -395,24 +410,6 @@
connect(action, SIGNAL(triggered()), this, SLOT(debugTextStyles()));
#endif
- // setup the context list.
- QSignalMapper *signalMapper = new QSignalMapper(this);
- connect(signalMapper, SIGNAL(mapped(QString)), this, \
SLOT(startTextEditingPlugin(QString)));
- QList<QAction*> list;
- list.append(this->action("text_default"));
- list.append(this->action("format_font"));
- foreach (const QString & key, KoTextEditingRegistry::instance()->keys()) {
- KoTextEditingFactory *factory = \
KoTextEditingRegistry::instance()->value(key);
- if (factory->showInMenu()) {
- KAction *a = new KAction(i18n("Apply %1").arg(factory->title()), this);
- connect(a, SIGNAL(triggered()), signalMapper, SLOT(map()));
- signalMapper->setMapping(a, factory->id());
- list.append(a);
- addAction(QString("apply_%1").arg(factory->id()), a);
- }
- }
- setPopupActionList(list);
-
connect(canvas->shapeManager()->selection(), SIGNAL(selectionChanged()), this, \
SLOT(shapeAddedToCanvas()));
m_caretTimer.setInterval(500);
@@ -438,10 +435,10 @@
m_prevCursorPosition(-1),
m_caretTimer(this),
m_caretTimerState(true),
- m_spellcheckPlugin(0),
m_currentCommand(0),
m_currentCommandHasChildren(false),
m_specialCharacterDocker(0),
+ m_textEditingPlugins(0),
m_changeTipTimer(this),
m_changeTipCursorPos(0)
{
@@ -451,7 +448,6 @@
TextTool::~TextTool()
{
- qDeleteAll(m_textEditingPlugins);
}
void TextTool::showChangeTip()
@@ -706,8 +702,8 @@
}
}
m_textEditor->updateDefaultTextDirection(m_textShapeData->pageDirection());
- if (m_spellcheckPlugin)
- m_spellcheckPlugin->checkSection(m_textShapeData->document(), 0, 0);
+ if (m_textEditingPlugins->spellcheck())
+ m_textEditingPlugins->spellcheck()->checkSection(m_textShapeData->document(), \
0, 0); }
void TextTool::updateSelectionHandler()
@@ -1763,7 +1759,7 @@
void TextTool::startTextEditingPlugin(const QString &pluginId)
{
- KoTextEditingPlugin *plugin = m_textEditingPlugins.value(pluginId);
+ KoTextEditingPlugin *plugin = m_textEditingPlugins->plugin(pluginId);
if (plugin) {
if (m_textEditor->hasSelection()) {
int from = m_textEditor->position();
@@ -1891,13 +1887,13 @@
void TextTool::finishedWord()
{
- foreach (KoTextEditingPlugin* plugin, m_textEditingPlugins)
+ foreach (KoTextEditingPlugin* plugin, m_textEditingPlugins->values())
plugin->finishedWord(m_textShapeData->document(), m_prevCursorPosition);
}
void TextTool::finishedParagraph()
{
- foreach (KoTextEditingPlugin* plugin, m_textEditingPlugins)
+ foreach (KoTextEditingPlugin* plugin, m_textEditingPlugins->values())
plugin->finishedParagraph(m_textShapeData->document(), \
m_prevCursorPosition); }
--- trunk/koffice/plugins/textshape/TextTool.h #1079498:1079499
@@ -33,6 +33,7 @@
#include <QTimer>
#include <QPointer>
+class TextEditingPluginContainer;
class InsertCharacter;
class KoChangeTracker;
class KoCharacterStyle;
@@ -304,9 +305,6 @@
KoColorPopupAction *m_actionFormatTextColor;
KoColorPopupAction *m_actionFormatBackgroundColor;
- QHash<QString, KoTextEditingPlugin*> m_textEditingPlugins;
- KoTextEditingPlugin *m_spellcheckPlugin;
-
QUndoCommand *m_currentCommand; //this command will be the direct parent of \
undoCommands generated as the result of QTextDocument changes
bool m_currentCommandHasChildren;
@@ -321,6 +319,8 @@
InsertCharacter *m_specialCharacterDocker;
+ TextEditingPluginContainer *m_textEditingPlugins;
+
bool m_textTyping;
bool m_textDeleting;
--- trunk/koffice/plugins/textshape/tests/CMakeLists.txt #1079498:1079499
@@ -39,6 +39,7 @@
../commands/AcceptChangeCommand.cpp
../commands/RejectChangeCommand.cpp
../TextTool.cpp
+ ../TextEditingPluginContainer.cpp
../ChangeTracker.cpp
../dialogs/FontDia.cpp
../dialogs/InsertCharacter.cpp
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic