2021-05-17 06:23:10 +12:00
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import gi
gi . require_version ( " Gtk " , " 3.0 " )
from gi . repository import Gtk
2021-05-18 09:59:12 +12:00
from manuskript . data import Characters , Character , Importance , Color
from manuskript . ui . util import rgbaFromColor , pixbufFromColor
2023-01-11 01:39:27 +13:00
from manuskript . util import validString , invalidString , validInt , invalidInt , unique_name_checker
2021-05-18 09:59:12 +12:00
2021-05-17 06:23:10 +12:00
class CharactersView :
2023-02-04 03:38:50 +13:00
def __init__ ( self , project ) :
2023-02-05 07:11:28 +13:00
self . characterTemplates = project . character_templates # The template for detailed info
2023-01-11 01:39:27 +13:00
self . characters = project . characters
2021-05-18 09:59:12 +12:00
self . character = None
2021-05-17 06:23:10 +12:00
builder = Gtk . Builder ( )
builder . add_from_file ( " ui/characters.glade " )
self . widget = builder . get_object ( " characters_view " )
2022-11-19 11:32:08 +13:00
self . notebook = builder . get_object ( " character_notebook " )
2021-05-17 06:23:10 +12:00
2021-05-18 09:59:12 +12:00
self . charactersStore = builder . get_object ( " characters_store " )
2022-10-21 12:31:16 +13:00
self . refreshCharacterStore ( )
2021-05-18 09:59:12 +12:00
2022-10-21 12:51:06 +13:00
self . filteredCharactersStore = builder . get_object ( " filtered_characters_store " )
2021-05-18 09:59:12 +12:00
self . mainCharactersStore = builder . get_object ( " main_characters_store " )
self . secondaryCharactersStore = builder . get_object ( " secondary_characters_store " )
self . minorCharactersStore = builder . get_object ( " minor_characters_store " )
2022-10-30 05:42:55 +13:00
self . filterCharactersBuffer = builder . get_object ( " filter_characters " )
2023-02-03 14:00:18 +13:00
self . filterCharactersBuffer . connect ( " deleted-text " , self . _filterCharactersDeletedText )
self . filterCharactersBuffer . connect ( " inserted-text " , self . _filterCharactersInsertedText )
2022-10-30 05:42:55 +13:00
2023-02-03 14:00:18 +13:00
self . filteredCharactersStore . set_visible_func ( self . _filterCharacters )
2022-10-30 05:42:55 +13:00
self . filteredCharactersStore . refilter ( )
2022-10-21 12:51:06 +13:00
2023-02-03 14:00:18 +13:00
self . mainCharactersStore . set_visible_func ( lambda model , iterator , userdata :
model [ iterator ] [ 3 ] == Importance . MAIN . value )
self . secondaryCharactersStore . set_visible_func ( lambda model , iterator , userdata :
model [ iterator ] [ 3 ] == Importance . SECONDARY . value )
self . minorCharactersStore . set_visible_func ( lambda model , iterator , userdata :
model [ iterator ] [ 3 ] == Importance . MINOR . value )
2021-05-18 09:59:12 +12:00
self . mainCharactersStore . refilter ( )
self . secondaryCharactersStore . refilter ( )
self . minorCharactersStore . refilter ( )
self . characterSelections = [
builder . get_object ( " minor_character_selection " ) ,
builder . get_object ( " secondary_character_selection " ) ,
builder . get_object ( " main_character_selection " )
]
for selection in self . characterSelections :
2023-02-03 14:00:18 +13:00
selection . connect ( " changed " , self . _characterSelectionChanged )
2021-05-18 09:59:12 +12:00
2022-10-21 12:31:16 +13:00
self . addCharacterButton = builder . get_object ( " add_character " )
self . removeCharacterButton = builder . get_object ( " remove_character " )
2023-02-03 14:00:18 +13:00
self . addCharacterButton . connect ( " clicked " , self . _addCharacterClicked )
self . removeCharacterButton . connect ( " clicked " , self . _removeCharacterClicked )
2022-10-21 12:31:16 +13:00
2021-05-17 10:20:48 +12:00
self . colorButton = builder . get_object ( " color " )
self . importanceCombo = builder . get_object ( " importance " )
self . allowPOVCheck = builder . get_object ( " allow_POV " )
2023-02-03 14:00:18 +13:00
self . colorButton . connect ( " color-set " , self . _colorSet )
self . importanceCombo . connect ( " changed " , self . _importanceChanged )
self . allowPOVCheck . connect ( " toggled " , self . _allowPOVToggled )
2021-05-17 10:20:48 +12:00
self . detailsStore = builder . get_object ( " details_store " )
self . detailsSelection = builder . get_object ( " details_selection " )
self . addDetailsButton = builder . get_object ( " add_details " )
self . removeDetailsButton = builder . get_object ( " remove_details " )
2023-02-05 07:11:28 +13:00
self . charecterDetailsMenuButton = builder . get_object ( " characters_details_menu_button " )
self . newTemplateButton = builder . get_object ( " new_template_button " )
self . newTemplateEntry = builder . get_object ( " new_template_entry " )
self . newTemplateEntryBuffer = builder . get_object ( " new_template_entry_buffer " )
self . charecterDetailsMenuAppendBox = builder . get_object ( " template_select_box " )
self . charecterDetailsMenuTemplateBox = builder . get_object ( " template_select_box2 " )
2021-05-17 10:20:48 +12:00
self . detailsNameRenderer = builder . get_object ( " details_name " )
self . detailsValueRenderer = builder . get_object ( " details_value " )
2023-02-03 14:00:18 +13:00
self . addDetailsButton . connect ( " clicked " , self . _addDetailsClicked )
self . removeDetailsButton . connect ( " clicked " , self . _removeDetailsClicked )
2023-02-05 07:11:28 +13:00
self . charecterDetailsMenuButton . connect ( " clicked " , self . _onCharecterDetailsMenuClicked )
self . newTemplateButton . connect ( " clicked " , self . _onNewTemplateButtonClicked )
2023-02-03 14:00:18 +13:00
self . detailsNameRenderer . connect ( " edited " , self . _detailsNameEdited )
self . detailsValueRenderer . connect ( " edited " , self . _detailsValueEdited )
2021-05-17 10:20:48 +12:00
self . nameBuffer = builder . get_object ( " name " )
self . motivationBuffer = builder . get_object ( " motivation " )
self . goalBuffer = builder . get_object ( " goal " )
self . conflictBuffer = builder . get_object ( " conflict " )
self . epiphanyBuffer = builder . get_object ( " epiphany " )
self . oneSentenceBuffer = builder . get_object ( " one_sentence_summary " )
self . oneParagraphBuffer = builder . get_object ( " one_paragraph_summary " )
self . summaryBuffer = builder . get_object ( " summary " )
self . notesBuffer = builder . get_object ( " notes " )
2023-02-03 14:00:18 +13:00
self . nameBuffer . connect ( " deleted-text " , self . _nameDeletedText )
self . nameBuffer . connect ( " inserted-text " , self . _nameInsertedText )
2021-12-26 10:45:09 +13:00
2023-02-03 14:00:18 +13:00
self . motivationBuffer . connect ( " changed " , self . _motivationChanged )
self . goalBuffer . connect ( " changed " , self . _goalChanged )
self . conflictBuffer . connect ( " changed " , self . _conflictChanged )
self . epiphanyBuffer . connect ( " changed " , self . _epiphanyChanged )
self . oneSentenceBuffer . connect ( " changed " , self . _oneSentenceChanged )
self . oneParagraphBuffer . connect ( " changed " , self . _oneParagraphChanged )
self . summaryBuffer . connect ( " changed " , self . _summaryChanged )
self . notesBuffer . connect ( " changed " , self . _notesChanged )
2021-12-26 10:45:09 +13:00
2021-05-18 09:59:12 +12:00
self . unloadCharacterData ( )
2023-01-11 01:39:27 +13:00
2021-05-18 09:59:12 +12:00
2022-10-21 12:31:16 +13:00
def refreshCharacterStore ( self ) :
self . charactersStore . clear ( )
for character in self . characters :
tree_iter = self . charactersStore . append ( )
if tree_iter is None :
continue
self . charactersStore . set_value ( tree_iter , 0 , character . UID . value )
self . charactersStore . set_value ( tree_iter , 1 , validString ( character . name ) )
self . charactersStore . set_value ( tree_iter , 2 , pixbufFromColor ( character . color ) )
self . charactersStore . set_value ( tree_iter , 3 , Importance . asValue ( character . importance ) )
2021-05-18 09:59:12 +12:00
def loadCharacterData ( self , character : Character ) :
self . character = None
self . colorButton . set_rgba ( rgbaFromColor ( character . color ) )
2021-12-26 05:45:42 +13:00
self . importanceCombo . set_active ( Importance . asValue ( character . importance ) )
2021-05-18 09:59:12 +12:00
self . allowPOVCheck . set_active ( character . allowPOV ( ) )
self . nameBuffer . set_text ( validString ( character . name ) , - 1 )
self . motivationBuffer . set_text ( validString ( character . motivation ) , - 1 )
self . goalBuffer . set_text ( validString ( character . goal ) , - 1 )
self . conflictBuffer . set_text ( validString ( character . conflict ) , - 1 )
self . epiphanyBuffer . set_text ( validString ( character . epiphany ) , - 1 )
self . oneSentenceBuffer . set_text ( validString ( character . summarySentence ) , - 1 )
self . oneParagraphBuffer . set_text ( validString ( character . summaryParagraph ) , - 1 )
self . summaryBuffer . set_text ( validString ( character . summaryFull ) , - 1 )
self . notesBuffer . set_text ( validString ( character . notes ) , - 1 )
2021-12-26 08:51:39 +13:00
self . detailsStore . clear ( )
for ( key , value ) in character . details . items ( ) :
tree_iter = self . detailsStore . append ( )
if tree_iter is None :
continue
2022-10-30 09:12:02 +13:00
self . detailsStore . set_value ( tree_iter , 0 , validString ( key ) )
self . detailsStore . set_value ( tree_iter , 1 , validString ( value ) )
2021-12-26 08:51:39 +13:00
2021-05-18 09:59:12 +12:00
self . character = character
2022-11-19 11:32:08 +13:00
self . notebook . set_sensitive ( True )
2021-05-18 09:59:12 +12:00
def unloadCharacterData ( self ) :
self . character = None
2022-11-19 11:32:08 +13:00
self . notebook . set_sensitive ( False )
2021-05-18 09:59:12 +12:00
self . colorButton . set_rgba ( rgbaFromColor ( Color ( 0 , 0 , 0 ) ) )
self . allowPOVCheck . set_active ( False )
self . nameBuffer . set_text ( " " , - 1 )
self . motivationBuffer . set_text ( " " , - 1 )
self . goalBuffer . set_text ( " " , - 1 )
self . conflictBuffer . set_text ( " " , - 1 )
self . epiphanyBuffer . set_text ( " " , - 1 )
self . oneSentenceBuffer . set_text ( " " , - 1 )
self . oneParagraphBuffer . set_text ( " " , - 1 )
self . summaryBuffer . set_text ( " " , - 1 )
self . notesBuffer . set_text ( " " , - 1 )
2021-12-26 08:51:39 +13:00
self . detailsStore . clear ( )
2023-02-03 14:00:18 +13:00
def _characterSelectionChanged ( self , selection : Gtk . TreeSelection ) :
2021-05-18 09:59:12 +12:00
model , tree_iter = selection . get_selected ( )
if tree_iter is None :
self . unloadCharacterData ( )
return
for other in self . characterSelections :
if other != selection :
other . unselect_all ( )
character = self . characters . getByID ( model [ tree_iter ] [ 0 ] )
if character is None :
self . unloadCharacterData ( )
else :
self . loadCharacterData ( character )
2023-02-03 14:00:18 +13:00
def _addCharacterClicked ( self , button : Gtk . Button ) :
2022-10-30 05:42:55 +13:00
name = invalidString ( self . filterCharactersBuffer . get_text ( ) )
character = self . characters . add ( name )
2022-10-21 12:31:16 +13:00
if character is None :
return
2022-10-30 05:42:55 +13:00
if self . character is not None :
character . importance = self . character . importance
2022-10-21 12:31:16 +13:00
self . refreshCharacterStore ( )
2023-02-03 14:00:18 +13:00
def _removeCharacterClicked ( self , button : Gtk . Button ) :
2022-10-21 12:31:16 +13:00
if self . character is None :
return
self . character . remove ( )
self . refreshCharacterStore ( )
2023-02-03 14:00:18 +13:00
def _filterCharacters ( self , model , iterator , userdata ) :
name = validString ( model [ iterator ] [ 1 ] )
2022-10-30 05:42:55 +13:00
text = validString ( self . filterCharactersBuffer . get_text ( ) )
2022-10-21 12:51:06 +13:00
2022-10-30 05:42:55 +13:00
return text . lower ( ) in name . lower ( )
2022-10-21 12:51:06 +13:00
2023-02-03 14:00:18 +13:00
def __filterCharactersChanged ( self , buffer : Gtk . EntryBuffer ) :
2022-10-21 12:51:06 +13:00
self . filteredCharactersStore . refilter ( )
2022-10-21 12:31:16 +13:00
2023-02-03 14:00:18 +13:00
def _filterCharactersDeletedText ( self , buffer : Gtk . EntryBuffer , position : int , n_chars : int ) :
self . __filterCharactersChanged ( buffer )
2022-10-21 12:31:16 +13:00
2023-02-03 14:00:18 +13:00
def _filterCharactersInsertedText ( self , buffer : Gtk . EntryBuffer , position : int , chars : str , n_chars : int ) :
self . __filterCharactersChanged ( buffer )
2022-10-21 12:31:16 +13:00
2023-02-03 14:00:18 +13:00
def _colorSet ( self , button : Gtk . ColorButton ) :
2021-05-18 09:59:12 +12:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
color = button . get_rgba ( )
2021-05-18 09:59:12 +12:00
red = int ( color . red * 255 )
green = int ( color . green * 255 )
blue = int ( color . blue * 255 )
2021-12-26 10:45:09 +13:00
color = Color ( red , green , blue )
self . character . color = color
character_id = self . character . UID . value
for row in self . charactersStore :
if row [ 0 ] == character_id :
row [ 2 ] = pixbufFromColor ( color )
break
2021-05-17 10:20:48 +12:00
2023-02-03 14:00:18 +13:00
def _importanceChanged ( self , combo : Gtk . ComboBox ) :
2021-12-26 05:45:42 +13:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
tree_iter = combo . get_active_iter ( )
if tree_iter is None :
return
model = combo . get_model ( )
2021-12-26 05:45:42 +13:00
value = model [ tree_iter ] [ 1 ]
2021-05-17 10:20:48 +12:00
2021-12-26 08:07:14 +13:00
importance = Importance . fromValue ( value )
if ( importance is None ) or ( self . character . importance == importance ) :
return
self . character . importance = importance
character_id = self . character . UID . value
for row in self . charactersStore :
if row [ 0 ] == character_id :
row [ 3 ] = Importance . asValue ( importance )
break
self . mainCharactersStore . refilter ( )
self . secondaryCharactersStore . refilter ( )
self . minorCharactersStore . refilter ( )
selection = self . characterSelections [ importance . value ]
tree_view = selection . get_tree_view ( )
model = tree_view . get_model ( )
for row in model :
if row [ 0 ] == character_id :
selection . select_iter ( row . iter )
break
2021-05-17 10:20:48 +12:00
2023-02-03 14:00:18 +13:00
def _allowPOVToggled ( self , button : Gtk . ToggleButton ) :
2021-05-18 09:59:12 +12:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
2021-05-18 09:59:12 +12:00
self . character . POV = button . get_active ( )
2021-05-17 10:20:48 +12:00
2023-02-03 14:00:18 +13:00
def _addDetailsClicked ( self , button : Gtk . Button ) :
2021-12-26 08:51:39 +13:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
tree_iter = self . detailsStore . append ( )
if tree_iter is None :
return
2023-01-11 01:39:27 +13:00
name = unique_name_checker . get_unique_name_for_dictionary ( self . character . details , " Description " )
2021-12-26 08:51:39 +13:00
value = " Value "
self . detailsStore . set_value ( tree_iter , 0 , name )
self . detailsStore . set_value ( tree_iter , 1 , value )
self . character . details [ name ] = value
2021-05-17 10:20:48 +12:00
2023-02-03 14:00:18 +13:00
def _removeDetailsClicked ( self , button : Gtk . Button ) :
2021-12-26 08:51:39 +13:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
model , tree_iter = self . detailsSelection . get_selected ( )
if ( model is None ) or ( tree_iter is None ) :
return
2021-12-26 08:51:39 +13:00
name = model . get_value ( tree_iter , 0 )
2021-05-17 10:20:48 +12:00
model . remove ( tree_iter )
2021-12-26 08:51:39 +13:00
self . character . details . pop ( name )
2023-02-05 07:11:28 +13:00
def _updateCharecterDetailsMenu ( self ) :
def clear_container ( container ) :
data = container . get_children ( )
for d in data :
container . remove ( d )
clear_container ( self . charecterDetailsMenuAppendBox )
clear_container ( self . charecterDetailsMenuTemplateBox )
2023-08-04 09:41:52 +12:00
for template_name in self . characterTemplates . templates :
button = Gtk . Button ( label = template_name ) # TODO: turn into ModelButton
button . connect ( " clicked " , self . _appendTemplateClicked , template_name )
2023-02-05 07:11:28 +13:00
self . charecterDetailsMenuAppendBox . add ( button )
# Now we do the buttons for charecterDetailsMenuTemplateBox
2023-03-17 08:04:08 +13:00
box = Gtk . Box ( )
2023-08-04 09:41:52 +12:00
label = Gtk . Label ( label = template_name )
2023-04-02 02:36:42 +12:00
overwrite_button = Gtk . Button ( )
2023-08-04 09:41:52 +12:00
overwrite_button . add ( Gtk . Image ( icon_name = ' emblem-synchronizing-symbolic ' ) )
overwrite_button . connect ( " clicked " , self . _updateTemplateClicked , template_name )
2023-04-02 02:36:42 +12:00
overwrite_button . set_tooltip_markup ( ' Overwrite template with text of current file ' ) # TODO: This might be an issue when it comes to translating
delete_button = Gtk . Button ( )
2023-08-04 09:41:52 +12:00
delete_button . add ( Gtk . Image ( icon_name = ' list-remove-symbolic ' ) )
2023-04-02 02:36:42 +12:00
delete_button . set_tooltip_markup ( ' Delete ' ) # TODO: This might be an issue when it comes to translating
2023-08-04 09:41:52 +12:00
delete_button . connect ( " clicked " , self . _deleteTemplateClicked , template_name )
box . pack_end ( delete_button , False , False , 0 )
box . pack_end ( overwrite_button , False , False , 0 )
box . pack_start ( label , True , False , 0 )
2023-04-02 02:36:42 +12:00
self . charecterDetailsMenuTemplateBox . add ( box )
2023-02-05 07:11:28 +13:00
self . charecterDetailsMenuAppendBox . show_all ( )
self . charecterDetailsMenuTemplateBox . show_all ( )
2023-03-17 08:04:08 +13:00
2023-02-05 07:11:28 +13:00
def _onCharecterDetailsMenuClicked ( self , button : Gtk . MenuButton ) :
self . _updateCharecterDetailsMenu ( )
2023-08-04 09:41:52 +12:00
def _updateTemplateClicked ( self , button : Gtk . ModelButton , template_name ) :
2023-02-05 07:11:28 +13:00
if self . character is None :
return
2023-08-04 09:41:52 +12:00
self . characterTemplates . templates [ template_name ] = self . character . details # TODO: Add A warning? Or should there be undo/ redo when revisions are written.
2021-12-26 08:51:39 +13:00
2023-08-04 09:41:52 +12:00
def _deleteTemplateClicked ( self , button : Gtk . ModelButton , template_name ) :
del self . characterTemplates . templates [ template_name ]
2023-03-17 08:04:08 +13:00
self . _updateCharecterDetailsMenu ( )
2023-08-04 09:41:52 +12:00
def _appendTemplateClicked ( self , button : Gtk . ModelButton , template_name ) :
2023-01-11 01:39:27 +13:00
if self . character is None :
return
2023-08-04 09:41:52 +12:00
self . character . details . update ( self . characterTemplates . templates [ template_name ] )
2023-01-11 01:39:27 +13:00
2023-02-05 07:11:28 +13:00
# We have to reload the character
2023-01-11 01:39:27 +13:00
self . loadCharacterData ( self . character )
2021-12-26 08:51:39 +13:00
2023-02-05 07:11:28 +13:00
def _onNewTemplateButtonClicked ( self , button : Gtk . Button ) :
text = self . newTemplateEntryBuffer . get_text ( )
if text == " " :
return
if text in self . characterTemplates . templates :
new_text = unique_name_checker . get_unique_name_for_dictionary ( self . characterTemplates . templates , text )
self . newTemplateEntryBuffer . set_text ( new_text , - 1 ) # TODO: Add a warning
return
else :
self . characterTemplates . templates [ text ] = self . character . details
self . _updateCharecterDetailsMenu ( )
2023-02-03 14:00:18 +13:00
def _detailsNameEdited ( self , renderer : Gtk . CellRendererText , path : str , text : str ) :
2021-12-26 08:51:39 +13:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
model , tree_iter = self . detailsSelection . get_selected ( )
if ( model is None ) or ( tree_iter is None ) :
return
2023-01-11 01:39:27 +13:00
text_to_set = unique_name_checker . get_unique_name_for_dictionary ( self . character . details , text )
2021-12-26 08:51:39 +13:00
name = model . get_value ( tree_iter , 0 )
2023-01-11 01:39:27 +13:00
model . set_value ( tree_iter , 0 , text_to_set )
2021-05-17 10:20:48 +12:00
2023-01-11 01:39:27 +13:00
self . character . details [ text_to_set ] = self . character . details . pop ( name )
2021-12-26 08:51:39 +13:00
2023-02-03 14:00:18 +13:00
def _detailsValueEdited ( self , renderer : Gtk . CellRendererText , path : str , text : str ) :
2021-12-26 08:51:39 +13:00
if self . character is None :
return
2021-05-17 10:20:48 +12:00
model , tree_iter = self . detailsSelection . get_selected ( )
if ( model is None ) or ( tree_iter is None ) :
return
2021-12-26 08:51:39 +13:00
name = model . get_value ( tree_iter , 0 )
2021-05-17 10:20:48 +12:00
model . set_value ( tree_iter , 1 , text )
2021-12-26 08:51:39 +13:00
self . character . details [ name ] = text
2023-02-03 14:00:18 +13:00
def __nameChanged ( self , buffer : Gtk . EntryBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
text = buffer . get_text ( )
name = invalidString ( text )
self . character . name = name
character_id = self . character . UID . value
for row in self . charactersStore :
if row [ 0 ] == character_id :
row [ 1 ] = validString ( name )
break
2023-02-03 14:00:18 +13:00
def _nameDeletedText ( self , buffer : Gtk . EntryBuffer , position : int , n_chars : int ) :
self . __nameChanged ( buffer )
2021-12-26 10:45:09 +13:00
2023-02-03 14:00:18 +13:00
def _nameInsertedText ( self , buffer : Gtk . EntryBuffer , position : int , chars : str , n_chars : int ) :
self . __nameChanged ( buffer )
2021-12-26 10:45:09 +13:00
2023-02-03 14:00:18 +13:00
def _motivationChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . motivation = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _goalChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . goal = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _conflictChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . conflict = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _epiphanyChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . epiphany = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _oneSentenceChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . summarySentence = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _oneParagraphChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . summaryParagraph = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _summaryChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . summaryFull = invalidString ( text )
2023-02-03 14:00:18 +13:00
def _notesChanged ( self , buffer : Gtk . TextBuffer ) :
2021-12-26 10:45:09 +13:00
if self . character is None :
return
start_iter = buffer . get_start_iter ( )
end_iter = buffer . get_end_iter ( )
text = buffer . get_text ( start_iter , end_iter , False )
self . character . notes = invalidString ( text )
2021-05-17 06:23:10 +12:00
def show ( self ) :
self . widget . show_all ( )
2023-02-05 07:11:28 +13:00