So arbeite ich daran, einen mehr oder weniger festen GtkTextBuffer zu machen (und wenn es eine bessere Möglichkeit gibt, lass es mich wissen) und ich benutze Marken, um den Puffer in zu teilen "Einträge". Dann benutze ich diese Markierungen und lösche einen Abschnitt des Puffers vom Start-Iter zum Iter an der entsprechenden Markierung.Wie man Newline am Ende von GtkTextBuffer löscht
Das Problem mit all dem ist, dass es eine neue Zeile am Ende des Puffers verlässt, die ich nicht herausfinden kann, wie Sie löschen. Hat jemand Erfahrung damit oder Ideen zum Löschen der Newline?
Hier ist mein aktueller Code:
// markName is a c string and textBuffEntries is an int
// keeping track of how many entries there are in the buffer
snprintf(markName, 9, "%d", textBuffEntries);
if(allMarksPopulated) {
neo_debug(func_mask, "Deleting: %s", markName);
gtk_text_buffer_get_start_iter(buffer, &startIter);
gtk_text_buffer_get_iter_at_mark(buffer, &markIter,
gtk_text_buffer_get_mark(buffer, markName));
gtk_text_buffer_delete(buffer, &startIter, &markIter);
gtk_text_buffer_get_iter_at_line(buffer, &markIter, 1);
gtk_text_buffer_get_start_iter(buffer, &startIter);
gtk_text_buffer_delete(buffer, &startIter, &markIter);
}
neo_debug(func_mask, "textBuffEntries: %d", textBuffEntries);
// Now write the data to the buffer
gtk_text_buffer_get_end_iter(buffer, &endIter);
gtk_text_buffer_insert (buffer, &endIter,
msg_str.c_str(),
msg_str.length());
snprintf(markName, 9, "%d", textBuffEntries);
gtk_text_buffer_get_end_iter(buffer, &endIter),
gtk_text_buffer_create_mark(buffer, markName,
&endIter,
true);
msg_str = "\n";
gtk_text_buffer_get_end_iter(buffer, &endIter);
gtk_text_buffer_insert (buffer, &endIter,
msg_str.c_str(),
msg_str.length());
if(!allMarksPopulated && MAX_LINES == textBuffEntries)
{
allMarksPopulated = true;
}
if(MAX_LINES == textBuffEntries)
{
textBuffEntries = 0;
} else {
textBuffEntries++;
}
Was ist Ihr spezifischer Zweck? Es scheint, als gäbe es viel bessere Möglichkeiten, ein geteiltes eintragsbasiertes System anzuzeigen. – oldtechaa
Ziel des Systems ist die Anzeige von Textbenachrichtigungen für den Benutzer, Statusmeldungen, um den Benutzer auf dem Laufenden zu halten, was auf anderen Registerkarten im System passiert, und Ereignisse, die außerhalb der GUI auftreten. Das Ziel des eintragsbasierten Systems besteht darin, die Größe dieses Alarmprotokolls auf einer angemessenen Größe zu halten, da das System möglicherweise monatelang ausgeführt wird. – elsenor
Konnten Sie nicht etwas wie eine ListBox benutzen? – oldtechaa