You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
2.1 KiB
97 lines
2.1 KiB
#include "TextUndoAction.h" |
|
|
|
#include "gui/Redrawable.h" |
|
#include "gui/TextEditor.h" |
|
#include "model/Layer.h" |
|
#include "model/PageRef.h" |
|
#include "model/Text.h" |
|
|
|
#include <i18n.h> |
|
#include <Rectangle.h> |
|
|
|
TextUndoAction::TextUndoAction(PageRef page, Layer* layer, Text* text, string lastText, TextEditor* textEditor) |
|
: UndoAction("TextUndoAction") |
|
{ |
|
XOJ_INIT_TYPE(TextUndoAction); |
|
|
|
this->page = page; |
|
this->layer = layer; |
|
this->text = text; |
|
this->lastText = lastText; |
|
this->textEditor = textEditor; |
|
} |
|
|
|
TextUndoAction::~TextUndoAction() |
|
{ |
|
XOJ_RELEASE_TYPE(TextUndoAction); |
|
} |
|
|
|
string TextUndoAction::getUndoText() |
|
{ |
|
XOJ_CHECK_TYPE(TextUndoAction); |
|
|
|
return this->lastText; |
|
} |
|
|
|
void TextUndoAction::textEditFinished() |
|
{ |
|
XOJ_CHECK_TYPE(TextUndoAction); |
|
|
|
this->textEditor = NULL; |
|
} |
|
|
|
string TextUndoAction::getText() |
|
{ |
|
XOJ_CHECK_TYPE(TextUndoAction); |
|
|
|
return _("Text changes"); |
|
} |
|
|
|
bool TextUndoAction::undo(Control* control) |
|
{ |
|
XOJ_CHECK_TYPE(TextUndoAction); |
|
|
|
double x1 = text->getX(); |
|
double y1 = text->getY(); |
|
double x2 = text->getX() + text->getElementWidth(); |
|
double y2 = text->getY() + text->getElementHeight(); |
|
|
|
newText = text->getText(); |
|
text->setText(lastText); |
|
this->textEditor->setText(lastText); |
|
|
|
x1 = MIN(x1, text->getX()); |
|
y1 = MIN(y1, text->getY()); |
|
x2 = MAX(x2, text->getX() + text->getElementWidth()); |
|
y2 = MAX(y2, text->getY() + text->getElementHeight()); |
|
|
|
Rectangle rect(x1, y1, x2 - x1, y2 - y1); |
|
this->page->fireRectChanged(rect); |
|
|
|
this->undone = true; |
|
return true; |
|
} |
|
|
|
bool TextUndoAction::redo(Control* control) |
|
{ |
|
XOJ_CHECK_TYPE(TextUndoAction); |
|
|
|
double x1 = text->getX(); |
|
double y1 = text->getY(); |
|
double x2 = text->getX() + text->getElementWidth(); |
|
double y2 = text->getY() + text->getElementHeight(); |
|
|
|
text->setText(newText); |
|
this->textEditor->setText(newText); |
|
|
|
x1 = MIN(x1, text->getX()); |
|
y1 = MIN(y1, text->getY()); |
|
x2 = MAX(x2, text->getX() + text->getElementWidth()); |
|
y2 = MAX(y2, text->getY() + text->getElementHeight()); |
|
|
|
Rectangle rect(x1, y1, x2 - x1, y2 - y1); |
|
this->page->fireRectChanged(rect); |
|
|
|
this->undone = false; |
|
return true; |
|
}
|
|
|