entwurfsmuster: "lexi" implementieren



  • ich habe gerade "entwurfsmuster" von der gang of four zu ende gelesen und versuche jetzt den editor zu implementieren. klappt alles soweit. wie soll ich allerdings die windowimpl schreiben oder besser mit was? ich bin unter linux und habe gtk+ und gtkmm zur verfügung, aber anscheinend braucht man zur implementierung ja einfache rechtecke und so. das müsste ich dann mit gdk machen, aber das wäre ein riesen aufwand! oder sind grafische oberflächen immer so schwer zu schreiben?

    mfg koma_22



  • Hallo,

    wenn du ein Toolkit wie GTK+ oder gtkmm verwendest, brauchst du einige Entwurfsmuster gar nicht mehr anwenden, da das Toolkit das für dich erledigt. Mit den gtk Toolkits ist es ziemlich leicht, eine WYSIWYG Engine zu schreiben (ich hab's erst kürzlich gemacht^^), die sowohl formatierten Text als auch Bildchen usw. beinhalten kann. Leider gibt's kein Tut dazu, aber wenn du Fragen hast, immer her damit 😉

    Joah, also für deinen Editor brauchst du eigentlich nur die TextView Klassen (TextView, TextBuffer, TextMark, TextIter, TextTag). Damit kannst du schon so gut wie alle WYSIWYG-Anforderungen erschlagen.

    Wenn du eine Beispielimplementierung für die Undo-Geschichte brauchst, sag's.

    MfG

    GPC



  • GPC schrieb:

    Hallo,

    wenn du ein Toolkit wie GTK+ oder gtkmm verwendest, brauchst du einige Entwurfsmuster gar nicht mehr anwenden, da das Toolkit das für dich erledigt. Mit den gtk Toolkits ist es ziemlich leicht, eine WYSIWYG Engine zu schreiben (ich hab's erst kürzlich gemacht^^), die sowohl formatierten Text als auch Bildchen usw. beinhalten kann. Leider gibt's kein Tut dazu, aber wenn du Fragen hast, immer her damit 😉

    Joah, also für deinen Editor brauchst du eigentlich nur die TextView Klassen (TextView, TextBuffer, TextMark, TextIter, TextTag). Damit kannst du schon so gut wie alle WYSIWYG-Anforderungen erschlagen.

    Wenn du eine Beispielimplementierung für die Undo-Geschichte brauchst, sag's.

    MfG

    GPC

    hi!

    also dass ich da jetzt gar nicht erst irgendwelche rechtecke malen muss, hab ich jetzt kapiert. aber ich weiß nicht, wie das mit der eingabe und so laufen soll. das würde ja alles in einem Gtk::TextBuffer landen und dann hätte ich das ja alles doppelt, wenn ich dann noch Char-Glyphen verwenden würde. btw verwende ich noch immer das Brücken-Muster.

    mfg koma_22



  • Hallo,

    das mit der "Eingabe" erledigt im Prinzip auch schon Gtk::TextBuffer, denn es stellt dir Gtk::TextBuffer::Iterator zur Verfügung, um über die einzelnen Elemente zu iterieren. Also kein Stress für dich. Das gtkmm Toolkit (GTK+ auch) ist an dieser Stelle wirklich sehr komfortabel.

    MfG

    GPC



  • hm...

    anscheinend habe ich ein allgemeines verständnisproblem:
    ich habe jetzt fast 1:1 den kram aus dem buch implementiert, d.h. der text ist doppelt vorhanden, einmal in einem Gtk::TextBuffer und einer std::list.
    wenn ich jetzt weitere eingaben lesen möchte, müsste ich Gtk::Main::run(window) aufrufen. allerdings müsste ich dann auf eingaben reagieren, und könnte sozusagen nicht mehr selbst "bestimmen" wann eingaben stattfinden z.b. mit cin, also:

    konsole:
    Programmstart
    |
    |
    |
    getInput() -----> cin >> string;
    |
    |
    |
    Programm weiter
    
    gui:
    
    button1 gedrückt ----> function1()
    button2 gedrückt ----> function2()
    

    jetzt weiß ich nicht, wie ich das mit der brücke machen soll. ich könnte höchstens das ganze "umdrehen", sprich ein callbackinterface für verschiedene GUIs implementieren und dann den jedesmal den inhalt an die systemunabhängige implementierung schicken.
    alt:

    Application::run()
    {
         // ...
         getWindowImpl()->getInput();
         // ...
    }
    

    neu:

    virtual void GtkImpl::on_input() // oder on_button_clicked...
    {
         string str( makeStdString(refTextBuffer) );
         getSysIndependentImpl()->save(str);
    }
    

    es soll schließlich unabhängig von der gui sein.

    mfg koma_22



  • Möchtest du das MVC-Pattern implementieren? Wenn ja, dann musst du das so machen, sonst kannst du GTK direkt verwenden.
    Und die Stelle wo vorher cin steht wird einfach durch die event-loop ersetzt, dann rennt dein Programm immer in der Schleife bis ein event eintritt, z.B. Tastatureingaben.


Anmelden zum Antworten