2017-10-06 17 views
0

Peut-être que c'est un peu trop large ou vague d'une question.Comment faire gras, italique, Souligner les boutons dans Gtk # aka Comment formater dynamiquement du texte dans gtk

Je ne trouve rien qui ait du sens pour moi en ligne, je travaille avec Gtk2.0 et C#, et chaque référence sur la façon de le faire en ligne, soit dans une langue différente et semble être une liste des noms de fonctions, ou a seulement des exemples de texte de mise en forme dans une vue de texte tout en générant le texte à partir du code (par exemple, faites une phrase "Hello World" puis faites le salut gras Il semble que personne ne parle de comment faire, et il semble un peu assez fondamental de la fonctionnalité

il est parfaitement facile de faire un texte en gras, par exemple:.

protected void Command_bold(object sender, EventArgs e) 
{ 
    if (selectedTextView.Buffer.GetSelectionBounds(out A, out B)) 
    { 
     selectedTextView.Buffer.ApplyTag("bold", A, B); 
    } 
} 

Mais, quand je déclenche cette fonction avec un bouton, il ne fait que mettre les choses en gras (ou en italique ... etc). La fonctionnalité normale d'un bouton en gras rendra toute la sélection en gras si une partie ou la totalité de la sélection est déjà en gras, ou si tout n'est pas en gras si tout est en gras. Alors, comment pouvez-vous détecter dans un objet Gtk TextView, si votre texte est déjà en gras ou non?

Répondre

0

Ok, donc je l'ai compris. Plus ou moins. La logique ci-dessous est défectueuse mais c'est un moyen de détecter les balises et de contrôler la logique d'un bouton en gras:

protected void Action_Bold(object sender, EventArgs e) 
{ 
    TextIter iA, A, B; 
    bool isBold = false; 
    if (selectedTextView.Buffer.GetSelectionBounds(out A, out B)) 
    { 
     iA = A; 
     while (iA.Compare(B) < 0) 
     { 
      foreach (TextTag tag in A.Tags) 
      { 
       if (tag.Name == "bold") isBold = true; 
      } 

      iA.ForwardChar(); 

     } 

     if (isBold == true) 
     { 
      selectedTextView.Buffer.RemoveTag("bold", A, B); 
     } 
     else 
     { 
      selectedTextView.Buffer.ApplyTag("bold", A, B); 
     } 
    } 
}