gtk-problem

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?
 
hm offensichtlich kann mit dem problem keiner was anfangen, schade ;P
na, auch egal, ich hab es umgangen.
 
Du brauchst ein grosses TopLevel Widget in welchem du die kleinen Notizzettel ablegen kannst (als UnterWidgets sozusagen). Was du vorhast ist meines Wissens nicht möglich, da es lauter einzelne TopLevel Widgets sein müssen die du dann auf dem Desktop anordnen und verbinden kannst. Du müsstest nen eigenen Desktop coden der dann für die Notizzettel als TopLevel Widget fungiert.

Erzähl mal wie du es umgangen hast.
 
naja, ich hab mich entschlossen, doch direkt die text widgets zu benutzen. ich werde die dann per strg+links+ziehen bewegbar machen. ist irgendwie stylischer ;P
nur muss ich mir noch überlegen, ob ich die auch in der größe veränderlich mach. shift+links vielleicht? :)
 
so, nach langem hin und her und tests schreiben und googlen und wasweißich:
wie kann ich prüfen, ob die *linke* masutaste gedrückt wird?
der daten-pointer, der der callback bei button_pressed_event bzw button_released_event zugeschickt wird bleibt bei rechter und linker maustaste gleich, jedenfalls sieht das so aus. gibt es da ein anderes signal? ich kann nichts darüber finden irgendwie ?(
 
Zurück
Oben