Gtk vbox + 2 TextView



  • Hallo,

    ein Problem
    ich habe eine vbos und dort 2 text views. verteilung hälfte hälfte vom platz her.
    ich will in die linke was reinschreiben.. wenn die zeile jetzt über den rand hinausgeht, stürzt mir das program ab. (ich habe eingestellt, dass die zeilen nicht umgebrochen werden).

    wieso ist das so, bzw. weiß wer ne lösung?
    in nem anderen programm mit nur einer textview, konnte ich die zeilen auch länger machen als die textview, das hat ohne probleme gefunzt.

    lg.



  • Hast du die TextViews auch in ScrolledWindows gepackt? Ansonsten klingt das aber merkwürdig. Kannst du den Quellcode posten, damit man das nachvollziehen und testen kann?



  • nein, habe sie nicht in scrolled windows gepackt, das scrollen nicht möglich sein soll. bzw. nur über eine message, sprich manuelles scrollen ja.
    das ging aber wie gesagt alles wenn es nur eine textview war.

    oder kann man bei scrolled window die scrollleisten ausblenden und scrollen sozusagen ausschalten?

    Quellcode posten is leider schlecht, weil der über meherere Sachen verteilt ist, udn glaub so schnell kriegt man keinen überblick darüber, wenn man nur einen teil sieht.



  • bzw doch teilweise möglich: so erstell ich das fenster

    cancelWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    
    cancelHbox = gtk_hbox_new(TRUE, 5);
    cancelTv1 = gtk_text_view_new();
    cancelTv2 = gtk_text_view_new();
    
    // settings for cwindow
    gtk_container_set_border_width (GTK_CONTAINER (cancelWindow), 5);
    
    // Sets that the window has no frame
    gtk_window_set_decorated (GTK_WINDOW (cancelWindow), false);
    
    gtk_window_set_type_hint(GTK_WINDOW(cancelWindow), GDK_WINDOW_TYPE_HINT_DIALOG);
    gtk_window_set_transient_for(GTK_WINDOW(cancelWindow), GTK_WINDOW(window));
    
    // settings for textviews
    gtk_text_view_set_editable(GTK_TEXT_VIEW(cancelTv1), false);
    gtk_text_view_set_editable(GTK_TEXT_VIEW(cancelTv2), false);
    gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(cancelTv1), false);
    gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(cancelTv2), false);
    
    // no wrapping of lines
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(cancelTv1), GTK_WRAP_NONE);
    gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(cancelTv2), GTK_WRAP_NONE);
    
    // put textviews in hbox
    gtk_container_add(GTK_CONTAINER(cancelHbox), cancelTv1);
    gtk_container_add(GTK_CONTAINER(cancelHbox), cancelTv2);
    
    // Pack the hbox in the main cancel viewer window
    gtk_container_add (GTK_CONTAINER (cancelWindow), cancelHbox);
    


  • Man kann die ScrolledWindows so konfigurieren, dass nur horizontales oder vertikales (oder gar kein) Scrolling möglich ist 😉
    Den Code schau ich mir am WE an, früher komm ich nicht dazu, sry.



  • danke schon mal für deinen hilfe.

    ich habs mittlerweile mit scrolled window probiert udn es geht... allerdings nur wenn ich die scroll balken eingeblendet lass..

    wenn ich die scroll balken über gtk_scrolled_window_set_policy(scrollwindow, GTK_POLICY_NEVER, GTK_POLICY_NEVER);

    dann werden die scrollbars zwar nicht angezeigt, allerdings sobald dann weider der text über den rand geht, stürzt das programm auch wieder ab.

    danke schon mal fürs anschauen 🙂



  • Also ich habe jetzt mal kurz folgenden Code zusammengehackt, damit wir eine gemeinsame Basis haben 😉

    #include <gtk/gtk.h>
    
    int main(int argc, char **argv) {
      gtk_init(&argc, &argv);
    
      GtkWidget *window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
      GtkWidget *hBox = gtk_hbox_new(TRUE, 5);
      GtkWidget *tv1 = gtk_text_view_new();
      GtkWidget *tv2 = gtk_text_view_new();
    
      gtk_container_set_border_width(GTK_CONTAINER(window), 5);
      //gtk_window_set_decorated(GTK_WINDOW(window), false);
    
      gtk_window_set_type_hint(GTK_WINDOW(window), GDK_WINDOW_TYPE_HINT_DIALOG);
      gtk_window_set_transient_for(GTK_WINDOW(window), GTK_WINDOW(window)); 
    
      //gtk_text_view_set_editable(GTK_TEXT_VIEW(tv1), false);
      //gtk_text_view_set_editable(GTK_TEXT_VIEW(tv2), false); 
      gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv1), GTK_WRAP_NONE);
      gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(tv2), GTK_WRAP_NONE);
    
      gtk_container_add(GTK_CONTAINER(hBox), tv1);
      gtk_container_add(GTK_CONTAINER(hBox), tv2);
    
      gtk_container_add(GTK_CONTAINER(window), hBox);
    
      gtk_window_resize(GTK_WINDOW(window), 500, 300);
      gtk_widget_show_all(window);
      gtk_main();
    
      return 0;
    }
    

    Tritt bei dem Code auch das Problem auf?



  • hallo,

    ich hab das problem, dass ich jetzt 2 wochen nicht mehr an den code komme. ich werds dann aber ausprobieren und was dazu schreiben. hoff mal du hilfst mir danach auch noch 🙂

    danke auf alle fälle schon mal



  • Jo, kein Ding. Meldest dich dann einfach nochmal.



  • so wieder anwesend.
    habe deinen code angewendet.
    er zeigt das fenster jetzt schon an (fehler ist noch, dass das window noch decorated ist, aber ok, das ist ja kein thema).
    nur wenn ich dann was anzeigen möchte, hängt sich das programm auf, also dieses mal wird nicht mal text angezeigt.



  • xy schrieb:

    so wieder anwesend.
    habe deinen code angewendet.
    er zeigt das fenster jetzt schon an (fehler ist noch, dass das window noch decorated ist, aber ok, das ist ja kein thema).
    nur wenn ich dann was anzeigen möchte, hängt sich das programm auf, also dieses mal wird nicht mal text angezeigt.

    Poste mal meinen Code inklusive der Veränderungen von dir, die dann zum Absturz führen.



  • puh,
    alos kann wirklich nur nen teil posten, da alles viel zu viel wäre:

    // GUARDIAN CANCEL VIEWER
    	cancelWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    	// true: all widgets in box have same size, with distance of 5 between the widgets
    	cancelHbox = gtk_hbox_new(TRUE, 5);
    	cancelTv1 = gtk_text_view_new();
    	cancelTv2 = gtk_text_view_new();
    
    	scrollwindow1 = gtk_scrolled_window_new(NULL, NULL);
    	scrollwindow2 = gtk_scrolled_window_new(NULL, NULL);
    	gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwindow1), GTK_POLICY_NEVER, GTK_POLICY_NEVER);
    
    	// settings for cwindow
    	gtk_container_set_border_width (GTK_CONTAINER (cancelWindow), 5);
    
    	// Sets that the window has no frame
    	gtk_window_set_decorated (GTK_WINDOW (cancelWindow), false);
    
    	gtk_window_set_type_hint(GTK_WINDOW(cancelWindow), GDK_WINDOW_TYPE_HINT_DIALOG);
    	gtk_window_set_transient_for(GTK_WINDOW(cancelWindow), GTK_WINDOW(window));
    
    	// settings for textviews
    	gtk_text_view_set_editable(GTK_TEXT_VIEW(cancelTv1), false);
    	gtk_text_view_set_editable(GTK_TEXT_VIEW(cancelTv2), false);
    	gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(cancelTv1), false);
    	gtk_text_view_set_cursor_visible(GTK_TEXT_VIEW(cancelTv2), false);
    
    	// no wrapping of lines
    	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(cancelTv1), GTK_WRAP_NONE);
    	gtk_text_view_set_wrap_mode(GTK_TEXT_VIEW(cancelTv2), GTK_WRAP_NONE);
    
    	// put textviews in hbox`
    	gtk_container_add(GTK_CONTAINER(scrollwindow1), cancelTv1);
    	gtk_container_add(GTK_CONTAINER(scrollwindow2), cancelTv2);
    	gtk_container_add(GTK_CONTAINER(cancelHbox), scrollwindow1);
    	gtk_container_add(GTK_CONTAINER(cancelHbox), scrollwindow2);
    
    	// Pack the hbox in the main cancel viewer window
    	gtk_container_add (GTK_CONTAINER (cancelWindow), cancelHbox);
    ***************************************************************
    // hierüber wird das file eingelesen udn zeilenweise mit der funktion die darunter steht, in text view geschrieben
    // wird zweimal aufgerufen, einmal für linke textview, andere mal für 2. textview
    	firstline = 1;
    	if (file.is_open())
    	{
    		while (! file.eof())
    		{
    
    			if (firstline != 1)
    			{
    				writeTextView(textview, "\n");
    			}
    
    			firstline++;
    
    			getline(file, line);
    			writeTextView(textview, line);
    		}
    		file.close();
    ***********************************************************
    
    void FtpDownload::writeTextView(GtkWidget* textview, string text)
    {
    	GtkTextBuffer* buffer;
    	GtkTextIter textiterend;
    
    	buffer = gtk_text_buffer_new(NULL);
    	// get text in textview
    	buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(textview));
    	// get mark with last text character and add new text there
    	gtk_text_buffer_get_end_iter(buffer, &textiterend);
    	gtk_text_buffer_insert(buffer, &textiterend, text.c_str(), -1);
    
    	//g_free(buffer);
    }
    

    problem ist, wenn der text über die größe der textview hinausgeht. dann stürzt mir das programm ab


Anmelden zum Antworten