Changeset View
Changeset View
Standalone View
Standalone View
src/plugins/forms/widgets/kexidbform.cpp
Show First 20 Lines • Show All 63 Lines • ▼ Show 20 Line(s) | 47 | public: | |||
---|---|---|---|---|---|
64 | } | 64 | } | ||
65 | 65 | | |||
66 | //! \return index of data item \a item, or -1 if not found | 66 | //! \return index of data item \a item, or -1 if not found | ||
67 | int indexOfDataItem(KexiDataItemInterface* item) const { | 67 | int indexOfDataItem(KexiDataItemInterface* item) const { | ||
68 | QHash<KexiDataItemInterface*, int>::const_iterator indicesForDataAwareWidgetsIt( | 68 | QHash<KexiDataItemInterface*, int>::const_iterator indicesForDataAwareWidgetsIt( | ||
69 | indicesForDataAwareWidgets.find(item)); | 69 | indicesForDataAwareWidgets.find(item)); | ||
70 | if (indicesForDataAwareWidgetsIt == indicesForDataAwareWidgets.constEnd()) | 70 | if (indicesForDataAwareWidgetsIt == indicesForDataAwareWidgets.constEnd()) | ||
71 | return -1; | 71 | return -1; | ||
72 | //qDebug() << "column # for item: " << indicesForDataAwareWidgetsIt.value(); | 72 | //qDebug() << "column # for item:" << indicesForDataAwareWidgetsIt.value(); | ||
73 | return indicesForDataAwareWidgetsIt.value(); | 73 | return indicesForDataAwareWidgetsIt.value(); | ||
74 | } | 74 | } | ||
75 | 75 | | |||
76 | //! Sets orderedFocusWidgetsIterator member to a position pointing to \a widget | 76 | //! Sets orderedFocusWidgetsIterator member to a position pointing to \a widget | ||
77 | void setOrderedFocusWidgetsIteratorTo(QWidget *widget) { | 77 | void setOrderedFocusWidgetsIteratorTo(QWidget *widget) { | ||
78 | if (orderedFocusWidgetsIteratorInitialized && *orderedFocusWidgetsIterator == widget) | 78 | if (orderedFocusWidgetsIteratorInitialized && *orderedFocusWidgetsIterator == widget) | ||
79 | return; | 79 | return; | ||
80 | orderedFocusWidgetsIterator = orderedFocusWidgets.begin(); | 80 | orderedFocusWidgetsIterator = orderedFocusWidgets.begin(); | ||
Show All 28 Lines | 108 | KexiDBForm::KexiDBForm(QWidget *parent, KexiDataAwareObjectInterface* dataAwareObject) | |||
109 | : QWidget(parent) | 109 | : QWidget(parent) | ||
110 | , KexiFormDataItemInterface() | 110 | , KexiFormDataItemInterface() | ||
111 | , d(new Private()) | 111 | , d(new Private()) | ||
112 | { | 112 | { | ||
113 | installEventFilter(this); | 113 | installEventFilter(this); | ||
114 | editedItem = 0; | 114 | editedItem = 0; | ||
115 | d->dataAwareObject = dataAwareObject; | 115 | d->dataAwareObject = dataAwareObject; | ||
116 | KexiDataItemInterface::setHasFocusableWidget(false); | 116 | KexiDataItemInterface::setHasFocusableWidget(false); | ||
117 | | ||||
118 | qDebug() << ":"; | | |||
119 | setCursor(QCursor(Qt::ArrowCursor)); //to avoid keeping Size cursor when moving from form's boundaries | 117 | setCursor(QCursor(Qt::ArrowCursor)); //to avoid keeping Size cursor when moving from form's boundaries | ||
120 | setAcceptDrops(true); | 118 | setAcceptDrops(true); | ||
121 | setAutoFillBackground(true); | 119 | setAutoFillBackground(true); | ||
122 | setFocusPolicy(Qt::NoFocus); | 120 | setFocusPolicy(Qt::NoFocus); | ||
123 | } | 121 | } | ||
124 | 122 | | |||
125 | KexiDBForm::~KexiDBForm() | 123 | KexiDBForm::~KexiDBForm() | ||
126 | { | 124 | { | ||
Show All 36 Lines | |||||
163 | void KexiDBForm::updateTabStopsOrder(KFormDesigner::Form* form) | 161 | void KexiDBForm::updateTabStopsOrder(KFormDesigner::Form* form) | ||
164 | { | 162 | { | ||
165 | QWidget *fromWidget = 0; | 163 | QWidget *fromWidget = 0; | ||
166 | int numberOfDataAwareWidgets = 0; | 164 | int numberOfDataAwareWidgets = 0; | ||
167 | //generate a new list | 165 | //generate a new list | ||
168 | foreach (KFormDesigner::ObjectTreeItem* titem, *form->tabStops()) { | 166 | foreach (KFormDesigner::ObjectTreeItem* titem, *form->tabStops()) { | ||
169 | if (titem->widget()->focusPolicy() & Qt::TabFocus) { | 167 | if (titem->widget()->focusPolicy() & Qt::TabFocus) { | ||
170 | if (fromWidget) { | 168 | if (fromWidget) { | ||
171 | qDebug() << "tab order: " | 169 | //qDebug() << "tab order:" | ||
172 | << fromWidget->objectName() << "->" << titem->widget()->objectName(); | 170 | // << fromWidget->objectName() << "->" << titem->widget()->objectName(); | ||
173 | } | 171 | } | ||
174 | fromWidget = titem->widget(); | 172 | fromWidget = titem->widget(); | ||
175 | d->orderedFocusWidgets.append(titem->widget()); | 173 | d->orderedFocusWidgets.append(titem->widget()); | ||
176 | } | 174 | } | ||
177 | 175 | | |||
178 | titem->widget()->installEventFilter(this); | 176 | titem->widget()->installEventFilter(this); | ||
179 | //also filter events for data-aware children of this widget (i.e. KexiDBAutoField's editors) | 177 | //also filter events for data-aware children of this widget (i.e. KexiDBAutoField's editors) | ||
180 | QList<QWidget*> children(titem->widget()->findChildren<QWidget*>()); | 178 | QList<QWidget*> children(titem->widget()->findChildren<QWidget*>()); | ||
181 | foreach(QWidget* widget, children) { | 179 | foreach(QWidget* widget, children) { | ||
182 | qDebug() << "also adding '" | 180 | /*qDebug() << "also adding '" | ||
183 | << widget->metaObject()->className() | 181 | << widget->metaObject()->className() | ||
184 | << " " << widget->objectName() | 182 | << widget->objectName() | ||
185 | << "' child to filtered widgets"; | 183 | << "' child to filtered widgets";*/ | ||
186 | widget->installEventFilter(this); | 184 | widget->installEventFilter(this); | ||
187 | } | 185 | } | ||
188 | KexiFormDataItemInterface* dataItem | 186 | KexiFormDataItemInterface* dataItem | ||
189 | = dynamic_cast<KexiFormDataItemInterface*>(titem->widget()); | 187 | = dynamic_cast<KexiFormDataItemInterface*>(titem->widget()); | ||
190 | if (dataItem && !dataItem->dataSource().isEmpty()) { | 188 | if (dataItem && !dataItem->dataSource().isEmpty()) { | ||
191 | qDebug() << "#" << numberOfDataAwareWidgets << ": " | 189 | //qDebug() << "#" << numberOfDataAwareWidgets << ": " | ||
192 | << dataItem->dataSource() << " (" << titem->widget()->objectName() << ")"; | 190 | // << dataItem->dataSource() << "(" << titem->widget()->objectName() << ")"; | ||
193 | 191 | | |||
194 | //! @todo d->indicesForDataAwareWidgets SHOULD NOT BE UPDATED HERE BECAUSE | 192 | //! @todo d->indicesForDataAwareWidgets SHOULD NOT BE UPDATED HERE BECAUSE | ||
195 | //! THERE CAN BE ALSO NON-TABSTOP DATA WIDGETS! | 193 | //! THERE CAN BE ALSO NON-TABSTOP DATA WIDGETS! | ||
196 | d->indicesForDataAwareWidgets.insert(dataItem, numberOfDataAwareWidgets); | 194 | d->indicesForDataAwareWidgets.insert(dataItem, numberOfDataAwareWidgets); | ||
197 | numberOfDataAwareWidgets++; | 195 | numberOfDataAwareWidgets++; | ||
198 | 196 | | |||
199 | d->orderedDataAwareWidgets.append(titem->widget()); | 197 | d->orderedDataAwareWidgets.append(titem->widget()); | ||
200 | } | 198 | } | ||
201 | }//for | 199 | }//for | ||
202 | /* else { | 200 | /* else { | ||
203 | //restore ordering | 201 | //restore ordering | ||
204 | for (QPtrListIterator<QWidget> it(d->orderedFocusWidgets); it.current(); ++it) { | 202 | for (QPtrListIterator<QWidget> it(d->orderedFocusWidgets); it.current(); ++it) { | ||
205 | if (fromWidget) { | 203 | if (fromWidget) { | ||
206 | qDebug() << "tab order: " << fromWidget->name() | 204 | qDebug() << "tab order:" << fromWidget->name() | ||
207 | << " -> " << it.current()->name(); | 205 | << "->" << it.current()->name(); | ||
208 | setTabOrder( fromWidget, it.current() ); | 206 | setTabOrder( fromWidget, it.current() ); | ||
209 | } | 207 | } | ||
210 | fromWidget = it.current(); | 208 | fromWidget = it.current(); | ||
211 | } | 209 | } | ||
212 | // SET_FOCUS_USING_REASON(focusWidget(), QFocusEvent::Tab); | 210 | // SET_FOCUS_USING_REASON(focusWidget(), QFocusEvent::Tab); | ||
213 | }*/ | 211 | }*/ | ||
214 | } | 212 | } | ||
215 | 213 | | |||
▲ Show 20 Lines • Show All 218 Lines • ▼ Show 20 Line(s) | 356 | if (tab || backtab) { | |||
434 | if (widgetToFocus->focusProxy()) { | 432 | if (widgetToFocus->focusProxy()) { | ||
435 | widgetToFocus = widgetToFocus->focusProxy(); | 433 | widgetToFocus = widgetToFocus->focusProxy(); | ||
436 | } | 434 | } | ||
437 | 435 | | |||
438 | if (widgetToFocus && d->dataAwareObject->acceptEditor()) { | 436 | if (widgetToFocus && d->dataAwareObject->acceptEditor()) { | ||
439 | if (tab) { | 437 | if (tab) { | ||
440 | //qDebug() << e->type() << "focusing " << widgetToFocus->objectName(); | 438 | //qDebug() << e->type() << "focusing " << widgetToFocus->objectName(); | ||
441 | widgetToFocus->setFocus(); | 439 | widgetToFocus->setFocus(); | ||
442 | //qDebug() << e->type() << "focusing " << (*d->orderedFocusWidgetsIterator)->objectName(); | 440 | //qDebug() << "focusing" << (*d->orderedFocusWidgetsIterator)->objectName(); | ||
443 | (*d->orderedFocusWidgetsIterator)->setFocus(); | 441 | (*d->orderedFocusWidgetsIterator)->setFocus(); | ||
444 | } | 442 | } | ||
445 | KexiFormDataItemInterface *formItem = dynamic_cast<KexiFormDataItemInterface*>(widgetToSelectAll); | 443 | KexiFormDataItemInterface *formItem = dynamic_cast<KexiFormDataItemInterface*>(widgetToSelectAll); | ||
446 | if (formItem) { | 444 | if (formItem) { | ||
447 | //qDebug() << "widgetToSelectAll:" << widgetToSelectAll; | 445 | //qDebug() << "widgetToSelectAll:" << widgetToSelectAll; | ||
448 | formItem->selectAllOnFocusIfNeeded(); | 446 | formItem->selectAllOnFocusIfNeeded(); | ||
449 | } | 447 | } | ||
450 | } | 448 | } | ||
451 | return true; | 449 | return true; | ||
452 | } | 450 | } | ||
453 | } | 451 | } | ||
454 | } else if (e->type() == QEvent::FocusIn || (e->type() == QEvent::MouseButtonPress && static_cast<QMouseEvent*>(e)->button() == Qt::LeftButton)) { | 452 | } else if (e->type() == QEvent::FocusIn || (e->type() == QEvent::MouseButtonPress && static_cast<QMouseEvent*>(e)->button() == Qt::LeftButton)) { | ||
455 | bool focusDataWidget = isPreviewing(); | 453 | bool focusDataWidget = isPreviewing(); | ||
456 | if (static_cast<QFocusEvent*>(e)->reason() == Qt::PopupFocusReason) { | 454 | if (static_cast<QFocusEvent*>(e)->reason() == Qt::PopupFocusReason) { | ||
457 | //qDebug() << "->>> focus IN, popup" << watched; | 455 | //qDebug() << "->>> focus IN, popup" << watched; | ||
458 | focusDataWidget = !d->popupFocused; | 456 | focusDataWidget = !d->popupFocused; | ||
459 | d->popupFocused = false; | 457 | d->popupFocused = false; | ||
460 | } | 458 | } | ||
461 | 459 | | |||
462 | if (focusDataWidget) { | 460 | if (focusDataWidget) { | ||
463 | //qDebug() << "FocusIn: " << watched->metaObject()->className() << " " << watched->objectName(); | 461 | //qDebug() << "FocusIn:" << watched->metaObject()->className() << watched->objectName(); | ||
464 | if (d->dataAwareObject) { | 462 | if (d->dataAwareObject) { | ||
465 | QWidget *dataItem = dynamic_cast<QWidget*>(watched); | 463 | QWidget *dataItem = dynamic_cast<QWidget*>(watched); | ||
466 | while (dataItem) { | 464 | while (dataItem) { | ||
467 | while (dataItem && !dynamic_cast<KexiDataItemInterface*>(dataItem)) { | 465 | while (dataItem && !dynamic_cast<KexiDataItemInterface*>(dataItem)) { | ||
468 | dataItem = dataItem->parentWidget(); | 466 | dataItem = dataItem->parentWidget(); | ||
469 | } | 467 | } | ||
470 | if (!dataItem) { | 468 | if (!dataItem) { | ||
471 | break; | 469 | break; | ||
472 | } | 470 | } | ||
473 | //qDebug() << "FocusIn: FOUND " << dataItem->metaObject()->className() << " " << dataItem->objectName(); | 471 | //qDebug() << "FocusIn: FOUND" << dataItem->metaObject()->className() << dataItem->objectName(); | ||
474 | 472 | | |||
475 | const int index = d->indexOfDataAwareWidget(dataItem); | 473 | const int index = d->indexOfDataAwareWidget(dataItem); | ||
476 | if (index >= 0) { | 474 | if (index >= 0) { | ||
477 | //qDebug() << "moving cursor to column #" << index; | 475 | //qDebug() << "moving cursor to column #" << index; | ||
478 | editedItem = 0; | 476 | editedItem = 0; | ||
479 | if ((int)index != d->dataAwareObject->currentColumn()) { | 477 | if ((int)index != d->dataAwareObject->currentColumn()) { | ||
480 | d->dataAwareObject->setCursorPosition(d->dataAwareObject->currentRecord(), index /*column*/); | 478 | d->dataAwareObject->setCursorPosition(d->dataAwareObject->currentRecord(), index /*column*/); | ||
481 | } | 479 | } | ||
482 | break; | 480 | break; | ||
483 | } else { | 481 | } else { | ||
484 | dataItem = dataItem->parentWidget(); | 482 | dataItem = dataItem->parentWidget(); | ||
485 | } | 483 | } | ||
486 | 484 | | |||
487 | dataItem->update(); | 485 | dataItem->update(); | ||
488 | } | 486 | } | ||
489 | } | 487 | } | ||
490 | } | 488 | } | ||
491 | } else if (e->type() == QEvent::FocusOut) { | 489 | } else if (e->type() == QEvent::FocusOut) { | ||
492 | if (static_cast<QFocusEvent*>(e)->reason() == Qt::PopupFocusReason) { | 490 | if (static_cast<QFocusEvent*>(e)->reason() == Qt::PopupFocusReason) { | ||
493 | d->popupFocused = true; | 491 | d->popupFocused = true; | ||
494 | } else { | 492 | } else { | ||
495 | d->popupFocused = false; | 493 | d->popupFocused = false; | ||
496 | } | 494 | } | ||
497 | // qDebug() << "e->type()==QEvent::FocusOut " << watched->className() << " " <<watched->name(); | 495 | // qDebug() << "e->type()==QEvent::FocusOut" << watched->className() << watched->name(); | ||
498 | } | 496 | } | ||
499 | return QWidget::eventFilter(watched, e); | 497 | return QWidget::eventFilter(watched, e); | ||
500 | } | 498 | } | ||
501 | 499 | | |||
502 | bool KexiDBForm::valueIsNull() | 500 | bool KexiDBForm::valueIsNull() | ||
503 | { | 501 | { | ||
504 | return true; | 502 | return true; | ||
505 | } | 503 | } | ||
▲ Show 20 Lines • Show All 70 Lines • Show Last 20 Lines |