74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
import typing
|
|
|
|
from qtpy import QtWidgets as QW
|
|
|
|
from hydrus.core import HydrusData
|
|
from hydrus.core import HydrusExceptions
|
|
|
|
from hydrus.client import ClientConstants as CC
|
|
from hydrus.client import ClientSearch
|
|
from hydrus.client.gui import QtPorting as QP
|
|
|
|
# ultimately, rewrite acread to be two classes, acread and acreadthatsupportsor
|
|
# and then this guy only imports the base class, and only the supportsor will know about this
|
|
# otherwise we have jank imports, and also nested OR lmao
|
|
# also this should take file and tag domain
|
|
|
|
class ORPredicateControl( QW.QWidget ):
|
|
|
|
def __init__( self, parent: QW.QWidget, predicate: ClientSearch.Predicate ):
|
|
|
|
QW.QWidget.__init__( self, parent )
|
|
|
|
from hydrus.client.gui.search import ClientGUIACDropdown
|
|
|
|
if predicate.GetType() != ClientSearch.PREDICATE_TYPE_OR_CONTAINER:
|
|
|
|
raise Exception( 'Launched an ORPredicateControl without an OR Pred!' )
|
|
|
|
|
|
predicates = predicate.GetValue()
|
|
|
|
page_key = HydrusData.GenerateKey()
|
|
|
|
file_search_context = ClientSearch.FileSearchContext( file_service_key = CC.LOCAL_FILE_SERVICE_KEY, predicates = predicates )
|
|
|
|
self._search_control = ClientGUIACDropdown.AutoCompleteDropdownTagsRead( self, page_key, file_search_context, hide_favourites_edit_actions = True )
|
|
|
|
vbox = QP.VBoxLayout()
|
|
|
|
QP.AddToLayout( vbox, self._search_control, CC.FLAGS_EXPAND_BOTH_WAYS )
|
|
|
|
self.setLayout( vbox )
|
|
|
|
|
|
def CheckValid( self ):
|
|
|
|
try:
|
|
|
|
predicates = self.GetPredicates()
|
|
|
|
except Exception as e:
|
|
|
|
raise HydrusExceptions.VetoException( str( e ) )
|
|
|
|
|
|
|
|
def GetPredicates( self ):
|
|
|
|
or_sub_predicates = self._search_control.GetPredicates()
|
|
|
|
if len( or_sub_predicates ) == 0:
|
|
|
|
return []
|
|
|
|
elif len( or_sub_predicates ) == 1:
|
|
|
|
return or_sub_predicates
|
|
|
|
|
|
or_predicate = ClientSearch.Predicate( ClientSearch.PREDICATE_TYPE_OR_CONTAINER, or_sub_predicates )
|
|
|
|
return [ or_predicate ]
|
|
|