ich bin dabei, ein brainstormin-tool zu programmieren. an sich soll es was simples sein, es funktioniert folgendermaßen:
man hat eine virtuelle arbeitsfläche, auf der man notizzettel verteilen kann. diese 'zettel' soll man dann per linien verbinden können, sodass z.b. abhängigkeiten visualisiert werden können.
ich bin komplett auf linux umgestiegen, darum programmiere ich das ganze mithilfe von gtk+
mein system sieht bis jetzt folgendermaßen aus:
ich habe zunächst das hauptfenster.
darin befindet sich ein vbox-objekt, das wiederrum a) die menuleiste und
b) ein scrolled window enthält. letzteres ist der beginn der eigentlichen arbeitsfläche, ich möchte sie schließlich scrollbar gestalten.
die arbeitsfläche an sich ist dann ein weiteres objekt, ein layout, das ich per
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), g_noteContainer);
in das scrolled window eingefügt habe.
soweit so gut, das klappt alles.
jetzt sind also die notizzettel dran. ich dachte mir es wäre schön, wenn diese zettel in ihrer größe flexibel wären, das legt ein window nahe. als kind dieses windows würde ich ein simplex text objekt einsetzen und schon hätte ich den zettel. eine testfunktion sieht so aus:
void AddNote()
{
GtkWidget *newWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *newNote = gtk_text_new(NULL, NULL);
gtk_text_set_editable(newNote, TRUE);
gtk_text_set_line_wrap(newNote, TRUE);
gtk_container_add(GTK_WINDOW(newWindow), newNote);
gtk_layout_put(GTK_LAYOUT(g_noteContainer), GTK_WIDGET(newWindow), 10, 10);
gtk_window_resize(GTK_WINDOW(newWindow), 300, 200);
gtk_widget_show_all(newWindow);
}
g_noteContainer ist hierbei das layout-objekt
und hier kommt endlich mein problem (ich hoffe die programmstruktur wurde mittlerweile klar): die ganze aktion compiliert, aber wenn ich das programm laufen lassen will spuckt die konsole folgende fehler aus:
(nodenotes:8592): Gtk-CRITICAL **: file ../../gtk/gtkwidget.c: line 3818 (gtk_widget_set_parent): assertion `!GTK_WIDGET_TOPLEVEL (widget)' failed
Gtk-ERROR **: file ../../gtk/gtkcontainer.c: line 2386 (gtk_container_propagate_expose): assertion failed: (child->parent == GTK_WIDGET (container))
aborting...
der fehler kommt nicht, wenn ich das textobjekt direkt in das layout einfüge, aber dann habe ich ja kein fenster mehr als zettel, sondern nurnoch das textfeld -> verscheiben + größe ändern ist blöd....
habt ihr ne idee?
man hat eine virtuelle arbeitsfläche, auf der man notizzettel verteilen kann. diese 'zettel' soll man dann per linien verbinden können, sodass z.b. abhängigkeiten visualisiert werden können.
ich bin komplett auf linux umgestiegen, darum programmiere ich das ganze mithilfe von gtk+
mein system sieht bis jetzt folgendermaßen aus:
ich habe zunächst das hauptfenster.
darin befindet sich ein vbox-objekt, das wiederrum a) die menuleiste und
b) ein scrolled window enthält. letzteres ist der beginn der eigentlichen arbeitsfläche, ich möchte sie schließlich scrollbar gestalten.
die arbeitsfläche an sich ist dann ein weiteres objekt, ein layout, das ich per
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled_window), g_noteContainer);
in das scrolled window eingefügt habe.
soweit so gut, das klappt alles.
jetzt sind also die notizzettel dran. ich dachte mir es wäre schön, wenn diese zettel in ihrer größe flexibel wären, das legt ein window nahe. als kind dieses windows würde ich ein simplex text objekt einsetzen und schon hätte ich den zettel. eine testfunktion sieht so aus:
void AddNote()
{
GtkWidget *newWindow = gtk_window_new(GTK_WINDOW_TOPLEVEL);
GtkWidget *newNote = gtk_text_new(NULL, NULL);
gtk_text_set_editable(newNote, TRUE);
gtk_text_set_line_wrap(newNote, TRUE);
gtk_container_add(GTK_WINDOW(newWindow), newNote);
gtk_layout_put(GTK_LAYOUT(g_noteContainer), GTK_WIDGET(newWindow), 10, 10);
gtk_window_resize(GTK_WINDOW(newWindow), 300, 200);
gtk_widget_show_all(newWindow);
}
g_noteContainer ist hierbei das layout-objekt
und hier kommt endlich mein problem (ich hoffe die programmstruktur wurde mittlerweile klar): die ganze aktion compiliert, aber wenn ich das programm laufen lassen will spuckt die konsole folgende fehler aus:
(nodenotes:8592): Gtk-CRITICAL **: file ../../gtk/gtkwidget.c: line 3818 (gtk_widget_set_parent): assertion `!GTK_WIDGET_TOPLEVEL (widget)' failed
Gtk-ERROR **: file ../../gtk/gtkcontainer.c: line 2386 (gtk_container_propagate_expose): assertion failed: (child->parent == GTK_WIDGET (container))
aborting...
der fehler kommt nicht, wenn ich das textobjekt direkt in das layout einfüge, aber dann habe ich ja kein fenster mehr als zettel, sondern nurnoch das textfeld -> verscheiben + größe ändern ist blöd....
habt ihr ne idee?