hier schaut selbst.
(http://img220.imageshack.us/img220/4684/shotiz9.th.jpg) (http://img220.imageshack.us/my.php?image=shotiz9.jpg)
und nummer 2:
(http://img442.imageshack.us/img442/4691/screenietm8.th.jpg) (http://img442.imageshack.us/my.php?image=screenietm8.jpg)
diesmal mit 3 buttons und positionierung. Aufruf des widgets durch die erstellung.
und das letzte mal für heute:
(http://img522.imageshack.us/img522/1663/toolbarbx5.th.jpg) (http://img522.imageshack.us/my.php?image=toolbarbx5.jpg)
Diesmal die Toolbar und ein paar andere nette funktionen wie den Unterschied zwischen window und dialog.
und nomma:
(http://img233.imageshack.us/img233/9623/shot2dz8.th.jpg) (http://img233.imageshack.us/my.php?image=shot2dz8.jpg)
zusehen ist ein Fenster. Mit click auf Text -> Statusbar wird der Text (Test) in die Statusbar geschrieben.
Durch ändern des CallBacks kann man per Quit das ganze program schließen.
und ein letztes mal heute:
(http://img118.imageshack.us/img118/2157/shot3om8.th.jpg) (http://img118.imageshack.us/my.php?image=shot3om8.jpg)
MenuBar mit einträgen. jedoch noch keien untermenus.
Guten Morgen aus dem schneienden Norden:
(http://img297.imageshack.us/img297/4328/shot4tl2.th.jpg) (http://img297.imageshack.us/my.php?image=shot4tl2.jpg)
Diesmal mit Subemenus
Und Nomma ;)
(http://img259.imageshack.us/img259/3108/shot5ij9.th.jpg) (http://img259.imageshack.us/my.php?image=shot5ij9.jpg)
Diesmal TextBoxen und Events (bei klick auf Login wird der dialog daneben angezeigt mit dem namen der in der textbox eingegeben wurde)
Derzeit unterstürzt wird:
- CreateButton
- CreateLabel
- CreateToolbar
- CreateTable
- TableAttach
- CreateWindow
- CreateHandlebox
- CreateStatusbar
- CreateMenu
- MenuAddLabel
- CreateMenuBar
- ToolbarAdddItem
- AddContainer
- ShowWidget
- BoxPack
- Items zur Statusbar hinzufügen
- Widget mit Event an Callback übergeben (Teilerfolg)
- Box erstellen und verwenden
und ich hoffe heute noch ein paar steuerelemente und vielleicht sogar die events hinbekomme.
EDIT// Teilerfolg bei den Events :) erstmals ganze anwendungen möglich ;)
Mfg
GTK ?
Das ist ne GUI (Opensource? ) ?
Nicht schlecht :)
So wie ich das seh überschreibst du wieder die GLB-Main oder?
Mach doch nen eigenen Thread, ist doch dann um einiges hübscher ;)
muss dich enttäuschen schranzor ;) main ist vollkommen intakt :P
Ja haste nen eigenen Thread gemacht?
setzt mal den code rein , dann weiss man worüber wir sprechen wollen. sehe noch keinen zusammenhang von windows und diesem gtk.
kenne den hintergrund deiner sub-aufrufe nicht.
was wolltest du jetzt wissen/machen?
kanst du denn jetzt in allen 3fenstern eine unabhängig gestartete glbasic routine(3d) ablaufen lassen?
mein gp2x läuft zb mit sdl.
mfg
Sechsrad ich bin dafür bekannt code nicht vor einer alpha freizugeben. Außerdem ist sinn dieser Gui nicht gui und opengl fenster zu vermischen sondern ein eigenständiges modul.
gtk ist eine crossplatform gui.
Richtöööööösch
Update im ersten POST
Nice, wenn die sich noch ansprechen lassen und funzen ist es subba
Total klasse!
Gernot ich brauch mal deine Hilfe.
Bei der funktion g_connect_signals oder so ähnlich muss ich eine void funktion übergeben. (Callback funktion) wie übergeb ich denn diese funktion über eine glb funktion an die c++ funktion? wäre das wichtigste denn anders kann ich keine events wie "clicked" weitergeben.
poste mal den Prototypen/Hilfe dazu.
Prinzip:
CALLBACK glb_foo: para
ENDFUNCTION
INLINE
extern "C" void c_foo(int para)
{
glb_foo(para);
}
int mymain()
{
NimmMeineFunktion( c_foo );
}
ENDINLINE
also die funktion wird so aufgerufem:
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (hello), NULL);
die funktion hello sieht so aus:
static void hello( GtkWidget *widget,gpointer data )
{
g_print ("Hello World\n");
}
wobei die 2 parameter allein gefüllt werden.
vielleicht hast du ja rat.
Geiler Hund du ;)
CALLBACK glb_hello: para
ENDFUNCTION
INLINE
extern "C" static void c_hello(int para)
{
glb_hello(para);
}
FUNCTION ConnecteMeinenButton:
INLINE
g_signal_connect (G_OBJECT (button), "clicked",G_CALLBACK (c_hello), NULL);
ENDINLINE
ENDFUNCTION
Jetzt kannst Du aber nicht für jeden Button eine "glb_hello" machen, klar oder?
Also: Machst Du eine FUNCTION GTK_OnButton: iButton, und verknüpfst alle button-messages mit einer c_button funktion. In der suchst Du dann heraus, welcher Button gedrückt wurde (mach ein Feld mit GtkWidget* pointern, und vergleiche die, dann gib den Index an die glb-Funktion weiter. Weisst wie ich mein?
Ich weiß was du meinst aber wie lös ich das mit dem GtkWidget feld?
und so wie ich das aus dem code sehe wird beim signal "clicked" die funktion hello aufgerufen. WIe soll ich das denn machen, dass wenn ich button1 drück dann z.b. label1 ein anderen text und auf click von button2 das programm beendet wird, wenn ich nur 1ne callback funktion hab?
muss mal e in doppelpost investieren...
sonst bin ich am ende noch ganz unten
GtkWidget* ist kein Feld!!! Das ist ein Zeiger auf ein mit "new" erstelltes Widget.
Bezig sich auf das aus deinem Post:
(mach ein Feld mit GtkWidget* pointern)
Ich weiß nich wie ich da weiter machen soll. nun hab ich bald alle widgets aber noch keine events :(
Hmm lol :D
Ja... Mach ein Feld
INLINE
DGArray gPointers;
//neues Widget machen:
...
DIMPUSH (gPointers, neuesWidget);
// im callback:
for(int i=0; i{
if(gPointers(i) == callback_ueberreichter_pointer) return i;
}
return -1; // fehler
Das soll funzen?
Eine Forschleife im Callback...
Obs auch so bei der Newton gehen würde?
Hmm ich kanns immernoch nicht in Verbindung bringen :(
ich mein das folgendermaßen:
static void callback_func( GtkWidget *widget,
GdkEvent *event,
gpointer callback_data );
Das ist die Callback Funktion.
g_signal_connect (G_OBJECT (button), "button_press_event",
G_CALLBACK (callback_func), NULL);
Das ist der Aufruf von Gtk. So ruft das Widget "button" beim klicken die callback funktion callback_func auf und übergibt den Kram "GtkWidget *widget, GdkEvent *event, gpointer callback_data" an die callback_func.
Nun kann ich nicht für jeden button ein neues callback machen wie gernot schon sagt. Also schreib ich meine widgets (gleich beim erstellen) in ein Feld.
Nun meine frage... Wie gehts weiter?
ah - ha!!!
pass auf, der conenct übergibt an die Funktion, die Du angibst ja NULL als callback_data, stimmts?
Jetzt rufst Du für jeden Kopf immer die gleiche Callback-funktion auf, _aaaaber_ gibst stall NULL den index/id/whatever des Knopfes an -> damit Du später dem Nutzer sagen kannst "Knopf 5 gedrückt".
@Schranzor - so mach ich das in Newton auch. Ich bekomme einen Zeiger auf einen Body bei den Kollisionen, dann such ich mir den passenden Index dazu und gebe den an GLBasic zurück.
int xNewtonBodyIndexFromPointer(const void* body)
{
int m = BOUNDS(gNewtonBodyPointers, 0);
for(int i=0; ireturn -1;
}
ahhh ok :D
Hast du im Pinguinspiel nicht gemacht;)
ich habs jetzt erstmal so gelöst:
CALLBACK FUNCTION EVENTS: widget,command$
DEBUG widget
DEBUG command$
SELECT widget
CASE button1
GuiStatusBarPush(status,"Test")
CASE Button
GuiStatusBarPush(status,"Moop")
CASE window
GuiEnd()
END
CASE datei_sub
GuiEnd()
END
ENDSELECT
ENDFUNCTION
da ichnich weiß wie es sich später als dll verhält muss ich mir noch was anderes ausdenken. Übrigens von feld event bekomm ich nur ne 1 oder ne 0 und von data nur bei dem schließen button vom fenster einen wert, der aber jedesmal anders ist.
kannst es mir ja mal schicken, dann schau ich mal drüber - so ists schwer zu sagen.
Jipp mach ich dir mal fertig. Vielleicht hast du ja noch ein verbesserungsvorschlag und vor allem ein vorschlag zur vereinfachung hab schon viele befehle 1:1 übernommen weiß nicht wie ich die in den anderen unterbringen soll um den kram noch einfacher zu machen.
UPDATE erster Post
Wie gewünscht, vom Trucidare, ein Screenshot von seiner GUI in Vista:
!!KLICK IMAGE FOR FULLSIZE!!
(http://www.styleattax.de/GUI.png) (http://www.styleattax.de/GUI.png)
Schlicht weg geil :)
So kann man auch für das Auge einen ansprechenden Editor schreiben :)
Nun aber noch ne kleine Frage dazu, das Hauptprogramm bleib ja GLB, so kann man die GUI auch nur nutzen wenn OpenGL Treiber drauf sind, oder?
Es ist derzeit nicht möglich das GLB und das Gui fenster zu nutzen. Ich versuch da ne lösung zu finden.
Ja brauchst du da trotzdem ein GLB fenster erzeugt wird, das versteckt wird.
Ich denke, daß das das geringste Problem sein sollte, oder?
jop aber problem gerade unter windows ist es das runtime dll´s benötigt werden. Ich konnte bisher nicht statisch linken *schnief* unter linux und mac os allerdings würde es ohne shared libs gehen. Aber erstmal fertig machen für windows dann für den rest
Neuer Tag, neues Problem ;)
ne spaß kein Problem aber gibt nun nich mehr soviele updates ich spiel nebenbei also nich wundern wenn ein tag mal nix kommt
*heul*
-.- Welche Ironie doch dahinter steckt ;)
Ich mach dir heute abend ein packet fertig mit dem gtk kram schicks dir und wir quatschen denn morgen drüber
und wenn alles glatt geht schick ich dir am montag ein richtiges packet.
Klingt gut.
Sounds good :)
Ich wills auch haben ;)
Ja schranzi wenn fertig und ich den source sicher in meinem safe verstaut habe ;)
Gernot weißt du ob man den kram unter windows statisch linken kann? ich hab keine lust auf runtime kram mit mehr als einer dll.
sack du :D
da musst Du alles mit dem gcc compilieren. Viel Spaß!
Das ist das kleinere übel. Der gcc selbst war schlimmer... aber ich versteh die meisten kompilier scripte nicht wo was hin muss.
Wohooo DURCHBRUCH :)
Gui als DLL MIT EVENTS :) :) :)
Wohooooo
GIB HER!
gui und glbasic zusammen , das ist es was ich brauche.
mfg
Das ist eher GUI ohne GLB aber in GLB geschrieben!
So nach langerzeit mal wieder ein Update
ImageButtons
TextArea
ProgressBar
ImageFeld
sind nun verfügbar. Screenshot folgt.