316 lines
11 KiB
Python
316 lines
11 KiB
Python
import os
|
|
import typing
|
|
|
|
from qtpy import QtCore as QC
|
|
from qtpy import QtWidgets as QW
|
|
|
|
from hydrus.core import HydrusGlobals as HG
|
|
|
|
from hydrus.client import ClientConstants as CC
|
|
from hydrus.client import ClientLocation
|
|
from hydrus.client.gui import ClientGUIFunctions
|
|
from hydrus.client.gui import ClientGUIScrolledPanels
|
|
from hydrus.client.gui import QtPorting as QP
|
|
from hydrus.client.gui.widgets import ClientGUICommon
|
|
|
|
class QuestionCommitInterstitialFilteringPanel( ClientGUIScrolledPanels.ResizingScrolledPanel ):
|
|
|
|
def __init__( self, parent, label ):
|
|
|
|
ClientGUIScrolledPanels.ResizingScrolledPanel.__init__( self, parent )
|
|
|
|
self._commit = ClientGUICommon.BetterButton( self, 'commit and continue', self.parentWidget().done, QW.QDialog.Accepted )
|
|
self._commit.setObjectName( 'HydrusAccept' )
|
|
|
|
self._back = ClientGUICommon.BetterButton( self, 'go back', self.parentWidget().done, QW.QDialog.Rejected )
|
|
|
|
vbox = QP.VBoxLayout()
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, label )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
QP.AddToLayout( vbox, self._commit, CC.FLAGS_EXPAND_SIZER_PERPENDICULAR )
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, '-or-' )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
QP.AddToLayout( vbox, self._back, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
self.widget().setLayout( vbox )
|
|
|
|
ClientGUIFunctions.SetFocusLater( self._commit )
|
|
|
|
|
|
class QuestionArchiveDeleteFinishFilteringPanel( ClientGUIScrolledPanels.ResizingScrolledPanel ):
|
|
|
|
def __init__( self, parent, kept_label: typing.Optional[ str ], deletion_options ):
|
|
|
|
ClientGUIScrolledPanels.ResizingScrolledPanel.__init__( self, parent )
|
|
|
|
self._location_context = ClientLocation.LocationContext() # empty
|
|
|
|
vbox = QP.VBoxLayout()
|
|
|
|
first_commit = None
|
|
|
|
if len( deletion_options ) == 0:
|
|
|
|
if kept_label is None:
|
|
|
|
kept_label = 'ERROR: do not seem to have any actions at all!'
|
|
|
|
|
|
label = '{}?'.format( kept_label )
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, label )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
first_commit = ClientGUICommon.BetterButton( self, 'commit', self.DoCommit, ClientLocation.LocationContext() )
|
|
first_commit.setObjectName( 'HydrusAccept' )
|
|
|
|
QP.AddToLayout( vbox, first_commit, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
elif len( deletion_options ) == 1:
|
|
|
|
( location_context, delete_label ) = deletion_options[0]
|
|
|
|
if kept_label is None:
|
|
|
|
label = '{}?'.format( delete_label )
|
|
|
|
else:
|
|
|
|
label = '{} and {}?'.format( kept_label, delete_label )
|
|
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, label )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
first_commit = ClientGUICommon.BetterButton( self, 'commit', self.DoCommit, location_context )
|
|
first_commit.setObjectName( 'HydrusAccept' )
|
|
|
|
QP.AddToLayout( vbox, first_commit, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
else:
|
|
|
|
if kept_label is not None:
|
|
|
|
label = '{}{}-and-'.format( kept_label, os.linesep )
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, label )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
|
|
for ( location_context, delete_label ) in deletion_options:
|
|
|
|
label = '{}?'.format( delete_label )
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, label )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
commit = ClientGUICommon.BetterButton( self, 'commit', self.DoCommit, location_context )
|
|
commit.setObjectName( 'HydrusAccept' )
|
|
|
|
QP.AddToLayout( vbox, commit, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
if first_commit is None:
|
|
|
|
first_commit = commit
|
|
|
|
|
|
|
|
|
|
self._forget = ClientGUICommon.BetterButton( self, 'forget', self.parentWidget().done, QW.QDialog.Rejected )
|
|
self._forget.setObjectName( 'HydrusCancel' )
|
|
|
|
self._back = ClientGUICommon.BetterButton( self, 'back to filtering', self.DoGoBack )
|
|
|
|
QP.AddToLayout( vbox, self._forget, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, '-or-' )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
QP.AddToLayout( vbox, self._back, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
self.widget().setLayout( vbox )
|
|
|
|
ClientGUIFunctions.SetFocusLater( first_commit )
|
|
|
|
|
|
def DoGoBack( self ):
|
|
|
|
self.parentWidget().SetCancelled( True )
|
|
self.parentWidget().done( QW.QDialog.Rejected )
|
|
|
|
|
|
def DoCommit( self, location_context ):
|
|
|
|
self._location_context = location_context
|
|
self.parentWidget().done( QW.QDialog.Accepted )
|
|
|
|
|
|
def GetLocationContext( self ) -> ClientLocation.LocationContext:
|
|
|
|
return self._location_context
|
|
|
|
|
|
class QuestionFinishFilteringPanel( ClientGUIScrolledPanels.ResizingScrolledPanel ):
|
|
|
|
def __init__( self, parent, label ):
|
|
|
|
ClientGUIScrolledPanels.ResizingScrolledPanel.__init__( self, parent )
|
|
|
|
self._commit = ClientGUICommon.BetterButton( self, 'commit', self.parentWidget().done, QW.QDialog.Accepted )
|
|
self._commit.setObjectName( 'HydrusAccept' )
|
|
|
|
self._forget = ClientGUICommon.BetterButton( self, 'forget', self.parentWidget().done, QW.QDialog.Rejected )
|
|
self._forget.setObjectName( 'HydrusCancel' )
|
|
|
|
def cancel_callback( parent ):
|
|
|
|
parent.SetCancelled( True )
|
|
parent.done( QW.QDialog.Rejected )
|
|
|
|
|
|
self._back = ClientGUICommon.BetterButton( self, 'back to filtering', cancel_callback, parent )
|
|
|
|
hbox = QP.HBoxLayout()
|
|
|
|
QP.AddToLayout( hbox, self._commit, CC.FLAGS_EXPAND_BOTH_WAYS )
|
|
QP.AddToLayout( hbox, self._forget, CC.FLAGS_EXPAND_BOTH_WAYS )
|
|
|
|
vbox = QP.VBoxLayout()
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, label )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
QP.AddToLayout( vbox, hbox, CC.FLAGS_EXPAND_SIZER_PERPENDICULAR )
|
|
|
|
st = ClientGUICommon.BetterStaticText( self, '-or-' )
|
|
|
|
st.setAlignment( QC.Qt.AlignCenter )
|
|
|
|
QP.AddToLayout( vbox, st, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
QP.AddToLayout( vbox, self._back, CC.FLAGS_EXPAND_PERPENDICULAR )
|
|
|
|
self.widget().setLayout( vbox )
|
|
|
|
ClientGUIFunctions.SetFocusLater( self._commit )
|
|
|
|
|
|
class QuestionYesNoPanel( ClientGUIScrolledPanels.ResizingScrolledPanel ):
|
|
|
|
def __init__( self, parent, message, yes_label = 'yes', no_label = 'no' ):
|
|
|
|
ClientGUIScrolledPanels.ResizingScrolledPanel.__init__( self, parent )
|
|
|
|
self._yes = ClientGUICommon.BetterButton( self, yes_label, self.parentWidget().done, QW.QDialog.Accepted )
|
|
self._yes.setObjectName( 'HydrusAccept' )
|
|
|
|
self._no = ClientGUICommon.BetterButton( self, no_label, self.parentWidget().done, QW.QDialog.Rejected )
|
|
self._no.setObjectName( 'HydrusCancel' )
|
|
|
|
#
|
|
|
|
hbox = QP.HBoxLayout()
|
|
|
|
QP.AddToLayout( hbox, self._yes, CC.FLAGS_CENTER_PERPENDICULAR )
|
|
QP.AddToLayout( hbox, self._no, CC.FLAGS_CENTER_PERPENDICULAR )
|
|
|
|
vbox = QP.VBoxLayout()
|
|
|
|
text = ClientGUICommon.BetterStaticText( self, message )
|
|
text.setWordWrap( True )
|
|
|
|
QP.AddToLayout( vbox, text, CC.FLAGS_EXPAND_BOTH_WAYS )
|
|
QP.AddToLayout( vbox, hbox, CC.FLAGS_ON_RIGHT )
|
|
|
|
self.widget().setLayout( vbox )
|
|
|
|
ClientGUIFunctions.SetFocusLater( self._yes )
|
|
|
|
|
|
|
|
class QuestionYesYesNoPanel( ClientGUIScrolledPanels.ResizingScrolledPanel ):
|
|
|
|
def __init__( self, parent, message, yes_tuples = None, no_label = 'no' ):
|
|
|
|
ClientGUIScrolledPanels.ResizingScrolledPanel.__init__( self, parent )
|
|
|
|
if yes_tuples is None:
|
|
|
|
yes_tuples = [ ( 'yes', 'yes' ) ]
|
|
|
|
|
|
self._value = yes_tuples[0][1]
|
|
|
|
yes_buttons = []
|
|
|
|
for ( label, data ) in yes_tuples:
|
|
|
|
yes_button = ClientGUICommon.BetterButton( self, label, self._DoYes, data )
|
|
yes_button.setObjectName( 'HydrusAccept' )
|
|
|
|
yes_buttons.append( yes_button )
|
|
|
|
|
|
self._no = ClientGUICommon.BetterButton( self, no_label, self.parentWidget().done, QW.QDialog.Rejected )
|
|
self._no.setObjectName( 'HydrusCancel' )
|
|
|
|
#
|
|
|
|
text = ClientGUICommon.BetterStaticText( self, message )
|
|
text.setWordWrap( True )
|
|
|
|
hbox = QP.HBoxLayout()
|
|
|
|
for yes_button in yes_buttons:
|
|
|
|
QP.AddToLayout( hbox, yes_button, CC.FLAGS_CENTER_PERPENDICULAR )
|
|
|
|
|
|
QP.AddToLayout( hbox, self._no, CC.FLAGS_CENTER_PERPENDICULAR )
|
|
|
|
vbox = QP.VBoxLayout()
|
|
|
|
QP.AddToLayout( vbox, text, CC.FLAGS_EXPAND_BOTH_WAYS )
|
|
QP.AddToLayout( vbox, hbox, CC.FLAGS_ON_RIGHT )
|
|
|
|
self.widget().setLayout( vbox )
|
|
|
|
ClientGUIFunctions.SetFocusLater( yes_buttons[0] )
|
|
|
|
|
|
def _DoYes( self, value ):
|
|
|
|
self._value = value
|
|
|
|
self.parentWidget().done( QW.QDialog.Accepted )
|
|
|
|
|
|
def GetValue( self ):
|
|
|
|
return self._value
|
|
|
|
|