[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: koffice/kspread
From: Tomas Mecir <mecirt () gmail ! com>
Date: 2008-11-30 21:07:57
Message-ID: 1228079277.170582.28126.nullmailer () svn ! kde ! org
[Download RAW message or body]
SVN commit 890998 by mecir:
Finally fixed all the problems related to the range markup displayed
when editing cells in either editor.
BUG: 175373
M +5 -0 Selection.cpp
M +6 -0 Selection.h
M +4 -0 ui/CellToolBase.cpp
M +2 -2 ui/CellToolBase_p.cpp
M +55 -36 ui/Editors.cpp
M +2 -1 ui/Editors.h
--- trunk/koffice/kspread/Selection.cpp #890997:890998
@@ -952,6 +952,11 @@
return d->referenceMode;
}
+bool Selection::referenceSelection() const
+{
+ return (!d->formerSelection.isEmpty());
+}
+
void Selection::emitAboutToModify()
{
emit aboutToModify(*this);
--- trunk/koffice/kspread/Selection.h #890997:890998
@@ -268,10 +268,16 @@
void setLastEditorWithFocus(Editor type);
Editor lastEditorWithFocus() const;
+ /** Start using a reference selection instead of normal one. */
void startReferenceSelection(const Region& region = Region());
+ /** End using reference selection. */
void endReferenceSelection();
+ /** Enable/disable reference choosing mode. */
void setReferenceSelectionMode(bool enable);
+ /** Are we in reference choosing mode ? */
bool referenceSelectionMode() const;
+ /** Are we currently using a reference selection ? */
+ bool referenceSelection() const;
void emitAboutToModify();
void emitModified();
--- trunk/koffice/kspread/ui/CellToolBase.cpp #890997:890998
@@ -1228,6 +1228,10 @@
if (!d->locationComboBox) {
return;
}
+ // if we're in ref viewing mode, do nothing here
+ if (editor() && selection()->referenceSelection() && \
(!selection()->referenceSelectionMode())) + return;
+
const Cell cell = Cell(selection()->activeSheet(), selection()->cursor());
if (!cell) {
return;
--- trunk/koffice/kspread/ui/CellToolBase_p.cpp #890997:890998
@@ -945,7 +945,7 @@
void CellToolBase::Private::paintSelection(QPainter &painter, const QRectF \
&viewRect) {
- if (q->selection()->referenceSelectionMode() || q->editor()) {
+ if (q->selection()->referenceSelection() || q->editor()) {
return;
}
@@ -1064,7 +1064,7 @@
void CellToolBase::Private::paintReferenceSelection(QPainter &painter, const QRectF \
&viewRect) {
Q_UNUSED(viewRect);
- if (!q->selection()->referenceSelectionMode()) {
+ if (!q->selection()->referenceSelection()) {
return;
}
// save painter state
--- trunk/koffice/kspread/ui/Editors.cpp #890997:890998
@@ -963,43 +963,51 @@
if ( text[0] != '=' )
{
selection()->setReferenceSelectionMode(false);
+// d->checkChoice = true;
+ return true;
}
- else
- {
- int cur = d->textEdit->textCursor().position();
- Tokens tokens = d->highlighter->formulaTokens();
+ // switch to reference selection mode if we haven't yet
+ selection()->startReferenceSelection();
- // switch to reference selection mode if we haven't yet
- selection()->startReferenceSelection();
- if (tokens.count()) // formula not empty?
+ // if we don't have focus, we show highlighting, but don't do the rest
+ if (!hasFocus()) {
+ selection()->setReferenceSelectionMode(false);
+// d->checkChoice = true;
+ return true;
+ }
+
+ int cur = d->textEdit->textCursor().position();
+
+ Tokens tokens = d->highlighter->formulaTokens();
+
+ if (tokens.count()) // formula not empty?
+ {
+ Token token;
+ for (int i = 0; i < tokens.count(); ++i)
{
- Token token;
- for (int i = 0; i < tokens.count(); ++i)
+ if (tokens[i].pos() >= cur - 1) // without '='
{
- if (tokens[i].pos() >= cur - 1) // without '='
- {
- break;
- }
- token = tokens[i];
- d->currentToken = i;
+ break;
}
+ token = tokens[i];
+ d->currentToken = i;
+ }
- Token::Type type = token.type();
- if (type == Token::Operator && token.asOperator() != Token::RightPar)
- {
- selection()->setReferenceSelectionMode(true);
- }
- else if (type == Token::Cell || type == Token::Range)
- {
- d->length_namecell = token.text().length();
- selection()->setReferenceSelectionMode(true);
- }
- else
- {
- selection()->setReferenceSelectionMode(false);
- }
+ Token::Type type = token.type();
+ if (type == Token::Operator && token.asOperator() != Token::RightPar)
+ {
+ selection()->setReferenceSelectionMode(true);
}
+ else if (type == Token::Cell || type == Token::Range)
+ {
+ d->length_namecell = token.text().length();
+ selection()->setReferenceSelectionMode(true);
+ }
+ else
+ {
+ selection()->setReferenceSelectionMode(false);
+ }
}
// d->checkChoice = true;
@@ -1145,17 +1153,17 @@
return d->textEdit->toPlainText();
}
-void CellEditor::setText(const QString& text)
+void CellEditor::setText(const QString& text, int cursorPos)
{
- setCheckChoice (false);
+ if (text == d->textEdit->toPlainText()) return;
+
d->textEdit->setPlainText(text);
//Usability : It is usually more convenient if the cursor is positioned at the \
end of the text so it can //be quickly deleted using the backspace key
// This also ensures that the caret is sized correctly for the text
- setCursorPosition( text.length() );
- setCheckChoice (true);
- kDebug() <<"text cursor positioned at the end";
+ if ((cursorPos < 0) || cursorPos > text.length()) cursorPos = text.length();
+ setCursorPosition (cursorPos);
if (d->fontLength == 0)
{
@@ -1513,8 +1521,9 @@
d->cellTool->createEditor(false /* keep content */, false /* no focus */);
}
- // the Enter key is handled by the embedded editor
- if ((event->key() == Qt::Key_Return) || (event->key() == Qt::Key_Enter)) {
+ // the Enter and Esc key are handled by the embedded editor
+ if ((event->key() == Qt::Key_Return) || (event->key() == Qt::Key_Enter) ||
+ (event->key() == Qt::Key_Escape)) {
d->cellTool->editor()->setFocus();
QApplication::sendEvent (d->cellTool->editor(), event);
event->accept();
@@ -1528,6 +1537,16 @@
KTextEdit::keyPressEvent (event);
}
+void ExternalEditor::focusInEvent(QFocusEvent* event)
+{
+ Q_ASSERT(d->cellTool);
+ // when the external editor gets focus, create also the internal editor
+ // this in turn means that ranges will be instantly highlighted right
+ if (!d->cellTool->editor())
+ d->cellTool->createEditor(false /* keep content */, false /* no focus */);
+ KTextEdit::focusInEvent(event);
+}
+
void ExternalEditor::focusOutEvent(QFocusEvent* event)
{
Q_ASSERT(d->cellTool);
--- trunk/koffice/kspread/ui/Editors.h #890997:890998
@@ -229,7 +229,7 @@
void modificationChanged(bool changed);
public slots:
- void setText(const QString& text);
+ void setText(const QString& text, int cursorPos = -1);
private slots:
void slotTextChanged();
@@ -325,6 +325,7 @@
protected:
void keyPressEvent(QKeyEvent *event);
+ void focusInEvent(QFocusEvent *event);
void focusOutEvent(QFocusEvent *event);
private slots:
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic