Add "Highlight all" to Article search (Ctrl + F)

This commit is contained in:
Julian Depetris Chauvin 2011-06-12 20:59:35 -03:00
parent 0726b90f30
commit c55061c302
7 changed files with 84 additions and 9 deletions

View file

@ -0,0 +1,10 @@
/* This stylesheet is used only to highligh current selection when doing a search.
It's programatically set/unset to restore default selection color (e.g. blue under Windows, orange under Ubuntu) */
/* highlight/select color in Windows when a widget is inactive is nearly impossible to read (light gray).
* then change it to green to use with the find option. */
::selection {
background: #23DC23;
color: white;
}

View file

@ -214,6 +214,9 @@ void ArticleView::showDefinition( QString const & word, unsigned group,
// Any search opened is probably irrelevant now // Any search opened is probably irrelevant now
closeSearch(); closeSearch();
// Clear highlight all button selection
ui.highlightAllButton->setChecked(false);
ui.definition->load( req ); ui.definition->load( req );
//QApplication::setOverrideCursor( Qt::WaitCursor ); //QApplication::setOverrideCursor( Qt::WaitCursor );
@ -1291,6 +1294,16 @@ void ArticleView::on_searchCloseButton_clicked()
closeSearch(); closeSearch();
} }
void ArticleView::on_searchCaseSensitive_clicked()
{
performFindOperation( false, false, true );
}
void ArticleView::on_highlightAllButton_clicked()
{
performFindOperation( false, false, true );
}
void ArticleView::doubleClicked() void ArticleView::doubleClicked()
{ {
// We might want to initiate translation of the selected word // We might want to initiate translation of the selected word
@ -1317,19 +1330,40 @@ void ArticleView::doubleClicked()
} }
void ArticleView::performFindOperation( bool restart, bool backwards ) void ArticleView::performFindOperation( bool restart, bool backwards, bool checkHighlight )
{ {
QString text = ui.searchText->text(); QString text = ui.searchText->text();
if ( restart ) //highlight in a non-default color current selection
if( ui.definition->settings()->userStyleSheetUrl().isEmpty() )
ui.definition->settings()->setUserStyleSheetUrl(QUrl::fromLocalFile( ":/article-style-search-selection.css" ));
if ( restart || checkHighlight )
{ {
// Anyone knows how we reset the search position? if( restart ) {
// For now we resort to this hack: // Anyone knows how we reset the search position?
if ( ui.definition->selectedText().size() ) // For now we resort to this hack:
{ if ( ui.definition->selectedText().size() )
ui.definition->page()->currentFrame()-> {
evaluateJavaScript( "window.getSelection().removeAllRanges();" ); ui.definition->page()->currentFrame()->
evaluateJavaScript( "window.getSelection().removeAllRanges();" );
}
} }
QWebPage::FindFlags f( 0 );
if ( ui.searchCaseSensitive->isChecked() )
f |= QWebPage::FindCaseSensitively;
f |= QWebPage::HighlightAllOccurrences;
ui.definition->findText( "", f );
if( ui.highlightAllButton->isChecked() )
ui.definition->findText( text, f );
if( checkHighlight )
return;
} }
QWebPage::FindFlags f( 0 ); QWebPage::FindFlags f( 0 );

View file

@ -200,6 +200,8 @@ private slots:
void on_searchText_textEdited(); void on_searchText_textEdited();
void on_searchText_returnPressed(); void on_searchText_returnPressed();
void on_searchCloseButton_clicked(); void on_searchCloseButton_clicked();
void on_searchCaseSensitive_clicked();
void on_highlightAllButton_clicked();
/// Handles the double-click from the definition. /// Handles the double-click from the definition.
void doubleClicked(); void doubleClicked();
@ -244,7 +246,7 @@ private:
bool eventFilter( QObject * obj, QEvent * ev ); bool eventFilter( QObject * obj, QEvent * ev );
void performFindOperation( bool restart, bool backwards ); void performFindOperation( bool restart, bool backwards, bool checkHighlight = false );
void reloadStyleSheet(); void reloadStyleSheet();

View file

@ -127,6 +127,29 @@
</property> </property>
</widget> </widget>
</item> </item>
<item>
<widget class="QToolButton" name="highlightAllButton">
<property name="text">
<string>Highlight &amp;all</string>
</property>
<property name="icon">
<iconset resource="resources.qrc">
<normaloff>:/icons/highlighter.png</normaloff>:/icons/highlighter.png</iconset>
</property>
<property name="checkable">
<bool>true</bool>
</property>
<property name="checked">
<bool>false</bool>
</property>
<property name="toolButtonStyle">
<enum>Qt::ToolButtonTextBesideIcon</enum>
</property>
<property name="autoRaise">
<bool>true</bool>
</property>
</widget>
</item>
<item> <item>
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">

View file

@ -6,6 +6,10 @@
void ArticleWebView::mousePressEvent( QMouseEvent * event ) void ArticleWebView::mousePressEvent( QMouseEvent * event )
{ {
//restore default color for selection
if( !this->settings()->userStyleSheetUrl().isEmpty() )
this->settings()->setUserStyleSheetUrl(QUrl());
if ( event->buttons() & Qt::MidButton ) if ( event->buttons() & Qt::MidButton )
midButtonPressed = true; midButtonPressed = true;

BIN
icons/highlighter.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 489 B

View file

@ -18,6 +18,7 @@
<file>icons/warning.png</file> <file>icons/warning.png</file>
<file>article-style.css</file> <file>article-style.css</file>
<file>article-style-print.css</file> <file>article-style-print.css</file>
<file>article-style-search-selection.css</file>
<file>qt-style.css</file> <file>qt-style.css</file>
<file>icons/icon32_dsl.png</file> <file>icons/icon32_dsl.png</file>
<file>icons/icon32_stardict.png</file> <file>icons/icon32_stardict.png</file>
@ -44,5 +45,6 @@
<file>icons/forvo.png</file> <file>icons/forvo.png</file>
<file>icons/windows-list.png</file> <file>icons/windows-list.png</file>
<file>CREDITS.txt</file> <file>CREDITS.txt</file>
<file>icons/highlighter.png</file>
</qresource> </qresource>
</RCC> </RCC>