From kde-commits Sat May 01 22:12:42 2010 From: =?utf-8?q?Jaros=C5=82aw=20Staniek?= Date: Sat, 01 May 2010 22:12:42 +0000 To: kde-commits Subject: koffice/kexi Message-Id: <20100501221242.3B784AC8AA () svn ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=127275175228879 SVN commit 1121616 by staniek: Fix display comboboxes, remove related crashes. M +15 -7 plugins/forms/widgets/kexidbautofield.cpp M +4 -4 plugins/forms/widgets/kexidbautofield.h M +38 -20 plugins/forms/widgets/kexidbcombobox.cpp M +1 -1 plugins/forms/widgets/kexidbcombobox.h M +12 -2 widget/tableview/kexicomboboxbase.cpp M +3 -1 widget/tableview/kexicomboboxpopup.cpp M +2 -2 widget/tableview/kexitableview.cpp --- trunk/koffice/kexi/plugins/forms/widgets/kexidbautofield.cpp #1121615:1121616 @@ -145,15 +145,19 @@ } QWidget *newSubwidget; + kDebug() << "widgetType:" << d->widgetType; switch (d->widgetType) { case Text: case Double: //! @todo setup validator case Integer: //! @todo setup validator case Date: case Time: - case DateTime: - newSubwidget = new KexiDBLineEdit(this); + case DateTime: { + KexiDBLineEdit *le = new KexiDBLineEdit(this); + newSubwidget = le; + le->setFrame(false); break; + } case MultiLineText: newSubwidget = new KexiDBTextEdit(this); break; @@ -176,6 +180,7 @@ break; } + kDebug() << newSubwidget; setSubwidget(newSubwidget); //this will also allow to declare subproperties, see KFormDesigner::WidgetWithSubpropertiesInterface if (newSubwidget) { newSubwidget->setObjectName( @@ -199,6 +204,7 @@ newSubwidget->setPalette(qApp->palette()); copyPropertiesToEditor(); // KFormDesigner::installRecursiveEventFilter(newSubwidget, this); +// newSubwidget->hide(); } setLabelPosition(labelPosition()); @@ -206,6 +212,7 @@ void KexiDBAutoField::copyPropertiesToEditor() { + kDebug() << m_subwidget; if (m_subwidget) { // kDebug() << "base col: " << d->baseColor.name() << // "; text col: " << d->textColor.name(); @@ -710,7 +717,7 @@ // ===== methods below are just proxies for the internal editor or label ===== -const QColor & KexiDBAutoField::paletteForegroundColor() const +QColor KexiDBAutoField::paletteForegroundColor() const { //! @todo how about brush? return d->textBrush.color(); @@ -723,7 +730,7 @@ copyPropertiesToEditor(); } -const QColor & KexiDBAutoField::paletteBackgroundColor() const +QColor KexiDBAutoField::paletteBackgroundColor() const { //! @todo how about brush? return d->baseBrush.color(); @@ -731,12 +738,13 @@ void KexiDBAutoField::setPaletteBackgroundColor(const QColor & color) { + kDebug(); //! @todo how about brush? d->baseBrush.setColor(color); copyPropertiesToEditor(); } -const QColor & KexiDBAutoField::foregroundLabelColor() const +QColor KexiDBAutoField::foregroundLabelColor() const { if (d->widgetType == Boolean) return paletteForegroundColor(); @@ -761,12 +769,12 @@ } } -const QColor & KexiDBAutoField::backgroundLabelColor() const +QColor KexiDBAutoField::backgroundLabelColor() const { if (d->widgetType == Boolean) return paletteBackgroundColor(); - return d->label->paletteBackgroundColor(); + return d->label->palette().color(d->label->backgroundRole()); } void KexiDBAutoField::setBackgroundLabelColor(const QColor & color) --- trunk/koffice/kexi/plugins/forms/widgets/kexidbautofield.h #1121615:1121616 @@ -144,25 +144,25 @@ virtual void setFocusPolicy(Qt::FocusPolicy policy); //! Reimplemented to return internal editor's color. - const QColor & paletteForegroundColor() const; + QColor paletteForegroundColor() const; //! Reimplemented to set internal editor's color. void setPaletteForegroundColor(const QColor & color); //! Reimplemented to return internal editor's color. - const QColor & paletteBackgroundColor() const; + QColor paletteBackgroundColor() const; //! Reimplemented to set internal editor's color. virtual void setPaletteBackgroundColor(const QColor & color); //! \return label's foreground color - const QColor & foregroundLabelColor() const; + QColor foregroundLabelColor() const; //! Sets label's foreground color virtual void setForegroundLabelColor(const QColor & color); //! \return label's background color - const QColor & backgroundLabelColor() const; + QColor backgroundLabelColor() const; //! Sets label's background color virtual void setBackgroundLabelColor(const QColor & color); --- trunk/koffice/kexi/plugins/forms/widgets/kexidbcombobox.cpp #1121615:1121616 @@ -120,14 +120,28 @@ void KexiDBComboBox::paintEvent(QPaintEvent *) { QPainter p(this); - QColorGroup cg(palette().active()); + p.setPen(palette().color(QPalette::Text)); +// QColorGroup cg(palette().active()); // if ( hasFocus() ) // cg.setColor(QColorGroup::Base, cg.highlight()); // else - cg.setColor(QColorGroup::Base, paletteBackgroundColor()); //update base color using (reimplemented) bg color - p.setPen(cg.text()); + QPalette pal(palette()); + pal.setColor(QColorGroup::Base, paletteBackgroundColor()); //update base color using (reimplemented) bg color + if (width() < 5 || height() < 5) { + qDrawShadePanel(&p, rect(), pal, false /* !sunken */, + 2 /*line width*/, &pal.brush(QPalette::Button)/*fill*/); + return; + } + +#ifdef __GNUC__ +#warning TODO KexiDBComboBox::paintEvent() +#else +#pragma WARNING( TODO KexiDBComboBox::paintEvent() ) +#endif + QStyleOptionComboBox option; + option.palette = pal; option.initFrom(d->paintedCombo); if (isEnabled()) @@ -137,16 +151,8 @@ if (d->mouseOver) option.state |= QStyle::State_MouseOver; - if (width() < 5 || height() < 5) { - qDrawShadePanel(&p, rect(), cg, false, 2, &cg.brush(QColorGroup::Button)); - return; - } + style()->drawComplexControl(QStyle::CC_ComboBox, &option, &p, d->paintedCombo); -#ifdef __GNUC__ -#warning TODO KexiDBComboBox::paintEvent() -#else -#pragma WARNING( TODO KexiDBComboBox::paintEvent() ) -#endif #if 0 //TODO //! @todo support reverse layout //bool reverse = QApplication::reverseLayout(); @@ -200,11 +206,21 @@ if (m_subwidget) { m_subwidget->setGeometry(editorGeometry()); if (!d->isEditable) { + QStyleOptionComboBox option; + option.initFrom(m_subwidget); + const QRect comboRect = m_subwidget->style()->subControlRect( + QStyle::CC_ComboBox, &option, QStyle::SC_ComboBoxEditField, m_subwidget); + kDebug() << "comboRect:" << comboRect; + m_subwidget->setContentsMargins(comboRect.left(), comboRect.top(), + width() - comboRect.right(), height() - comboRect.bottom()); + int l, t, r, b; + m_subwidget->getContentsMargins(&l, &t, &r, &b); + kDebug() << "altered margins:" << l << t << r << b; + + m_subwidget->setFocusPolicy(Qt::NoFocus); m_subwidget->setCursor(QCursor(Qt::ArrowCursor)); // widgets like listedit have IbeamCursor, we don't want that -//! @todo Qt4: set transparent background, for now we're setting button color QPalette subwidgetPalette(m_subwidget->palette()); - subwidgetPalette.setColor(QPalette::Active, QColorGroup::Base, - subwidgetPalette.color(QPalette::Active, QColorGroup::Button)); + subwidgetPalette.setColor(QColorGroup::Base, Qt::transparent); m_subwidget->setPalette(subwidgetPalette); d->subWidgetsWithDisabledEvents.clear(); d->subWidgetsWithDisabledEvents << m_subwidget; @@ -379,11 +395,12 @@ return true; } else if (e->type() == QEvent::FocusOut) { if (popup() && popup()->isVisible()) { - popup()->hide(); - undoChanges(); +// popup()->hide(); +// undoChanges(); } } } else if (!d->isEditable && d->subWidgetsWithDisabledEvents.contains(dynamic_cast(o))) { + kDebug() << "**********************####" << e->type() << o; if (e->type() == QEvent::MouseButtonPress) { // clicking the subwidget should mean the same as clicking the combo box (i.e. show the popup) if (handleMousePressEvent(static_cast(e))) @@ -392,7 +409,8 @@ if (handleKeyPressEvent(static_cast(e))) return true; } - return e->type() != QEvent::Paint; + if (e->type() != QEvent::Paint) + return true; } return KexiDBAutoField::eventFilter(o, e); } @@ -406,10 +424,10 @@ void KexiDBComboBox::setPaletteBackgroundColor(const QColor & color) { KexiDBAutoField::setPaletteBackgroundColor(color); - QPalette pal(palette()); +/* QPalette pal(palette()); QColorGroup cg(pal.active()); pal.setActive(cg); - QWidget::setPalette(pal); + QWidget::setPalette(pal);*/ update(); } --- trunk/koffice/kexi/plugins/forms/widgets/kexidbcombobox.h #1121615:1121616 @@ -86,7 +86,7 @@ Reimplemented. */ virtual KexiDB::QueryColumnInfo* visibleColumnInfo() const; - const QColor & paletteBackgroundColor() const { + QColor paletteBackgroundColor() const { return KexiDBAutoField::paletteBackgroundColor(); } --- trunk/koffice/kexi/widget/tableview/kexicomboboxbase.cpp #1121615:1121616 @@ -334,11 +334,13 @@ void KexiComboBoxBase::showPopup() { + kDebug(44010); createPopup(true); } void KexiComboBoxBase::createPopup(bool show) { + kDebug() << show << field() << popup() << m_updatePopupSelectionOnShow; if (!field()) return; m_insideCreatePopup = true; @@ -369,12 +371,16 @@ QPoint posMappedToGlobal = mapFromParentToGlobal(thisWidget->pos()); if (posMappedToGlobal != QPoint(-1, -1)) { //! todo alter the position to fit the popup within screen boundaries + popup()->hide(); popup()->move(posMappedToGlobal + QPoint(0, thisWidget->height())); + kDebug() << "pos:" << posMappedToGlobal + QPoint(0, thisWidget->height()); //to avoid flickering: first resize to 0-height, then show and resize back to prev. height const int w = popupWidthHint(); popup()->resize(w, 0); - if (show) + if (show) { popup()->show(); + kDebug(44010) << "SHOW!!!"; + } popup()->updateSize(w); if (m_updatePopupSelectionOnShow) { int rowToHighlight = -1; @@ -409,7 +415,11 @@ moveCursorToEndInInternalEditor(); selectAllInInternalEditor(); widgetToFocus->setFocus(); + popup()->show(); + popup()->raise(); + popup()->repaint(); } + kDebug(44010) << popup()->isVisible(); m_insideCreatePopup = false; } @@ -443,7 +453,7 @@ void KexiComboBoxBase::slotItemSelected(KexiDB::RecordData*) { - kDebug() << "m_visibleValue=" << m_visibleValue; + kDebug(44010) << "m_visibleValue=" << m_visibleValue; QVariant valueToSet; KexiTableViewData *relData = column() ? column()->relatedData() : 0; --- trunk/koffice/kexi/widget/tableview/kexicomboboxpopup.cpp #1121615:1121616 @@ -350,10 +350,12 @@ bool KexiComboBoxPopup::eventFilter(QObject *o, QEvent *e) { if (o == this && e->type() == QEvent::Hide) { + kDebug(44010) << "HIDE!!!"; emit hidden(); } else if (e->type() == QEvent::MouseButtonPress) { - kDebug() << "QEvent::MousePress"; + kDebug(44010) << "QEvent::MousePress"; } else if (o == d->tv) { + kDebug(44010) << "QEvent::KeyPress TV"; if (e->type() == QEvent::KeyPress) { QKeyEvent *ke = static_cast(e); const int k = ke->key(); --- trunk/koffice/kexi/widget/tableview/kexitableview.cpp #1121615:1121616 @@ -665,11 +665,11 @@ void KexiTableView::drawContents(QPainter *p, int cx, int cy, int cw, int ch) { + kDebug() << "disable" << d->disableDrawContents << "cx" << cx << "cy" << cy << "cw" << cw << "ch" << ch; + if (d->disableDrawContents) return; -//kDebug() << "cx" << cx << "cy" << cy << "cw" << cw << "ch" << ch; - bool paintOnlyInsertRow = false; bool inserting = isInsertingEnabled(); bool plus1row = false; //true if we should show 'inserting' row at the end