Questa libreria semplifica l'interazione con le selezioni in un GTK+ Textiview tramite l'aggiunta di alcuni segnali.
Per usarla è sufficiente ereditare una classe: darà accesso ai segnali seguenti
- selection-toggle => textview,(bool)hasSelection
- selection-change => textview,startIter,endIter,direction (0 unmoved, 1 left to right, -1 right to left)
- selection-start => textview,startIter,endIter
- selection-end => textview,startIter,endIter
selection-toggle non dà sorprese: semplicemente notifica se del testo è stato selezionato o ha perso la selezione. Può essere emesso più volte durante una selezione (considerate il caso in cui venga effettuata una selezione col mouse muovendosi prima in una direzione e poi in quella opposta).
selection-start e selection-end vengono emessi una sola volta durante una selezione, quindi quando un tasto del mouse viene premuto o rilasciato (ed è coinvolta una selezione) oppure ogni qual volta la selezione è modificata tramite uso della tastiera.
selection-change viene emesso ad ogni modifica della selezione col mouse, senza attendere il rilascio del tasto, od ogni volta che la selezione è modificata tramite tastiera. Questo segnale verrà emesso sempre tra un selection-start ed un selection-end.
startIter e endIter sono GtkTextIter o None.
È ereditato anche un metodo selecting(): esso ritorna un valore booleano per indicare che è in atto una selezione. Può tornare utile in caso dobbiate monitare una cosa del genere.
Segue un semplice esempio:
try: from gi.repository import Gtk as gtk
except ImportError: import gtk
from easy_selection_textview import EasySelectionTextview
class TestTextview(EasySelectionTextview):
def __init__(self):
super(TestTextview,self).__init__()
self.connect('selection-change',self.on_selection_changed)
def on_selection_changed(self,textview,startIter,endIter,direction):
print('Selection has changed!')
if startIter:
print('now is %s\n' % textview.get_buffer().get_text(startIter,endIter,False))
dialog = gtk.Dialog()
dialog.vbox.pack_start(TestTextview(),True,True,0)
dialog.show_all()
dialog.run()
Potete anche avviare il file principale (easy_selection_textview.py), farà partire un esempio ancora più interessante in cui viene monitorata qualunque attività sulle selezioni.
Supporta sia GTK+ 2.x sia GTK+ 3.x (utilizzando pygtk oppure pygobject) e python 2.5 o superiore.
A meno che abbia idee brillanti, questa librerià è considerata conclusa, quindi riceverà solo bugfix (speriamo nessuno).
Download
Il repository git è disponibile a https://github.com/riquito/EasySelectionTextview
Licenza
EasySelectionTextview è rilasciato sotto licenza GPLv3 (vedi file LICENSE)