[prev in list] [next in list] [prev in thread] [next in thread]
List: koffice-devel
Subject: koffice
From: Thomas Zander <zander () kde ! org>
Date: 2007-07-08 16:34:28
Message-ID: 1183912468.886533.23471.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 685336 by zander:
Introduce a KoFind class which is a controller that creates the find
actions and is able to work with the text tool to let the user search for \
text in the current text document.
This will work for all KOffice apps; so feel free to add it to your app
if you think it makes sense to have a Find on the current text-shape.
CCMAIL: koffice-devel@kde.org
TODO; limit results based on text-style / replace.
M +4 -6 kword/part/KWView.cpp
M +1 -0 libs/kotext/CMakeLists.txt
A libs/kotext/KoFind.cpp [License: LGPL (v2+)]
A libs/kotext/KoFind.h [License: LGPL (v2+)]
M +0 -1 libs/kotext/KoRulerController.cpp
M +3 -3 libs/kotext/KoText.h
M +30 -4 shapes/text/TextTool.cpp
M +5 -1 shapes/text/TextTool.h
--- trunk/koffice/kword/part/KWView.cpp #685335:685336
@@ -37,6 +37,7 @@
#include <KoPasteController.h>
#include <KoShape.h>
#include <KoText.h>
+#include <KoFind.h>
#include <KoShapeContainer.h>
#include <KoShapeManager.h>
#include <KoSelection.h>
@@ -87,8 +88,10 @@
setupActions();
- connect( kwcanvas()->shapeManager()->selection(), SIGNAL( \
selectionChanged() ), this, SLOT( selectionChanged() ) ); + connect( \
m_canvas->shapeManager()->selection(), SIGNAL( selectionChanged() ), this, \
SLOT( selectionChanged() ) );
+ new KoFind(this, m_canvas->resourceProvider(), actionCollection());
+
m_zoomController = new KoZoomController(m_gui->canvasController(), \
&m_zoomHandler, actionCollection(), true); KoZoomMode::Modes modes = \
KoZoomMode::ZOOM_WIDTH; if ( m_canvas->viewMode()->hasPages() )
@@ -245,11 +248,6 @@
// -------------- Edit actions
m_actionEditCut = actionCollection()->addAction(KStandardAction::Cut, \
"edit_cut", this, SLOT( editCut() ));
m_actionEditCopy = \
actionCollection()->addAction(KStandardAction::Copy, "edit_copy", this, \
SLOT( editCopy() ));
- m_actionEditFind = \
actionCollection()->addAction(KStandardAction::Find, "edit_find", this, \
SLOT( editFind() ));
- m_actionEditFindNext = \
actionCollection()->addAction(KStandardAction::FindNext, "edit_findnext", \
this, SLOT( editFindNext() ));
- m_actionEditFindPrevious = \
actionCollection()->addAction(KStandardAction::FindPrev, \
"edit_findprevious", this, SLOT( editFindPrevious() ));
- m_actionEditReplace = \
actionCollection()->addAction(KStandardAction::Replace, "edit_replace", \
this, SLOT( editReplace() ));
- m_actionEditSelectAll = \
actionCollection()->addAction(KStandardAction::SelectAll, \
"edit_selectall", this, SLOT( editSelectAll() ));
new KAction( i18n( "Select All Frames" ), 0, this, SLOT( \
editSelectAllFrames() ), actionCollection(), \
"edit_selectallframes" );
m_actionEditSelectCurrentFrame = new KAction( i18n( "Select Frame" ), \
0, 0, this, SLOT( editSelectCurrentFrame() ),
--- trunk/koffice/libs/kotext/CMakeLists.txt #685335:685336
@@ -53,6 +53,7 @@
KoBookmark.cpp
KoBookmarkManager.cpp
KoRulerController.cpp
+ KoFind.cpp
styles/Styles_p.cpp
styles/KoCharacterStyle.cpp
--- trunk/koffice/libs/kotext/KoRulerController.cpp #685335:685336
@@ -88,7 +88,6 @@
}
void tabsChanged(bool final) {
-kDebug() << "tabsChanged\n";
Q_UNUSED(final); // TODO use this to cache the tab struct I'm \
altering. QTextBlock block = currentBlock();
if(! block.isValid())
--- trunk/koffice/libs/kotext/KoText.h #685335:685336
@@ -37,9 +37,9 @@
enum Options {
ShowTextFrames = 278622039,
BidiDocument = 493038196,
- CurrentTextDocument = 382490375,
- CurrentTextPosition = 183523,
- CurrentTextAnchor = 341899485
+ CurrentTextDocument = 382490375, ///< set by the text plugin \
whenever the document is changed + CurrentTextPosition = 183523, \
///< set by the text plugin whenever the position is changed + \
CurrentTextAnchor = 341899485 ///< set by the text plugin whenever the \
anchor-position is changed };
/// enum for a type of tabulator used
--- trunk/koffice/shapes/text/TextTool.cpp #685335:685336
@@ -108,6 +108,7 @@
m_allowActions(true),
m_allowAddUndoCommand(true),
m_trackChanges(false),
+ m_allowResourceProviderUpdates(true),
m_prevCursorPosition(-1),
m_currentCommand(0),
m_currentCommandHasChildren(false)
@@ -357,7 +358,7 @@
if(canMoveCaret) {
bool shiftPressed = event->modifiers() & Qt::ShiftModifier;
if(m_caret.hasSelection() && !shiftPressed)
- repaintSelection(m_caret.position(), m_caret.anchor()); // \
will erase selection + repaintSelection(); // will erase \
selection else if(! m_caret.hasSelection())
repaintCaret();
int prevPosition = m_caret.position();
@@ -441,6 +442,7 @@
clipboard->setText(m_caret.selectedText(), \
QClipboard::Selection); }
KoCanvasResourceProvider *p = m_canvas->resourceProvider();
+ m_allowResourceProviderUpdates = false;
if(m_textShapeData) {
p->setResource(KoText::CurrentTextPosition, m_caret.position());
p->setResource(KoText::CurrentTextAnchor, m_caret.anchor());
@@ -453,6 +455,7 @@
p->clearResource(KoText::CurrentTextAnchor);
p->clearResource(KoText::CurrentTextDocument);
}
+ m_allowResourceProviderUpdates = true;
}
void TextTool::copy() const {
@@ -526,7 +529,7 @@
if(qAbs(pos - m_caret.position()) <= 1) // clicked between two words
m_caret.movePosition(QTextCursor::WordRight, \
QTextCursor::KeepAnchor);
- repaintSelection(m_caret.anchor(), m_caret.position());
+ repaintSelection();
}
void TextTool::mouseMoveEvent( KoPointerEvent *event ) {
@@ -686,7 +689,7 @@
useCursor(Qt::BlankCursor);
bool shiftPressed = event->modifiers() & Qt::ShiftModifier;
if(m_caret.hasSelection() && !shiftPressed)
- repaintSelection(m_caret.position(), m_caret.anchor()); // \
will erase selection + repaintSelection(); // will erase \
selection else if(! m_caret.hasSelection())
repaintCaret();
QTextBlockFormat format = m_caret.blockFormat();
@@ -898,7 +901,7 @@
void TextTool::repaintDecorations() {
if(m_textShapeData)
- repaintSelection(m_caret.position(), m_caret.anchor());
+ repaintSelection();
}
void TextTool::repaintCaret() {
@@ -918,6 +921,10 @@
}
}
+void TextTool::repaintSelection() {
+ repaintSelection(m_caret.position(), m_caret.anchor());
+}
+
void TextTool::repaintSelection(int startPosition, int endPosition) {
QList<TextShape *> shapes;
if(m_textShapeData->position() > startPosition || \
m_textShapeData->endPosition() < endPosition) { @@ -1400,6 +1407,25 @@
updateActions();
}
+void TextTool::resourceChanged(int key, const QVariant &var) {
+ if(m_allowResourceProviderUpdates == false)
+ return;
+ if(key == KoText::CurrentTextPosition) {
+ repaintSelection();
+ m_caret.setPosition(var.toInt());
+ ensureCursorVisible();
+ }
+ else if(key == KoText::CurrentTextAnchor) {
+ repaintSelection();
+ int pos = m_caret.position();
+ m_caret.setPosition(var.toInt());
+ m_caret.setPosition(pos, QTextCursor::KeepAnchor);
+ }
+ else return;
+
+ repaintSelection();
+}
+
// ---------- editing plugins methods.
void TextTool::editingPluginEvents() {
if(m_prevCursorPosition == -1 || m_prevCursorPosition == \
m_caret.position())
--- trunk/koffice/shapes/text/TextTool.h #685335:685336
@@ -88,6 +88,8 @@
public slots:
/// add a command to the undo stack, executing it as well.
void addCommand(QUndoCommand *command);
+ /// reimplemented from KoTool
+ virtual void resourceChanged (int key, const QVariant &res);
signals:
/// emitted every time a different styleManager is set.
@@ -157,6 +159,7 @@
private:
void repaintCaret();
+ void repaintSelection();
void repaintSelection(int from, int to);
void ensureCursorVisible();
QRectF textRect(int startPosition, int endPosition) const;
@@ -183,6 +186,7 @@
bool m_allowActions;
bool m_allowAddUndoCommand;
bool m_trackChanges;
+ bool m_allowResourceProviderUpdates;
int m_prevCursorPosition; /// used by editingPluginEvents
QAction *m_actionFormatBold;
@@ -211,7 +215,7 @@
};
UpdatePageDirection m_updateParagDirection;
- /// structur that allows us to remember the text position and \
selection of previously edited documents. + /// structure that allows us \
to remember the text position and selection of previously edited documents. \
struct TextSelection {
QTextDocument *document; // be warned that this may end up being a \
dangling pointer, so don't use. int position;
_______________________________________________
koffice-devel mailing list
koffice-devel@kde.org
https://mail.kde.org/mailman/listinfo/koffice-devel
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic