Fórum Ubuntu CZ/SK

Ostatní => Archiv => Téma založeno: chessx 22 Srpna 2007, 14:19:17

Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 14:19:17
Hrál jsem si dneska chvilku s Glade Interface Designerem. Nepodařilo se mi tlačítkem na formuláři JEDNA otevřít okno DVA.
     Ví někdo jak to provést? Bez ohledu na to zda se nové okno otevře přes první okno nebo první okno se zavře a nové otevře.

Děkuji za pomoc
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 14:27:32
Myslim ze to resi funkce gtk_window_show()... nebo lepe gtk_window_new(): http://library.gnome.org/devel/gtk/unstable/GtkWindow.html#gtk-window-new

Kdyz uz jsme u toho... nevim treba se to tu resilo. Nebylo by od veci zalozit na foru sekci pro vyvojare? :)

Edit: Pokud s GTK+ zacinate a zvladate anglictinu, velice pekne je zpracovany tutorial: http://library.gnome.org/devel/gtk-tutorial/stable/
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 14:50:34
gtk_window_show() jsem zkoušel, ale problém je, že nezná parapetr DVA (to je název druhého okna) a já nevím, kde mu to druhý okno nadefinovat. Když dám gtk_window_hide(JEDNA), tak původní okýnko zmizí (to znamená, že signál funguje), ale nevím co s tím druhým - nevím jak jednomu říct, že tam má to druhý a naopak. V pascalu jsem psal vždycky uses(co má použít), tím jsem měl odvolávku hotovou, ale tady nevím.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 14:52:07
No je to Cecko... tudiz bych to videl na #include "wokno2.h".
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 15:20:46
to tam nevznikne. obě okna jsou tvořeny v interface.c blokama:

GtkWidget*

create_window1 (void)
{
...
return window1;
}

create_window2 (void)
{
...
return window2;
}

a ještě se interface.c odvolává pomocí #include interface.h na interface.h, kde je

GtkWidget* create_window1 (void);
GtkWidget* create_window2 (void);

     Takže jsem měl pocit, že je to nadefinovaný. Singál z knoflíku mám gtk_widget_show (window2). Generování pomocí ./autogen.sh  proběhne v pořádku, ale po příkazu make mě to hodí error v interface.c  

"window2 undeclared (first use in this function)".

No, a mně není jasný, kde to deklarovat.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 15:28:37
Ono ale "window2" memi opravdu definovany (ani deklarovany). :)

Neni nahodou definice umistena v tele funkce create_windowX()???
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 15:38:14
Já právě nevím, kde je to definovaný. Já jsem to začal zkoušet. Dokud jsem měl jedno okno, tak to šlo, ale jak jsem přidal druhý, tak to začalo házet chyby. Když to druhý okno z odkazu vyndám, tak se chyba neobjeví. Když dám na tlačítko gtk_window_hide(window1), tak to jde zkompilovat bez chyby. Původní okýnko zmizí, ale to druhý nevidím a nevidím.
     Já právě potřebuju zjistit, kde se to definuje, aby v okamžiku volání f-ce o window2 věděl.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 15:43:59
Aby slo pouzivat promennou v celem rozsahu zdrojovych kodu, musi byt deklarovana ci definovana globalne. To znamena vne funkci. Podle nepsanych pravidel se globalni deklarace umistuje do hlavickoveho souboru (*.h), globalni definice do zdrojoveho souboru (*.c).

Poslete sem celej kod napr. funkce create_window1();
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 17:04:23
Nemůžu to najít. Souborů je tam dost a tolik tomu nerozumím. Myslel jsem si ale, že když v GLADE přidám okno (nebo nějaký objekt), že je automaticky přidáno do projektu a můžu na něj přeměrovat signály, aniž bych cokoliv doprogramovával.
     Myslel jsem si, že doprogramovávám až výpočty a pod., nikoli formuláře.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 17:49:56
To samozrejme je... ale jak kdysy nekdo rekl: "Jazyk C je mocny, tajemny a nevyzpitatelny."
Glade sice ulehcuje tvorbu GUI v GTK+/Gnome, ale nenaprogramuje za vas vazby a algoritmy. To vse je nutne dodelat. Glade neni typove jako Delphi nebo C++ Builder. Slouzi pouze k tvorbe interface.
Spoustu veci zvladne samo... moznost signalovani je perfektni, ale musite si vse doprogramovat sam.

K tomu oknu. Ono v projektu je. Pouze musite doprogramovat vazby mezi funkcemi a okny.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 18:03:54
Hm, pak tomu už vůbec nerozumím. Myslel jsem, že signály pokrývaj základní operace a já potom programuju pouze výpočty nebo extra f-ce, ale otevření okna, když je tam gtk_widget_show sem myslel zvládne GLADE sám - tím spíš, že sem tam okno vložil z palety, tak by o něm měl vědět - pěkně blbý

     Na odkaz na dokumentaci sem se díval, ale všude je řešeno jenom jedno okno a navíc to překládaj pomocí gcc příkazu. To jsem taky zkusil. Vytvořil sem si adresář do něj soubor base.c do kterýho sem vložil zdrojový text z manuálu. Spustil sem na to gcc a hodilo mě to error:

GtkWidget undeclared (`first` used at this function)

Přitom GTK+ 2 mám v Synaptiku nainstalováno. tak to se asi nic nenaučím, když mě nejdou ani příklady z manuálu

Dík
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 18:18:44
Jo tak... hlavickovy soubory GTK+ chybeji. ;)

Aby sli ty priklady z tutorialu sestavit, je nutne doinstalovat:
Kód: [Vybrat]
sudo apt-get install libgtk2.0-dev libglib2.0-dev
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 22 Srpna 2007, 20:59:28
tak to asi není ono -  já mám GTK a GLADE instalován přes Synaptic - příkaz jsem zkusil (opsal) - psalo to bla bla bla a nakonec to vypsalo :

0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded

nevím, proč mě ty příklady nejdou
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 22 Srpna 2007, 21:02:09
A zadal jste dobre parametry kompilatoru?
Kód: [Vybrat]
gcc vstup.c -o vystup `pkg-config --cflags --libs gtk+-2.0`
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 23 Srpna 2007, 11:59:30
zadal - ty byly v příkladu taky
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 23 Srpna 2007, 12:16:02
Tak v cem udelali soudruzi z NDR chybu? :/
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 23 Srpna 2007, 12:54:42
Hraju si hraju - problém o kterém jsem psal byl s GLADE 2.12.1, který byl v instalačním balíku UBUNTU 7.04. Včera večer jsem večer stáhnul ještě GLADE 3.2.0
     Problém je v tom, že starší verze produkuje kód v "C" po stlačení tlačítka "BUILD". Nová verze tlačítko "BUILD nemá - to mě nejdřív znervoznilo - pak jsem však zjistil, že produkuje kód v "XML" => jméno souboru je test.glade a v hlavičce má:



Jak se takový soubor spouští jako program??
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 23 Srpna 2007, 14:39:04
S novodobym Glade jsem zatim jeste nepracoval... nicmene jsem nasel Tutorial z kteryho by to melo jit vycist: http://www.gnome.org/~newren/tutorials/developing-with-gnome/html/ch02s02.html

Edit: Pripadne nekolik dalsich zdroju: http://ubuntuforums.org/archive/index.php/t-490632.html
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 23 Srpna 2007, 16:53:56
Jo tam už jsem se taky dostal, jenže příkaz z prvního těla progrmau, který mě volá XML zdroják (jeden z příkladů, který tam jsou):

main_window = glade_xml_new ("example-1.glade", NULL, NULL);

mě hodí při přakladu error:

GladeXML undeclared (first use in this function

Tak fakt nevím, jak ten příklad rozchodit.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 23 Srpna 2007, 17:01:54
Podle me je to uplne ten samy problem jako jsme resili pred tim. Datovy typ "GladeXML" je definovan v hlavickovych souborech GTK+. Tudiz, bud nejsou hlavickove soubory nainstalovany, nebo cesta k nim neni podsunuta kompilatoru.

Co se mi podarilo zjistit... k nacitani XML interface Glade v runtime (plus k vyvoji) jsou potreba tyto dve knihovny:
Kód: [Vybrat]
sudo apt-get install libglade libglade-devA tyto navic s podporou Gnome widgetu:
Kód: [Vybrat]
sudo apt-get install libglade-gnome0 libglade-gnome0-devEdit: Navic je nutno kompilatoru priradit jako pouzitou knihovnu libglade-2.0 (viz http://www.gnome.org/~newren/tutorials/developing-with-gnome/html/re07.html)
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 23 Srpna 2007, 20:45:48
Tak jsem připojil konečně UBUNTU přes WIN na INTERNET. Vložil jsem první příkaz:

sudo apt-get install libglade libglade-dev

a dostal jsem hlášku:

could not find package libglade

     Vypadá to, že hledá balíčky pořád na instalačním DVD a ne na internetu. Jak to mám přesměrovat na internet, tak jak to bylo po nainstalování systému?
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 23 Srpna 2007, 20:59:44
mám ale nainstalováno libglade2-0 a libglade2-dev

nestačí to??
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 24 Srpna 2007, 11:47:27
Moje chyba... jsou to ty balicky co jste napsal vy, pripadne libglade0 a libglade0-dev. Stale to hazi tu samou chybu?
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 24 Srpna 2007, 16:28:41
Tak jsem se vrátil ke starší verzi GLADE 2.12.1, kde není kód XML a po dlouhým zjištění jsem našel, že sice v interface.c je okno windowě vytvořený, ale v main.c chybí příkazy:

GtkWidget *window2;
windowě = create_window2();
gtk_widget_show(window2)

    Nepochopil jsem ale, proč create(window2) je interface.c a potom znovu v main.c
 
Takže více okýnek tvořit umím, ale teď nevím kam dopsat obsluhu pro stisk tlačítka. Mám sice pro stisk tlačítka "signál", ale nevím v kterým programu a vkterým bloku to obsloužit - popřípadě, jestli zmínku zase nemusím napsat do více částí jako u příkazu create???

     Kdyby někdo věděl, jak zkompilovat XML z GLADE, tak bych byl taky rád, alespoň bych mohl zkusit i novější verzi GLADE.

Děkuju, děkuju
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 27 Srpna 2007, 16:56:11
Po pridani signalu prvku a vygenerovani projektu v callbacks.c prida funkce pro obsluhu.
Takze napriklad pro obsluhu prvku tridy *button:
Kód: [Vybrat]
void on_button1_clicked(GtkButton *button,gpointer user_data)
{
  ;
}
Do jejiho tela pridate vlastni obsuhu funkce a je to...
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 29 Srpna 2007, 08:57:19
Díky za radu, ale nějak mě to nejde.
Vepsal jsem kód do callbacks.c a jako tělo programu jsem vložil:
label1.Label = "stisk tlacitka"
zkoušel jsem i druhé uvozovky, ale hází to chybu při make "callbacks error"

Jak při stiskuzměním název tlačítka?
Kam se mám prosím podívat? V nápovědě je pouze jak se s GLADE zachází ohledně prvků, ale nenašel jsem popis kam co se vepisuje a jak píšu obsluhu.

Děkuju
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 29 Srpna 2007, 14:46:50
Musite si uvedomit ze GLADE pouziva ve vychozim nastaveni jazyk C... a ten neni obohacen objektovym programovacim modelem. Ke vsem parametrum prvku se pristupuje pomoci funkci.

Tedy zhruba takto po stisku tlacitka prejmenujete label samotneho tlacitka:

Kód: [Vybrat]
void on_button1_clicked (GtkButton *button, gpointer user_data)
{
  gchararray novy_label = "NovyLabel";
  gtk_button_set_label(button, novy_label);
}
Jako parametr funkce je uveden pointer na button, pres ktery komunikuje zbytek programu s tlacitkem a naopak. Zadna globalni deklarace button1 neexistuje. ;)

Je tomu tak z dubvodu, aby u programu s vice okny mohlo byt vice nezavislych prvku definovanon jako button1.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 30 Srpna 2007, 15:14:42
Tomu prosím ještě moc nerozumím. Jestli by jste mě to nemohl dokumentovat na následujícím příkladu:

1) Mám v GLADE přes sebe vytvořená dvě okna "windows1" a "windows2", kde "windows1" překrývá "windows2"
2) Mám na "windows1" tlačítko "button1". Stiskem tlačítka "button1" můžu pomocí signálu "clicked / gtk_widget_hide / window1" schovat "window1" a objeví se již ptevřené "windows2"
3) Chci změnu. Chci, aby před po stisku tlačítka "button1" před schováním "window1" proběhly ještě nějaké funkce - nemůžu proto použít zmíněný signál. Nadefinoval jsem proto pro "button1" signál "clicked / on button1_clicked" a v souboru "callbacks.c" se mi objevil odstavec:
     void on_button1_clicked (....)
     {
tady jsem myslel, že můžu doplnit:
            gtk_widget_hide(window1);
     }


./autogen.sh přes to sice přeleze, ale "make" mě hází chybu, že "window1" je undeclared. A tady jsem si právě myslel, že deklarece je už provedena v "interface.c"

Děkuju za radu a pokud k tomu víte nějakou dokumentaci (radši v ČJ), tak by to bylo príma, abych Vás pořád neotravoval.
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 31 Srpna 2007, 11:00:07
Nasel jsem strucny uvod do knihoven GTK+ v cestine: http://www.2k-partner.cz/bobr/article001/index.html
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 31 Srpna 2007, 14:05:10
Děkuju, díval jsem se na odkaz, něco mě to pomohlo. Ale asi na to koukám ze špatného pohledu (nebo sem blbej) - pořád nevím, jak provést můj příklad, kdy po kliku na tlačítko zmizí vrchní okno a objeví se druhý.

Mohl by jste prosím poradit??
Děkuju
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 01 Září 2007, 00:07:55
V prvni rade podle meho je chybou to, ze vytvarite obe okna naraz. Spise bych po kliku na button1 napsal vytvoreni okna druheho... ;)
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 01 Září 2007, 20:52:22
Ale když vytvořím druhé okno po stisku tlačítka programem, tak budu muset celé druhé okno vytvářet programem a už k tomu nebudu moci využít výhody tvorby pomocí GLADE? Nebo mě něco uniklo?
     
     Nevíte prosím, kde je v programu definována odvolávka na "button1" v "callbacks.c"?

Děkuju
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 01 Září 2007, 21:50:30
Nevíte ještě prosím, jak můžu dohledávat:

on_load_file_dialog_ok_button_clicked
on_defaults_activate
on_defaults_dialog_ok_button_clicked
.
.
.

příkazy s vysvětlením použití?

Děkuju
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 02 Září 2007, 16:01:21
K tomu prvnimu... pomoci Glade si vytvorite druhe okno a ve zdrojovych kodech pote uz jenom premistite prislusny kod tohoto okna a pridate napriklad do obsluhy signalu funkci pro skryti prvniho okna/widgetu.

Zajimavou dokumentaci ke Glade naleznete v balicku glade-doc (http://packages.ubuntu.com/feisty/doc/glade-doc-2).

Na zbytek se mrknu vecer... padim na fotbal. :cool:
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 03 Září 2007, 11:04:44
No konecne jsem se k tomu dostal... :cool:

K ty odvolavce na button1, tak nejak nevim co tim myslite. Jestli signal pozadavku nebo samotnou promennou? Jak jsem jiz rikal, GTK+ je napsano defaultne v jazyku C a ten neni objektove orientovanym jazykem.

Deklarace pointeru na button1 neni globalni, pristupuje se k ni pouze v ramci funkce a musi byt predavana jako parametr. Je to i z duvodu minimalizace naroku na systemove prostredky, jelikoz kazda globalni promenna je zvysuje (je potreba mit alokovanou pamet po celou dobu behu programu, i kdyz neni vyuzita).

K tem signalum co jste uvedl. Obsluha signalu on_load_file_dialog_ok_button_clicked se realizuje tak, ze po vytvoreni dialogu v Glade pridelite signal prave prvku tlacitka OK, specialni signal na cely widget neexistuje. To same u on_defaults_dialog_ok_button_clicked. Co se tyce on_defaults_activate, tak se jedna o nastaveni vychozich hodnot widgetu.

Snad jsem to napsal alespon trochu srozumitelne.

Jinak, neni od veci si napsat par jednoduchych projektu ciste v kodu, bez pouziti Glade. I kdyz je Glade pekna pomucka, vzdy je potreba se v projektu vyznat a s pouzitim Glade se ta orientace dost stezuje...
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 03 Září 2007, 11:25:24
No jeste jednu vec jsem nasel... pokud by jste zkousel psat ty projekty in source mode, tento serial (http://www.linuxsoft.cz/article.php?id_article=370) by vam mohl hodne pomoci. Neni sice primo o GTK+, ale o C/C++, ale je psan velice pekne. ;)
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: chessx 04 Září 2007, 08:51:39
Zdravím diwoczaaka - a moc děkuju

Všechny doposavadní dotazy byly z hluboké neznalosti. Ne, že bych tomu už rozumněl, ale je to lepší než na začátku. Pro ostatní, kteří začínají bych pro začátek poradil:

1) GLADE je sice pěknej, ale ze začátku (dokud člověk nerozumí moc kompilaci) to fakt není dobrý, protože není jasné co v kterém file má být. Lepší je rovnou zkusit GTK+, které je  v GLADE využíváno.
2) Pro GTK+ doporučuji dokumentaci GTK+, která je v UBUNTU přístupná, ale až po nainstalování "Developers HELP "
3) překlad napsaného programu provedete příkazem: gcc -Wall test `pkg-config --cflags --libs gtk+-2.0` gtk.c
     kde gcc je překladač jazyka, nevím co znamená -Wall (ale má to tam prý být), test je název výsledného souboru, v uvozovkách je prý něco co využívá (taky tomu ještě nerozumím a gtk.c je zdrojový kód, který jsem napsal
4) V GLADE jsou příklady, které pomocí překladu z bodu 3) lze překládat a je tam lecos vidět


V každém případě je to dřina.
Ještě jednou děkuju Diwoczaakovi za prvotní kroky.
Kdyby mě někdo dokázal objasnit nejasnosti příkazu při kompilaci (bod 3) bylo by to príma

Přeju všem hezký den
Název: GLADE - nové okno po stisku tlačítka
Přispěvatel: Pavel Půlpán 04 Září 2007, 11:58:01
K tomu parametru -Wall: Although GCC will compile this code, it isn't strictly complete. If we enable GCC's warnings we will be told what is missing. You are not expected to understand the warning messages right now, we show this only to demonstrate GCC's warnings. You enable warnings by adding the -Wall switch to your compilation command.

V zavorkach je upresneno, ktera knihovna GTK+ ma byt pri kompilaci pouzita. Je to z duvodu, ze v systemu muzou byt verze prvni i druhe rady.

Mimo jine pred paramtrem test vam chybi prepinac -o pro definici vystupu kompilatoru. ;)

Edit: Pri praci s projekty neni od veci se neco malo naucit o tvorbe a vyuziti Makefile. Viz ten serial na ktery jsem poukazoval minule. Da se tim usetrit spoustu casu.