View previous topic :: View next topic |
Author |
Message |
bravewic n00b

Joined: 03 Apr 2005 Posts: 4
|
Posted: Sun Apr 03, 2005 5:50 pm Post subject: A question about GTK ( GIMP Toolkit) |
|
|
Geia sas eimai arxarios se GUI kai mathainw to GTK. Tha ithela na sas kanw mia erwtisi sxetika me to GTK.
Ftiaxnw ena programmataki kai tha tha ithela na me voithisete. Mesa stin main dimioyrgw ena kainoyrgio parathiro ena vbox kai mesa se ayto vazw ena widget text editable ena allo oxi editable kai ena koympaki . O xristis tha prepei na eisagei stoixeia sto prwto text widget kai patwntas to koympi to programma na ta epeksergazetai kai na vgazei kapoio apotelesma sto katw text widget opote
exw ta eksis g_signal_connect(G_OBJECT(button),"clicked",G_CALLBACK(calculation),(gpointer) 1st_textwidget) ;
to apotelesma apothikeyetai se ena struct stin sinartisi calculation. An to struct to kanw global varibletha doylepsei? Me pion tropo mporw na dw to apotelsma stin main kai na to xrisimopoiisw ws input sto 2o textwidget? Morw na kanw tin CALLBACK sinartisi na peistrefei px tructure pointer kai an nai pws tha parw ta dedomena? Eyxaristw ! |
|
Back to top |
|
 |
parapente Tux's lil' helper


Joined: 28 Jul 2003 Posts: 140 Location: Greece
|
Posted: Sun Apr 03, 2005 9:10 pm Post subject: |
|
|
Και γιατί δεν κάνεις το άλλο: να βάλεις ότι επεξεργασία θέλεις να γίνεται στα δεδομένα μέσα στην αντίστοιχη callback συνάρτηση η οποία τελικά θα αναλαμβάνει να εμφανίσει και το αποτέλεσμα στο δεύτερο widget; Με global μεταβλητή σίγουρα θα δουλέψει αλλά είναι γενικά άκομψο να γεμίζεις τον κώδικά σου global μεταβλητές και έπειτα θα πρέπει μετά σε κάθε αρχείο που θέλεις να τις χρησιμοποιήσεις και δεν τις έχεις δηλωμένες εκεί μέσα να τις δηλώνεις ως external. |
|
Back to top |
|
 |
bravewic n00b

Joined: 03 Apr 2005 Posts: 4
|
Posted: Mon Apr 04, 2005 12:30 am Post subject: |
|
|
Parapente ennoeis na perasw kai to 2otextwidget san metavliti stin callback(pws tha to kanw ayto afoy to teleytai argument einai (gpointer) data) i na dimioyrgisw mesa to widget alla tha prepei kapws na to vgalw stin main .
Episis skeftika na kanw ena struct poy tha exei 2 Widgets (ta 2 text) kai na perasw to struct san argument alla den kserw an ginetai ayto kai to epitrepei to GTK . Alliws an ksereis kati tha ithela na moy peis enan tropo giati pros to paron exw eksantlisei oles tis idees . Eyxaristw |
|
Back to top |
|
 |
parapente Tux's lil' helper


Joined: 28 Jul 2003 Posts: 140 Location: Greece
|
Posted: Mon Apr 04, 2005 1:05 pm Post subject: |
|
|
Ο gpointer είναι απλά ένας δείκτης τύπου void* που σημαίνει ότι μπορεί να αποθηκεύσει οποιονδήποτε άλλο δείκτη. Έτσι μπορείς κάλλιστα να φτιάξεις μια δομή που να περιέχει ότι δεδομένα θέλεις να περάσεις στην συνάρτηση και μέσα στην callback ορίζοντας ξανά την ίδια δομή να κάνεις την επεξεργασία των δεδομένων. Συνήθως δεν σου χρειάζεται τίποτα παραπάνω από ένα άλλο widget οπότε πολύ απλά του περνάς σαν δεύτερο όρισμα το widget και στα αρχεία callback.c και callback.h ορίζει την αντίστοιχη συνάρτηση ότι δέχεται δεύτερο όρισμα τύπου ίδιου με το widget που θέλουμε να περάσουμε. Αυτό γίνεται και μέσα από το glade. |
|
Back to top |
|
 |
menace n00b

Joined: 25 Dec 2003 Posts: 47
|
Posted: Tue Apr 05, 2005 9:43 pm Post subject: |
|
|
Αν το GUI το έφτιαξες με GLADE τότε το glade βάζει μερικες λειτουργίες δικές του που λύνουν το πρόβλημα σου (αν το κατάλαβα καλά δηλαδή). (πρέπει να το πείς να βγάζει τα support functions)
εχει το macro GLADE_HOOKUP_OBJECT και GLADE_HOOKUP_OBJECT_NO_REF που αναλαμβάνουν να αποθηκέυσουν pointers για όλα τα widgets. Αυτη την δουλειά την κάνει μονο του το GLADE στο interface.c
Και στο support.c σου βάζει την function lookup_widget με την οποία μπορείς να βρείς τον pointer για οποιοδήποτε widget θέλεις ζητόντας το με το όνομά του. Πολύ χρησιμο
η lookup_widget θέλει ένα poiner για το root widget (η το widget που χρησιμοποιήσες στο GLADE_HOOPUP_OBJECT() που συνήθως είναι το root window) και ενα strign με το όνομα του widget που θέλεις. Οπότε σαν παράμετρο στα callbacks μπορείς να έχεις το root widget (πχ window1) και μετά με αυτό να βρίσκεις ότι θέλεις.
Πχ απο το callbacks.c στην calculate() (ή όπως την λές)
GtkWidget *2nd_textwidget;
2nd_textwidget = lookup_widget(window1,"2nd_textwidget");
Και μετά μέσα στην callback κάνεις update τα περιεχόμενα του δέυτερου widget (αφού πλέον έχεις pointer για όποιο widget θέλεις) |
|
Back to top |
|
 |
bravewic n00b

Joined: 03 Apr 2005 Posts: 4
|
Posted: Wed Apr 06, 2005 2:29 am Post subject: |
|
|
Menace se eyxaristw gia tis simboyles itan katatopistikes kai katafera na lisw to problima moy me arketa akrovatika. Epeidi eixa to GLADE egkatestimeno alla to sigekrimeno GUI to ekana xeiropoiito. Opote ayto poy kanw einai na antigrapsw ta defines kai tin sinartisi lookup_widget() apo to support.h kai .c ston kwdika moy. Fisiko epakoloytho itan na min doyleiei opote ekana include kai to configure.h apo to glade directory moy.
Poli skoypidi alla . . . to kaname kai ayto
Den eixa vevaia provlima kai to programma etrekse apsoga. Sygnvmi an ginomai koyrastikos alla mipws exeis kamia idea gia to pws na ilopoiithei ayti i sinartisi mesa sto programma? Kai kal tin sinartisi tin vriskv kai pragmatika den einai tipota alla to macro gnwrizeis ti kanei kai pws tha mporoys an to aneksartitopoiisw i toylaxiston poia defines kai includes na kanw (to na kanw include olo to configure.h toy glade den einai oti kalitero )
Me sigxvreitai an ginomai koyrastikos kai sas Eyxaristw oloys gia tis protaseis sas !!!! |
|
Back to top |
|
 |
menace n00b

Joined: 25 Dec 2003 Posts: 47
|
|
Back to top |
|
 |
bravewic n00b

Joined: 03 Apr 2005 Posts: 4
|
Posted: Wed Apr 06, 2005 10:45 pm Post subject: |
|
|
Sas eyxaristw oloys poli gia tin boitheia .  |
|
Back to top |
|
 |
|