IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GTK+ avec C & C++ Discussion :

textview et la gestion de la couleur


Sujet :

GTK+ avec C & C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2006
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 24
    Par défaut textview et la gestion de la couleur
    Bonjour je souhaiterai faire un petit editeur de texte basique en Gtk.
    Pour les styles (gras, italique et souligné) je n'ai pas trop de pb.
    Par contre pour la couleur je me suis plus torturé

    Voici mon programme (non terminé) il fonctionne mais la gestion de la couleur du texte ne me plait pas.
    Comment pourrais-je améliorer la gestion de la couleur du texte ?

    Merci d'avance


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    class Composer(object):
        def __init__(self):
    	self.builder = Gtk.Builder()
        	self.builder.add_from_file('/home/christophe/.poppy/ui/Composer.glade')
            self.builder.connect_signals(self)
    	self.dialog = self.builder.get_object('dialog1')
     
            self.textview = self.builder.get_object('textview')
    	self.textbuffer = self.textview.get_buffer()
     
            # Toggled Buttons
    	self.button_bold = self.builder.get_object('button_bold')
    	self.button_underline = self.builder.get_object('button_underline')
    	self.button_italic = self.builder.get_object('button_italic')
     
    	# Normal Buttons
    	self.button_color = self.builder.get_object('button_color')
     
            # Tags
    	b_tag = self.textbuffer.create_tag( "b", weight=pango.WEIGHT_BOLD)
    	i_tag = self.textbuffer.create_tag( "i", style=pango.STYLE_ITALIC)
    	u_tag = self.textbuffer.create_tag( "u", underline=pango.UNDERLINE_SINGLE)
     
            # Signals
            self.button_bold.connect("toggled", self.style_changed, b_tag)
            self.button_italic.connect("toggled", self.style_changed, i_tag)
            self.button_underline.connect("toggled", self.style_changed, u_tag)
    	self.button_color.connect("color_set", self.color_changed)
     
    	# Dict of attibutes in textview
    	self.styles = {}
     
        def style_changed(self, widget, tag):
    	start, end = self.get_selection()
    	if start == end:
    		return
     
    	if widget.get_active():
    		self.textbuffer.apply_tag(tag, start, end)
    	else:
    		self.textbuffer.remove_tag(tag, start, end)
     
        def color_changed(self, widget):
    	start, end = self.get_selection()
    	if start == end:
    		return
     
    	color = widget.get_color()
            tag_name = color.to_string()
     
    	# Remove obsolete Tags before applying new Tag.
    	tags = [tag for tag in start.get_tags() if tag == v['tag'] for k, v in self.styles.items() if v['type'] == "color"]
            for tag in tags:
                self.textbuffer.remove_tag(tag, start, end)
     
    	# Create or load existing Tag	
    	if tag_name in self.styles.keys():
    	    tag = self.styles[tag_name]['tag']
    	else:
    	    tag = self.textbuffer.create_tag(tag_name)
                tag.set_property('foreground-gdk', color)
                self.styles[tag_name] = {'tag': tag, 'type': 'color'}
     
    	self.textbuffer.apply_tag(tag, start, end)
     
        def get_selection(self):
            bounds = self.textbuffer.get_selection_bounds()
            if len(bounds) != 0:
                start, end = bounds
    	else:
     	    start = self.textbuffer.get_iter_at_mark(self.textbuffer.get_insert())
                end = self.textbuffer.get_iter_at_mark(self.textbuffer.get_insert())
    	    if not start.inside_word():
    		end = start
    	    else:	
    		if not start.starts_word():
    			start.backward_word_start()
    		if not end.ends_word():
    			end.forward_word_end()	
     
    	return start, end

  2. #2
    Inactif  

    Homme Profil pro
    développeur Vala
    Inscrit en
    Février 2011
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Cher (Centre)

    Informations professionnelles :
    Activité : développeur Vala
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 478
    Par défaut
    Bonsoir
    et le Gtk Sourceview ?
    comme je vois que tu développes en Python, regarde cette page : http://www.pygtk.org/pygtksourceview...ylescheme.html

Discussions similaires

  1. [CR XI] Graphique : gestion dynamique des couleurs ?
    Par kikidrome dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 17/06/2008, 11h45
  2. Gestion des 256 couleurs sans assembleur
    Par labgate dans le forum Pascal
    Réponses: 2
    Dernier message: 03/05/2008, 13h29
  3. Problème de gestion de la couleur de fond d'un pushbutton
    Par blanchonvincent dans le forum Interfaces Graphiques
    Réponses: 1
    Dernier message: 09/04/2007, 16h19
  4. Réponses: 7
    Dernier message: 27/08/2004, 14h25
  5. [Debutant] gestion des couleurs ??
    Par MaxiMax dans le forum OpenGL
    Réponses: 5
    Dernier message: 26/03/2004, 08h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo