diff --git a/krusader/GUI/krstyleproxy.h b/krusader/GUI/krstyleproxy.h --- a/krusader/GUI/krstyleproxy.h +++ b/krusader/GUI/krstyleproxy.h @@ -32,42 +32,13 @@ #define KRSTYLEPROXY_H // QtWidgets -#include +#include -class QPainter; -class QWidget; -class QStyleOptionComplex; - -class KrStyleProxy: public QStyle +class KrStyleProxy: public QProxyStyle { public: - KrStyleProxy() {} - virtual void drawComplexControl(ComplexControl control, const QStyleOptionComplex * option, QPainter * painter, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual void drawControl(ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual void drawItemPixmap(QPainter * painter, const QRect & rectangle, int alignment, const QPixmap & pixmap) const Q_DECL_OVERRIDE; - virtual void drawItemText(QPainter * painter, const QRect & rectangle, int alignment, const QPalette & palette, bool enabled, const QString & text, QPalette::ColorRole textRole = QPalette::NoRole) const Q_DECL_OVERRIDE; - virtual void drawPrimitive(PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual QPixmap generatedIconPixmap(QIcon::Mode iconMode, const QPixmap & pixmap, const QStyleOption * option) const Q_DECL_OVERRIDE; - virtual QStyle::SubControl hitTestComplexControl(ComplexControl control, const QStyleOptionComplex * option, const QPoint & position, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual QRect itemPixmapRect(const QRect & rectangle, int alignment, const QPixmap & pixmap) const Q_DECL_OVERRIDE; - virtual QRect itemTextRect(const QFontMetrics & metrics, const QRect & rectangle, int alignment, bool enabled, const QString & text) const Q_DECL_OVERRIDE; - virtual int layoutSpacing(QSizePolicy::ControlType ctrl1, QSizePolicy::ControlType ctrl2, Qt::Orientation orientation, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE; - virtual int pixelMetric(PixelMetric metric, const QStyleOption * option = 0, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual void polish(QWidget * widget) Q_DECL_OVERRIDE; - virtual void polish(QApplication * application) Q_DECL_OVERRIDE; - virtual void polish(QPalette & palette) Q_DECL_OVERRIDE; - virtual QSize sizeFromContents(ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual QIcon standardIcon(StandardPixmap stdIcon, const QStyleOption *option = 0, const QWidget *widget = 0) const Q_DECL_OVERRIDE; - virtual QPalette standardPalette() const Q_DECL_OVERRIDE; - virtual int styleHint(StyleHint stylehint, const QStyleOption *option = 0, const QWidget *widget = 0, QStyleHintReturn *returnData = 0) const Q_DECL_OVERRIDE; - virtual QRect subControlRect(ComplexControl control, const QStyleOptionComplex * option, SubControl subControl, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual QRect subElementRect(SubElement element, const QStyleOption * option, const QWidget * widget = 0) const Q_DECL_OVERRIDE; - virtual QPixmap standardPixmap(QStyle::StandardPixmap pixmap, const QStyleOption* option, const QWidget*widget = 0) const Q_DECL_OVERRIDE; - virtual void unpolish(QWidget * widget) Q_DECL_OVERRIDE; - virtual void unpolish(QApplication * application) Q_DECL_OVERRIDE; + void drawPrimitive(PrimitiveElement element, const QStyleOption *option, QPainter *painter, + const QWidget *widget = 0) const Q_DECL_OVERRIDE; }; - #endif /* KRSTYLEPROXY_H */ - - diff --git a/krusader/GUI/krstyleproxy.cpp b/krusader/GUI/krstyleproxy.cpp --- a/krusader/GUI/krstyleproxy.cpp +++ b/krusader/GUI/krstyleproxy.cpp @@ -35,29 +35,9 @@ #include // QtWidgets #include -#include -void KrStyleProxy::drawComplexControl(ComplexControl control, const QStyleOptionComplex * option, QPainter * painter, const QWidget * widget) const -{ - QApplication::style()->drawComplexControl(control, option, painter, widget); -} - -void KrStyleProxy::drawControl(ControlElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget) const -{ - QApplication::style()->drawControl(element, option, painter, widget); -} - -void KrStyleProxy::drawItemPixmap(QPainter * painter, const QRect & rectangle, int alignment, const QPixmap & pixmap) const -{ - QApplication::style()->drawItemPixmap(painter, rectangle, alignment, pixmap); -} - -void KrStyleProxy::drawItemText(QPainter * painter, const QRect & rectangle, int alignment, const QPalette & palette, bool enabled, const QString & text, QPalette::ColorRole textRole) const -{ - QApplication::style()->drawItemText(painter, rectangle, alignment, palette, enabled, text, textRole); -} - -void KrStyleProxy::drawPrimitive(PrimitiveElement element, const QStyleOption * option, QPainter * painter, const QWidget * widget) const +void KrStyleProxy::drawPrimitive(PrimitiveElement element, const QStyleOption *option, + QPainter *painter, const QWidget *widget) const { if (element == QStyle::PE_FrameFocusRect) { if (const QStyleOptionFocusRect *fropt = qstyleoption_cast(option)) { @@ -82,95 +62,5 @@ painter->setPen(oldPen); } } else - QApplication::style()->drawPrimitive(element, option, painter, widget); -} - -QPixmap KrStyleProxy::generatedIconPixmap(QIcon::Mode iconMode, const QPixmap & pixmap, const QStyleOption * option) const -{ - return QApplication::style()->generatedIconPixmap(iconMode, pixmap, option); -} - -QStyle::SubControl KrStyleProxy::hitTestComplexControl(ComplexControl control, const QStyleOptionComplex * option, const QPoint & position, const QWidget * widget) const -{ - return QApplication::style()->hitTestComplexControl(control, option, position, widget); -} - -QRect KrStyleProxy::itemPixmapRect(const QRect & rectangle, int alignment, const QPixmap & pixmap) const -{ - return QApplication::style()->itemPixmapRect(rectangle, alignment, pixmap); -} - -QRect KrStyleProxy::itemTextRect(const QFontMetrics & metrics, const QRect & rectangle, int alignment, bool enabled, const QString & text) const -{ - return QApplication::style()->itemTextRect(metrics, rectangle, alignment, enabled, text); -} - -int KrStyleProxy::layoutSpacing(QSizePolicy::ControlType ctrl1, QSizePolicy::ControlType ctrl2, Qt::Orientation orientation, const QStyleOption *option, const QWidget *widget) const -{ - return QApplication::style()->layoutSpacing(ctrl1, ctrl2, orientation, option, widget); -} - -int KrStyleProxy::pixelMetric(PixelMetric metric, const QStyleOption * option, const QWidget * widget) const -{ - return QApplication::style()->pixelMetric(metric, option, widget); -} - -void KrStyleProxy::polish(QWidget * widget) -{ - QApplication::style()->polish(widget); -} - -void KrStyleProxy::polish(QApplication * application) -{ - QApplication::style()->polish(application); -} - -void KrStyleProxy::polish(QPalette & palette) -{ - QApplication::style()->polish(palette); -} - -QSize KrStyleProxy::sizeFromContents(ContentsType type, const QStyleOption * option, const QSize & contentsSize, const QWidget * widget) const -{ - return QApplication::style()->sizeFromContents(type, option, contentsSize, widget); -} - -QIcon KrStyleProxy::standardIcon(StandardPixmap stdIcon, const QStyleOption *option, const QWidget *widget) const -{ - return QApplication::style()->standardIcon(stdIcon, option, widget); -} - -QPalette KrStyleProxy::standardPalette() const -{ - return QApplication::style()->standardPalette(); -} - -int KrStyleProxy::styleHint(StyleHint hint, const QStyleOption * option, const QWidget * widget, QStyleHintReturn * returnData) const -{ - return QApplication::style()->styleHint(hint, option, widget, returnData); -} - -QRect KrStyleProxy::subControlRect(ComplexControl control, const QStyleOptionComplex * option, SubControl subControl, const QWidget * widget) const -{ - return QApplication::style()->subControlRect(control, option, subControl, widget); -} - -QRect KrStyleProxy::subElementRect(SubElement element, const QStyleOption * option, const QWidget * widget) const -{ - return QApplication::style()->subElementRect(element, option, widget); -} - -QPixmap KrStyleProxy::standardPixmap(QStyle::StandardPixmap pixmap, const QStyleOption* option, const QWidget*widget) const -{ - return QApplication::style()->standardPixmap(pixmap, option, widget); -} - -void KrStyleProxy::unpolish(QWidget * widget) -{ - QApplication::style()->unpolish(widget); -} - -void KrStyleProxy::unpolish(QApplication * application) -{ - QApplication::style()->unpolish(application); + QProxyStyle::drawPrimitive(element, option, painter, widget); } diff --git a/krusader/Panel/krinterbriefview.cpp b/krusader/Panel/krinterbriefview.cpp --- a/krusader/Panel/krinterbriefview.cpp +++ b/krusader/Panel/krinterbriefview.cpp @@ -446,15 +446,16 @@ option.rect = visualRect(mndx); painter.save(); - bool focus = curr.isValid() && curr.row() == mndx.row() && hasFocus(); - itemDelegate()->paint(&painter, option, mndx); - if (focus) { + // (always) draw dashed line border around current item row + const bool isCurrent = curr.isValid() && curr.row() == mndx.row(); + if (isCurrent) { QStyleOptionFocusRect o; o.QStyleOption::operator=(option); QPalette::ColorGroup cg = QPalette::Normal; o.backgroundColor = option.palette.color(cg, QPalette::Background); + style()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, &painter); } diff --git a/krusader/Panel/krinterdetailedview.h b/krusader/Panel/krinterdetailedview.h --- a/krusader/Panel/krinterdetailedview.h +++ b/krusader/Panel/krinterdetailedview.h @@ -79,6 +79,8 @@ void dropEvent(QDropEvent *) Q_DECL_OVERRIDE; bool eventFilter(QObject *object, QEvent *event) Q_DECL_OVERRIDE; bool viewportEvent(QEvent * event) Q_DECL_OVERRIDE; + void drawRow(QPainter *painter, const QStyleOptionViewItem &options, + const QModelIndex &index) const Q_DECL_OVERRIDE; QRect itemRect(const vfile *vf) Q_DECL_OVERRIDE; diff --git a/krusader/Panel/krinterdetailedview.cpp b/krusader/Panel/krinterdetailedview.cpp --- a/krusader/Panel/krinterdetailedview.cpp +++ b/krusader/Panel/krinterdetailedview.cpp @@ -373,6 +373,23 @@ return QTreeView::viewportEvent(event); } +void KrInterDetailedView::drawRow(QPainter *painter, const QStyleOptionViewItem &options, + const QModelIndex &index) const +{ + QTreeView::drawRow(painter, options, index); + // (always) draw dashed line border around current item row. This is done internally in + // QTreeView::drawRow() only when panel is focused, we have to repeat it here. + if (index == currentIndex()) { + QStyleOptionFocusRect o; + o.backgroundColor = options.palette.color(QPalette::Normal, QPalette::Background); + + const QRect focusRect(0, options.rect.y(), header()->length(), options.rect.height()); + o.rect = style()->visualRect(layoutDirection(), viewport()->rect(), focusRect); + + style()->drawPrimitive(QStyle::PE_FrameFocusRect, &o, painter); + } +} + void KrInterDetailedView::setSortMode(KrViewProperties::ColumnType sortColumn, bool descending) { Qt::SortOrder sortDir = descending ? Qt::DescendingOrder : Qt::AscendingOrder; diff --git a/krusader/Panel/krsearchbar.cpp b/krusader/Panel/krsearchbar.cpp --- a/krusader/Panel/krsearchbar.cpp +++ b/krusader/Panel/krsearchbar.cpp @@ -171,11 +171,7 @@ krOut << "unexpected search mode: " << _currentMode; } - if (!text.isEmpty()) - // needed to show where the cursor is now - _view->widget()->setFocus(); - else - _textBox->setFocus(); + _textBox->setFocus(); } void KrSearchBar::saveSearchString() @@ -199,54 +195,53 @@ void KrSearchBar::keyPressEvent(QKeyEvent *event) { - bool handled = handleKeyPressEvent(static_cast(event)); - if(handled) { + const bool handled = handleKeyPressEvent(static_cast(event)); + if (handled) { return; } QWidget::keyPressEvent(event); } bool KrSearchBar::eventFilter(QObject *watched, QEvent *event) { - if(event->type() != QEvent::ShortcutOverride && watched == _view->widget()) { - QKeyEvent *ke = static_cast(event); + if (event->type() != QEvent::ShortcutOverride && watched == _view->widget()) { + QKeyEvent *ke = static_cast(event); // overwrite "escape" shortcut if bar is shown if ((ke->key() == Qt::Key_Escape) && (ke->modifiers() == Qt::NoModifier) && !isHidden()) { ke->accept(); handleKeyPressEvent(ke); return true; } } - if(event->type() != QEvent::KeyPress) { + if (event->type() != QEvent::KeyPress) { return false; } - QKeyEvent *ke = static_cast(event); + QKeyEvent *ke = static_cast(event); if (watched == _view->widget()) { KConfigGroup grpSv(krConfig, "Look&Feel"); - bool autoShow = grpSv.readEntry("New Style Quicksearch", _NewStyleQuicksearch); + const bool autoShow = grpSv.readEntry("New Style Quicksearch", _NewStyleQuicksearch); if (isHidden() && !autoShow) { return false; } - if(!isHidden()) { - bool handled = handleKeyPressEvent(ke); + if (!isHidden()) { + const bool handled = handleKeyPressEvent(ke); if (handled) { return true; } } if (isHidden() || - // handle by search bar if user wants to remove text or... + // view can handle its own event if user does not want to remove text or... !((ke->key() == Qt::Key_Backspace && !_textBox->currentText().isEmpty()) || - // ... insert space in it (even if not focused) - (ke->key() == Qt::Key_Space && _currentMode == KrSearchBar::MODE_SEARCH))){ - // give the view a chance to handle its own event - bool handled = _view->handleKeyEvent(ke); - if(handled) { + // ...insert space in search bar (even if not focused) + (ke->key() == Qt::Key_Space && _currentMode == KrSearchBar::MODE_SEARCH))) { + const bool handled = _view->handleKeyEvent(ke); + if (handled) { return true; } } @@ -257,7 +252,7 @@ } // start searching if bar is hidden? - if (isHidden()){ + if (isHidden()) { if (autoShow) { showBar(); } else { @@ -274,14 +269,14 @@ } return true; } else if (watched == _textBox) { - // allow the view to handle (some) key events from the text box + // allow the view to handle (most) key events from the text box if (ke->modifiers() == Qt::NoModifier && ke->key() != Qt::Key_Space && ke->key() != Qt::Key_Backspace && ke->key() != Qt::Key_Left && ke->key() != Qt::Key_Right) { bool handled = _view->handleKeyEvent(ke); - if(handled) { + if (handled) { _view->widget()->setFocus(); return true; } @@ -344,14 +339,14 @@ return false; } - bool updownCancel = KConfigGroup(krConfig, "Look&Feel") + const bool updownCancel = KConfigGroup(krConfig, "Look&Feel") .readEntry("Up/Down Cancels Quicksearch", false); - if(updownCancel) { + if (updownCancel) { hideBar(); return false; } - bool anyMatch = _view->op()->searchItem(_textBox->currentText(), caseSensitive(), up ? -1 : 1); + const bool anyMatch = _view->op()->searchItem(_textBox->currentText(), caseSensitive(), up ? -1 : 1); indicateMatch(anyMatch); return true; }