2018-07-20 19:48:29 +02:00
/*******************************************************************************
* gui / advsearch / advancedsearchdialog . cpp *
* *
* LibResAPI : API for local socket server *
* *
* Copyright ( C ) RetroShare Team < retroshare . project @ gmail . com > *
* *
* This program is free software : you can redistribute it and / or modify *
* it under the terms of the GNU Affero General Public License as *
* published by the Free Software Foundation , either version 3 of the *
* License , or ( at your option ) any later version . *
* *
* This program is distributed in the hope that it will be useful , *
* but WITHOUT ANY WARRANTY ; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the *
* GNU Affero General Public License for more details . *
* *
* You should have received a copy of the GNU Affero General Public License *
* along with this program . If not , see < https : //www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2007-11-15 03:18:48 +00:00
2018-07-22 00:02:06 +02:00
# include "advancedsearchdialog.h"
2007-11-15 03:18:48 +00:00
AdvancedSearchDialog : : AdvancedSearchDialog ( QWidget * parent ) : QDialog ( parent )
{
setupUi ( this ) ;
dialogLayout = this - > layout ( ) ;
metrics = new QFontMetrics ( this - > font ( ) ) ;
// the list of expressions
expressions = new QList < ExpressionWidget * > ( ) ;
// a area for holding the objects
expressionsLayout = new QVBoxLayout ( ) ;
expressionsLayout - > setSpacing ( 0 ) ;
expressionsLayout - > setMargin ( 0 ) ;
expressionsLayout - > setObjectName ( QString : : fromUtf8 ( " expressionsLayout " ) ) ;
expressionsFrame - > setSizePolicy ( QSizePolicy : : MinimumExpanding ,
QSizePolicy : : MinimumExpanding ) ;
expressionsFrame - > setLayout ( expressionsLayout ) ;
// we now add the first expression widgets to the dialog via a vertical
// layout
reset ( ) ; //addNewExpression();
connect ( this - > addExprButton , SIGNAL ( clicked ( ) ) ,
this , SLOT ( addNewExpression ( ) ) ) ;
connect ( this - > resetButton , SIGNAL ( clicked ( ) ) ,
this , SLOT ( reset ( ) ) ) ;
connect ( this - > executeButton , SIGNAL ( clicked ( ) ) ,
this , SLOT ( prepareSearch ( ) ) ) ;
}
void AdvancedSearchDialog : : addNewExpression ( )
{
2010-02-18 02:14:09 +00:00
int sizeChange = metrics - > height ( ) + 26 ;
2007-11-15 03:18:48 +00:00
ExpressionWidget * expr ;
if ( expressions - > size ( ) = = 0 )
{
//create an initial expression
expr = new ExpressionWidget ( expressionsFrame , true ) ;
} else {
expr = new ExpressionWidget ( expressionsFrame ) ;
}
expressions - > append ( expr ) ;
expressionsLayout - > addWidget ( expr , 1 , Qt : : AlignLeft ) ;
connect ( expr , SIGNAL ( signalDelete ( ExpressionWidget * ) ) ,
this , SLOT ( deleteExpression ( ExpressionWidget * ) ) ) ;
//expressionsLayout->invalidate();
//searchCriteriaBox->setMinimumSize(searchCriteriaBox->minimumWidth(),
// searchCriteriaBox->minimumHeight() + sizeChange);
//searchCriteriaBox->adjustSize();
expressionsFrame - > adjustSize ( ) ;
this - > setMinimumSize ( this - > minimumWidth ( ) , this - > minimumHeight ( ) + sizeChange ) ;
this - > adjustSize ( ) ;
}
void AdvancedSearchDialog : : deleteExpression ( ExpressionWidget * expr )
{
2010-02-18 02:14:09 +00:00
int sizeChange = metrics - > height ( ) + 26 ;
2007-11-15 03:18:48 +00:00
expressions - > removeAll ( expr ) ;
expr - > hide ( ) ;
expressionsLayout - > removeWidget ( expr ) ;
delete expr ;
expressionsLayout - > invalidate ( ) ;
//searchCriteriaBox->setMinimumSize(searchCriteriaBox->minimumWidth(),
// searchCriteriaBox->minimumHeight() - sizeChange);
//searchCriteriaBox->adjustSize();
expressionsFrame - > adjustSize ( ) ;
this - > setMinimumSize ( this - > minimumWidth ( ) , this - > minimumHeight ( ) - sizeChange ) ;
this - > adjustSize ( ) ;
}
void AdvancedSearchDialog : : reset ( )
{
ExpressionWidget * expr ;
while ( ! expressions - > isEmpty ( ) )
{
expr = expressions - > takeLast ( ) ;
deleteExpression ( expr ) ;
}
// now add a new default expressions
addNewExpression ( ) ;
}
void AdvancedSearchDialog : : prepareSearch ( )
{
emit search ( getRsExpr ( ) ) ;
}
2016-09-13 12:05:22 +02:00
RsRegularExpression : : Expression * AdvancedSearchDialog : : getRsExpr ( )
2007-11-15 03:18:48 +00:00
{
2016-09-13 12:05:22 +02:00
RsRegularExpression : : Expression * wholeExpression ;
2007-11-15 03:18:48 +00:00
// process the special case: first expression
wholeExpression = expressions - > at ( 0 ) - > getRsExpression ( ) ;
// iterate through the items in elements and
Fic Gcc warnings:
/libretroshare/src/file_sharing/p3filelists.cc:-1: In static member
function ‘static bool p3FileDatabase::convertPointerToEntryIndex(const
void*, p3FileDatabase::EntryIndex&, uint32_t&)’:
/libretroshare/src/file_sharing/p3filelists.cc:624: warning:
dereferencing type-punned pointer will break strict-aliasing rules [-
Wstrict-aliasing]
e = EntryIndex( *reinterpret_cast<uint32_t*>(&p) &
ENTRY_INDEX_BIT_MASK ) ;
/home/phenom/GIT/RetroShare/trunk/libretroshare/src/file_sharing/
p3filelists.cc:625: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
friend_index = (*reinterpret_cast<uint32_t*>(&p)) >>
NB_ENTRY_INDEX_BITS ;
/libretroshare/src/gxstrans/p3gxstransitems.h:29: In file included from
../../../trunk/libretroshare/src/gxstrans/p3gxstransitems.h:29:0,
/libretroshare/src/gxstrans/p3gxstransitems.cc:19: from ../../../trunk/
libretroshare/src/gxstrans/p3gxstransitems.cc:19:
/libretroshare/src/gxstrans/p3gxstransitems.cc:-1: In member function
‘virtual void
OutgoingRecord_deprecated::serial_process(RsGenericSerializer::SerializeJob,
RsGenericSerializer::SerializeContext&)’:
/libretroshare/src/serialiser/rstypeserializer.h:61: warning:
dereferencing type-punned pointer will break strict-aliasing rules [-
Wstrict-aliasing]
RsTypeSerializer::serial_process<T>(j, ctx, reinterpret_cast<T&>(I),
#I);\
/libretroshare/src/gxstrans/p3gxstransitems.cc:51: in expansion of macro
‘RS_REGISTER_SERIAL_MEMBER_TYPED’
RS_REGISTER_SERIAL_MEMBER_TYPED(clientService, uint16_t);
/libretroshare/src/gxstrans/p3gxstransitems.cc:-1: In member function
‘virtual void
OutgoingRecord::serial_process(RsGenericSerializer::SerializeJob,
RsGenericSerializer::SerializeContext&)’:
/libretroshare/src/serialiser/rstypeserializer.h:61: warning:
dereferencing type-punned pointer will break strict-aliasing rules [-
Wstrict-aliasing]
RsTypeSerializer::serial_process<T>(j, ctx, reinterpret_cast<T&>(I),
#I);\
/libretroshare/src/gxstrans/p3gxstransitems.cc:65: in expansion of macro
‘RS_REGISTER_SERIAL_MEMBER_TYPED’
RS_REGISTER_SERIAL_MEMBER_TYPED(clientService, uint16_t);
/retroshare-gui/src/gui/common/RsBanListToolButton.cpp:-1: In member
function ‘void RsBanListToolButton::applyIp()’:
/retroshare-gui/src/gui/common/RsBanListToolButton.cpp:163: warning:
‘list_type’ may be used uninitialized in this function [-Wmaybe-
uninitialized]
changed = rsBanList->removeIpRange(addr, masked_bytes, list_type);
2017-07-28 20:00:29 +02:00
# warning Phenom (2017-07-21): I don t know if it is a real memLeak for wholeExpression. If not remove this warning and add a comment how it is deleted.
2017-07-21 15:19:17 +02:00
// cppcheck-suppress memleak
2007-11-15 03:18:48 +00:00
for ( int i = 1 ; i < expressions - > size ( ) ; + + i ) {
// extract the expression information and compound it with the
// first expression
2016-09-13 12:05:22 +02:00
wholeExpression = new RsRegularExpression : : CompoundExpression ( expressions - > at ( i ) - > getOperator ( ) ,
2007-11-15 03:18:48 +00:00
wholeExpression ,
expressions - > at ( i ) - > getRsExpression ( ) ) ;
}
return wholeExpression ;
}
QString AdvancedSearchDialog : : getSearchAsString ( )
{
QString str = expressions - > at ( 0 ) - > toString ( ) ;
// iterate through the items in elements and
for ( int i = 1 ; i < expressions - > size ( ) ; + + i ) {
// extract the expression information and compound it with the
// first expression
str + = QString ( " " ) + expressions - > at ( i ) - > toString ( ) ;
}
return str ;
}