[Erledigt] [C] [GTK] Tastenkombinationen + Benutzung von 'static'



  • Hi !

    Ich programmiere schon seit laengerer Zeit in C, vorher Python, und stufe mich als 'fortgeschrittener' Programmierer ein. Doch bisher habe ich nur per Terminal mit z.B. der MySQL-API gearbeitet. Weil mich jedoch die GUI-Programmierung interessiert hat und ich auch ein Projekt schon vor Augen habe, habe mich in letzter Zeit mit GTK (1.2) auseinandergesetzt und habe deshalb u.a. das Tutorial auf der offiziellen HP gemacht.

    Um fuer ein groesseres GUI-Projekt, das ich bald beginnen werde, zu ueben, habe ich mir vorgenommen, einen kleinen Editor mit Tabs zu coden. Nun jedoch meine erste Frage:

    1. Ich wuerde gerne mit der Tastenkombination 'STRG + O' ein Event verbinden. Was waere die beste Moeglichkeit, dieses zu realisieren ?

    Das Event waere in diesem Fall das oeffnen einer neuen Datei.

    Ich habe es bereits per 'key_press_event' als Event versucht, jedoch liefert das nur jeweils 1 Key, und die Zeit dazwischen zu messen, und den Key davor in eine globale Variable zu schreiben halte ich fuer etwas zu umstaendlich, um nur 'STRG + O' herauszubekommen.

    ---

    Jetzt aber noch eine andere Sache, die mich beschaeftigt:
    Ich habe in mehreren SourceCodes, sowohl in den GTK-Tuturials als auch in bekannten Programmen wie 'GAIM' und 'XCHAT' des oefteren jetzt einen Mix aus 'static' Callbacks und nicht-'static' Callbacks gesehen. In allen meinen Tests hats bisher auch immer ohne 'static' funktioniert, und ich wuesste auch nicht, wozu das static gut waere. Deshalb
    2. Wann verwendet man bei Callbacks das 'static' Keyword und warum ?

    In dem Zusammenhang ist mir eh schleierhaft, warum man eine Funktion 'static' machen sollte 😉

    Danke fuer euere Antworten,

    Mfg,

    Kolazomai



  • Hallo,

    Kolazomai schrieb:

    habe mich in letzter Zeit mit GTK (1.2) auseinandergesetzt

    hat es einen bestimmten Grund, dass du auf 'ner uralten Version rumgurkst? Wir sind schon bei 2.12.x

    1. Ich wuerde gerne mit der Tastenkombination 'STRG + O' ein Event verbinden. Was waere die beste Moeglichkeit, dieses zu realisieren ?

    Füge deiner Applikation ein Menü (Datei, Bearbeiten ...) hinzu. Diesem Menü fügst du irgendwo das Menuitem 'Öffnen' hinzu, welchem du wiederum den Shortcut Strg+O verpasst.
    Menü-Beispiele gibt's hier: http://www.gtk.org/tutorial/c1501.html

    Ich habe es bereits per 'key_press_event' als Event versucht, jedoch liefert das nur jeweils 1 Key, und die Zeit dazwischen zu messen, und den Key davor in eine globale Variable zu schreiben halte ich fuer etwas zu umstaendlich, um nur 'STRG + O' herauszubekommen.

    Es wäre möglich, da das GdkEventKey auch ein Member state hat, welches anzeigt, ob z.B. gerade Shift, Strg oder Alt gedrückt wurde. Allerdings ist der Ansatz nicht so superb.

    Jetzt aber noch eine andere Sache, die mich beschaeftigt:
    Ich habe in mehreren SourceCodes, sowohl in den GTK-Tuturials als auch in bekannten Programmen wie 'GAIM' und 'XCHAT' des oefteren jetzt einen Mix aus 'static' Callbacks und nicht-'static' Callbacks gesehen. In allen meinen Tests hats bisher auch immer ohne 'static' funktioniert, und ich wuesste auch nicht, wozu das static gut waere.

    Öhm, static bei Funktionen stellt sicher, dass es die Funktion nur ein mal gibt und somit keine Konflikte zwischen den Übersetzungseinheiten auftreten können.

    Kommt auf deinen Programmierstil an, ob du's brauchst, oder nicht. Dies ist im Übrigen eine Frage, die man eher im C Forum stellt, da sie nicht direkt mit GTK+ zusammenhängt 😉

    MfG

    GPC



  • Hi!

    Zuerst einmal vielen Dankefuer deine Antwort.

    hat es einen bestimmten Grund, dass du auf 'ner uralten Version rumgurkst? Wir sind schon bei 2.12.x

    Das hat den Grund, dass mich bei GTK-2.x einige Sachen abschrecken, z.B. dass
    1. nicht alle API-Cmds mit dem 'gtk_'-Prefix beginnen ...
    2. es kein normales TextFenster gibt (?), bzw. ich bisher keins entdeckt habe ...
    3. Ich gegenueber der Version1.2 bisher keine deutlichen Unterschiede im Ergebnis habe feststellen koennen, und an sich auch keine 'Vorteile', ausser dass es 'neuer' ist, und oefter als GTK1.2 benutzt wird.

    Ueber Aufklaerung wuerde ich mich freuen und dann auch bereit sein, noch schnell auf GTK2.x rueberzuhuschen 😉

    Füge deiner Applikation ein Menü (Datei, Bearbeiten ...) hinzu. Diesem Menü fügst du irgendwo das Menuitem 'Öffnen' hinzu, welchem du wiederum den Shortcut Strg+O verpasst.
    Menü-Beispiele gibt's hier: http://www.gtk.org/tutorial/c1501.html

    Danke, das hat meine Frage beantwortet. Es geht also nicht 'direkt', sondern 'indirekt' ueber ItemFactories.

    Kommt auf deinen Programmierstil an, ob du's brauchst, oder nicht. Dies ist im Übrigen eine Frage, die man eher im C Forum stellt, da sie nicht direkt mit GTK+ zusammenhängt 😉

    Also hat es eher eine 'formale' Bedeutung, um noch einmal die 'Globalitaet' der Variable / der Funktion zu demonstrieren, und keinen tieferen Sinn 😃

    Nochmals Danke fuer deine Antwort.

    Mfg,

    Kolazomai



  • Kolazomai schrieb:

    hat es einen bestimmten Grund, dass du auf 'ner uralten Version rumgurkst? Wir sind schon bei 2.12.x

    Das hat den Grund, dass mich bei GTK-2.x einige Sachen abschrecken, z.B. dass
    1. nicht alle API-Cmds mit dem 'gtk_'-Prefix beginnen ...

    hm, wusste ich nicht. Ich programmiere normal gtkmm und mache daher selten was in GTK+, sodass mir das nicht aufgefallen ist.

    2. es kein normales TextFenster gibt (?), bzw. ich bisher keins entdeckt habe ...

    GtkTextBuffer ?

    3. Ich gegenueber der Version1.2 bisher keine deutlichen Unterschiede im Ergebnis habe feststellen koennen, und an sich auch keine 'Vorteile', ausser dass es 'neuer' ist, und oefter als GTK1.2 benutzt wird.

    Na ja, Geschwindigkeit und Stabilität sind besser und die Funktionalität wurde erweitert. Für mich sind das Gründe, die neue Version zu nutzen.

    Ueber Aufklaerung wuerde ich mich freuen und dann auch bereit sein, noch schnell auf GTK2.x rueberzuhuschen 😉

    Ich empfehle dir den Wechsel auf die aktuelle Version. Die brauchst du eh, sofern du mal C++ und gtkmm programmierst.

    MfG

    GPC



  • Hi,

    ich darf mich noch einmal bei dir bedanken 😃

    GtkTextBuffer ?

    Wie ich GTK1.2 und GTK2.0 verglichen habe, ist mir vor allem aufgefallen, dass es in dem GTK2.0-Tutorial keine Text-Section gibt. Als ich dann das TextView und TextBuffer im Gegensatz zu nur 'Text' entdeckt hab, ist mir etwas 'mulmig' geworden 😉
    Aber anscheinend hat diese Aufteilung doch einige Vorteile.

    Na ja, Geschwindigkeit und Stabilität sind besser und die Funktionalität wurde erweitert. Für mich sind das Gründe, die neue Version zu nutzen.
    [...]
    Ich empfehle dir den Wechsel auf die aktuelle Version. Die brauchst du eh, sofern du mal C++ und gtkmm programmierst.

    OK, du hast mich ueberzeugt 😃
    Es ist ja nie zu spaet 😉

    ---

    Damit waere das erledigt.
    Eine (offtopic) Frage haette ich aber noch:

    Das Projekt, das ich anstrebe, ist ziemlich umfangreich und gross. Es gibt sehr viele Funktionen, und ich wuerde gerne dann natuerlich auch meinen Source unter der GPL veroeffentlichen. Deshalb ists mir ein Anliegen, dass er 'well maintainable' ist. Ich hab mir dazu schon etliche 'Coding Standards' angeschaut und versucht anzueignen. Aber ein paar Fragen zu dem Management eines 'so' grossen Projekts bleiben offen. Zum Beispiel wuerde mich brennend interessieren, was die beste Moeglichkeit waere, meine Dateien aufzuteilen, ob ich mein Projekt vorher planen sollte, oder erst nach und nach aufeinander die Funktionen aufbauen lasse, und je nach Sachlage dann den Weg aendere, und so weiter ...
    Hat jemand Tipps, die mir helfen koennten ?

    Noch ein paar Infos:
    Das Programm wird zweigeteilt sein:
    1. Das (groessere) Nebenfenster, das nur auf Verlangen geoeffnet werden soll, wird 'Oberpunkte' und 'Unterpunkte' haben, die ich voraussichtlich jeweils mit Tabs ( NoteBooks ) aufteilen werde. Ich habe mir ueberlegt, dass die jeweiligen NoteBooks in 'gui_<oberpunkt><unterpunkt>.c' schreibe und die Funktionen dazu in 'func<oberpunkt>_<unterpunkt>.c'.
    2. Ein kleineres Hauptfenster.

    Ich werde (sicher) SVN, C, GTK+ und GCC benutzen. Crossplatform sollte moeglich sein, tendiert aber eher in die *nix-Richtung ( bin selbst ein begeisterter Gentoo-ler 😉 )

    Ich wuerde mich ueber Vorschlaege, Ideen, Links, u.s.w. sehr freuen!

    Mfg,

    Kolazomai



  • Kolazomai schrieb:

    Wie ich GTK1.2 und GTK2.0 verglichen habe, ist mir vor allem aufgefallen, dass es in dem GTK2.0-Tutorial keine Text-Section gibt. Als ich dann das TextView und TextBuffer im Gegensatz zu nur 'Text' entdeckt hab, ist mir etwas 'mulmig' geworden 😉
    Aber anscheinend hat diese Aufteilung doch einige Vorteile.

    Halt halt halt: GtkTextBuffer beinhaltet den eigentlichen Text. Ein GtkTextView verweist auf ein GtkTextBuffer und stellt somit nur dar (der geneigte Leser erkennt hier ein Design Pattern). Diese zwei Komponenten gehören zusammen!

    Ein simples Textfeld gibt's mit GtkEntry aber auch. Für alles andere ist GtkTextBuffer+GtkTextView zuständig.

    Zum Beispiel wuerde mich brennend interessieren, was die beste Moeglichkeit waere, meine Dateien aufzuteilen, ob ich mein Projekt vorher planen sollte,

    oh ja, das solltest du. Jedenfalls so gut es dir schon möglich ist. Ich z.B. fange (wenn möglich) meistens an, die Innerein zu coden und baue dann die Applikation stück für stück drauf auf (Bottom-up Prinzip).

    oder erst nach und nach aufeinander die Funktionen aufbauen lasse, und je nach Sachlage dann den Weg aendere, und so weiter ...

    Das führt meiner Erfahrung nach zu schlechterem Code und v.a. schwerer wartbarem Code.

    Ich habe mir ueberlegt, dass die jeweiligen NoteBooks in 'gui_<oberpunkt><unterpunkt>.c' schreibe und die Funktionen dazu in 'func<oberpunkt>_<unterpunkt>.c'.

    Puh, ob das notwendig ist, musst du selber wissen. Sofern die Aufteilungs sinnvoll ist, warum nicht.

    MfG

    GPC



  • Hi,

    Halt halt halt: GtkTextBuffer beinhaltet den eigentlichen Text. Ein GtkTextView verweist auf ein GtkTextBuffer und stellt somit nur dar (der geneigte Leser erkennt hier ein Design Pattern). Diese zwei Komponenten gehören zusammen!

    Ein simples Textfeld gibt's mit GtkEntry aber auch. Für alles andere ist GtkTextBuffer+GtkTextView zuständig.

    Ja, das habe ich gemeint. Dass das Textfeld nicht mehr nur ein Widget ist, sondern praktisch aus 2 Widgets besteht ( Dem TextBuffer und dem TextView ).

    oh ja, das solltest du. Jedenfalls so gut es dir schon möglich ist. Ich z.B. fange (wenn möglich) meistens an, die Innerein zu coden und baue dann die Applikation stück für stück drauf auf (Bottom-up Prinzip).

    Hm, ok, dann werd ich mal ein paar Tage mit der Planung des 'Cores' verwenden 🙂

    Naja, ich werd das schon schaffen 😉

    Danke, GPC, fuer deine ausfuehrlichen und sehr hilfreichen Antworten!

    ~ Added [Erledigt] - Prefix ~

    Mfg,

    Kolazomai


Anmelden zum Antworten