Discussione:
GUI per programma
(troppo vecchio per rispondere)
arkkimede
2014-06-10 15:20:22 UTC
Permalink
Dopo vari mesi di debugging e sviluppo sono riuscito ad ottenere un codice che funziona correttamente.

Per renderlo un po' piu' "usabile" vorrei dotarlo di interfaccia grafica e qui iniziano i problemi.

Come procedere?
Considerato che mi muovo male in ambiente Microsoft VC (e non conosco il C++) e preferisco sicuramente linux (al massimo con la pistola alla tempia cygwin) ho provato a guardarmi in giro ma, causa mia inesperienza, ho tanta confusione in testa.

Proprio perche' non ho mai fatto niente di simile prima (anni fa avevo fatto l'interfaccia grafica con matlab che lanciava un eseguibile c ma non mi ha mai soddisfatto a pieno perche' le due cose erano separate e non c'era alcun controllo tra i due ambiti), ho paura di prendere una strada sbagliata e magari accorgermene dopo 3 o 4 mesi di infruttuosi tentativi.

Quello che in definitiva cerco e' una libreria per estendere il mio codice C e dotarlo di interfaccia grafica.

Sapreste indirizzarmi verso una direzione?

Grazie
Archaeopteryx
2014-06-10 15:53:37 UTC
Permalink
Post by arkkimede
Quello che in definitiva cerco e' una libreria per
estendere il mio codice C e dotarlo di interfaccia
grafica.
Sapreste indirizzarmi verso una direzione?
Grazie
Premetto che non sono mai riuscito a realizzare
un'interfaccia grafica, ci sono andato meno lontano con
Qt, che oltretutto è molto portabile. Potresti dargli
un'occhiata se i guru del NG non consigliano altrimenti.

Libreria per estendere il codice io non la prenderei in
considerazione, meglio separare le cose. Al limite metti
tutto il tuo programma in una classe e fai le chiamate
dall'interfaccia (e viceversa) però chiaramente tutto
dipende da come sei organizzato.
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
Archaeopteryx
2014-06-10 16:10:03 UTC
Permalink
Post by Archaeopteryx
Libreria per estendere il codice io non la prenderei
in considerazione, meglio separare le cose. Al limite
metti tutto il tuo programma in una classe e fai le
chiamate dall'interfaccia (e viceversa) però
chiaramente tutto dipende da come sei organizzato.
ops, è il NG di C, non C++, ma tanto l'idea resta
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
arkkimede
2014-06-10 18:14:50 UTC
Permalink
Post by Archaeopteryx
Post by Archaeopteryx
Libreria per estendere il codice io non la prenderei
in considerazione, meglio separare le cose. Al limite
metti tutto il tuo programma in una classe e fai le
chiamate dall'interfaccia (e viceversa) però
chiaramente tutto dipende da come sei organizzato.
ops, è il NG di C, non C++, ma tanto l'idea resta
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
Purtroppo soffro, come ho gia' detto ,del problema di mom conoscere C++
arkkimede
2014-06-10 18:15:40 UTC
Permalink
Post by arkkimede
Post by Archaeopteryx
Post by Archaeopteryx
Libreria per estendere il codice io non la prenderei
in considerazione, meglio separare le cose. Al limite
metti tutto il tuo programma in una classe e fai le
chiamate dall'interfaccia (e viceversa) però
chiaramente tutto dipende da come sei organizzato.
ops, è il NG di C, non C++, ma tanto l'idea resta
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
Purtroppo soffro, come ho gia' detto ,del problema di mom conoscere C++
scusate "non conosco"
Archaeopteryx
2014-06-10 21:05:54 UTC
Permalink
Post by arkkimede
scusate "non conosco"
infatti mi ero corretto. Puoi comunque isolare interfaccia
ed engine anche usando il C.
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
arkkimede
2014-06-11 06:28:22 UTC
Permalink
Post by Archaeopteryx
Post by arkkimede
scusate "non conosco"
infatti mi ero corretto. Puoi comunque isolare interfaccia
ed engine anche usando il C.
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
Come? (Domanda posta al NG..)
Archaeopteryx
2014-06-11 07:00:26 UTC
Permalink
Post by arkkimede
Come? (Domanda posta al NG..)
Potresti anzitutto definire esattamente cosa deve fare il
tuo engine (l'altra è la GUI) e come si interfaccia con
l'esterno. Tipicamente chiamerai dalla GUI una serie di
funzioni messe a disposizione dall'engine, che conviene
nominare con uno schema facilmente rintracciabile. Per esempio

EngCall_faiqualcosa () ;

Così anzitutto, con una ricerca grep sui sorgenti sai i
punti in cui la tua interfaccia vorrà chiedere qualcosa
all'engine. Secondo poi, è sempre bene wrappare le
funzioni che cambiano con l'ambiente grafico. Per esempio,
non è saggio nel tuo engine scrivere la chiamata diretta
alla funzione della GUI. Per esempio se nell'engine c'è
qualcosa di simile

DrawGUIWindow (...) ;

e questo nome di funzione vale per l'ambiente in cui
sviluppi, se lo cambi, devi mettere le mani ovunque.
Conviene invece fare qualcosa come

my_DrawWindow (...)
{
#ifdef GUI_1
DrawGUIWindow (...)
#elif GUI_2
WindowDraw (...)
#endif
}

Allo stesso modo, avrai qualcosa di simile nell'engine, se
proprio questo deve arrivare a gestire direttamente la GUI
(e va evitato se non altrimenti possibile).

Tipico esempio è un grafico con coppie di valori. Un modo
un po' sporco è chiamare le funzioni di disegno
dall'engine. Un modo migliore è fare in modo che l'engine
restituisca un array con le coppie di valori, e passi
l'array alla GUI tramite le funzioni di interfaccia di cui
sopra.

tutte le funzioni col prefisso che indica un
interfacciamento le metti in un solo file (uno per
engine=>GUI, l'altro per GUI=>engine). Se cambi ambiente
di sviluppo, metterai le mani su porzioni limitate e ben
definite del codice.

Se ci fai caso molti programmi lavorano così, basta
pensare alle macro di Word. Internamente succede la stessa
cosa, ma in un caso la GUI fa una chiamata all'engine di
word nell'altro accedi alla stessa funzione (che so,
giustifica il testo così e cosà) tramite l'interprete del
dialetto del basic compreso da Word.

Tutto questo è molto più facile a dirsi che a farsi e una
certa "mescolanza" tra le due sezioni è inevitabile.

Altro modo completamente diverso per separare engine e GUI
potrebbe essere usare i socket, e so che ci sono altri
sistemi ancora.

A prescindere dalle inesattezze che io possa aver detto,
la lezione personalmente imparata è separare tutto il
possibile, usare prefissi e schemi di nomi facilmente
intercettabili da grep, e essere molto ordinati.

I guru presenti sicuramente correggeranno me e ti diranno
altro.

ciao

Apx.
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
arkkimede
2014-06-11 13:05:23 UTC
Permalink
Post by Archaeopteryx
Post by arkkimede
Come? (Domanda posta al NG..)
Potresti anzitutto definire esattamente cosa deve fare il
tuo engine (l'altra è la GUI) e come si interfaccia con
l'esterno. Tipicamente chiamerai dalla GUI una serie di
funzioni messe a disposizione dall'engine, che conviene
nominare con uno schema facilmente rintracciabile. Per esempio
EngCall_faiqualcosa () ;
Così anzitutto, con una ricerca grep sui sorgenti sai i
punti in cui la tua interfaccia vorrà chiedere qualcosa
all'engine. Secondo poi, è sempre bene wrappare le
funzioni che cambiano con l'ambiente grafico. Per esempio,
non è saggio nel tuo engine scrivere la chiamata diretta
alla funzione della GUI. Per esempio se nell'engine c'è
qualcosa di simile
DrawGUIWindow (...) ;
e questo nome di funzione vale per l'ambiente in cui
sviluppi, se lo cambi, devi mettere le mani ovunque.
Conviene invece fare qualcosa come
my_DrawWindow (...)
{
#ifdef GUI_1
DrawGUIWindow (...)
#elif GUI_2
WindowDraw (...)
#endif
}
Allo stesso modo, avrai qualcosa di simile nell'engine, se
proprio questo deve arrivare a gestire direttamente la GUI
(e va evitato se non altrimenti possibile).
Tipico esempio è un grafico con coppie di valori. Un modo
un po' sporco è chiamare le funzioni di disegno
dall'engine. Un modo migliore è fare in modo che l'engine
restituisca un array con le coppie di valori, e passi
l'array alla GUI tramite le funzioni di interfaccia di cui
sopra.
tutte le funzioni col prefisso che indica un
interfacciamento le metti in un solo file (uno per
engine=>GUI, l'altro per GUI=>engine). Se cambi ambiente
di sviluppo, metterai le mani su porzioni limitate e ben
definite del codice.
Se ci fai caso molti programmi lavorano così, basta
pensare alle macro di Word. Internamente succede la stessa
cosa, ma in un caso la GUI fa una chiamata all'engine di
word nell'altro accedi alla stessa funzione (che so,
giustifica il testo così e cosà) tramite l'interprete del
dialetto del basic compreso da Word.
Tutto questo è molto più facile a dirsi che a farsi e una
certa "mescolanza" tra le due sezioni è inevitabile.
Altro modo completamente diverso per separare engine e GUI
potrebbe essere usare i socket, e so che ci sono altri
sistemi ancora.
A prescindere dalle inesattezze che io possa aver detto,
la lezione personalmente imparata è separare tutto il
possibile, usare prefissi e schemi di nomi facilmente
intercettabili da grep, e essere molto ordinati.
I guru presenti sicuramente correggeranno me e ti diranno
altro.
ciao
Apx.
--
- mi dai il tuo numero?
- sono fidanzata
- Mi serve il numero
- Sono fidanzata, ti ho detto
- Aho, ma le vuoi provare 'ste scarpe o no?
Grazie Archaeopteryx per la dettagliata risposta (e per il tempo che mi hai dedicato).
m***@gmail.com
2014-06-11 09:53:26 UTC
Permalink
Post by arkkimede
Dopo vari mesi di debugging e sviluppo sono riuscito ad ottenere un codice che funziona correttamente.
Per renderlo un po' piu' "usabile" vorrei dotarlo di interfaccia grafica e qui iniziano i problemi.
Come procedere?
Dipende da cosa fa il tuo programma e dal livello di interattività richiesto.

Ad esempio in alcuni casi semplici, puoi dotare il tuo programma di una interfaccia a riga di comando (con getopt), e costruire una GUI che invoca l'eseguibile con le opzioni corrette.

In linea di massima, ti suggerisco di progettare una API per le funzionalità offerte dal tuo programma, e costruire una libreria. L'interfaccia grafica la implementi in un programma che linka questa libreria.

Se vuoi usare C, prova a vedere le GKT.


Ciao Manlio
enoquick
2014-06-11 12:20:22 UTC
Permalink
Post by arkkimede
Dopo vari mesi di debugging e sviluppo sono riuscito ad ottenere un codice che funziona correttamente.
Per renderlo un po' piu' "usabile" vorrei dotarlo di interfaccia grafica e qui iniziano i problemi.
Come procedere?
Considerato che mi muovo male in ambiente Microsoft VC (e non conosco il C++) e preferisco sicuramente linux (al massimo con la pistola alla tempia cygwin) ho provato a guardarmi in giro ma, causa mia inesperienza, ho tanta confusione in testa.
Proprio perche' non ho mai fatto niente di simile prima (anni fa avevo fatto l'interfaccia grafica con matlab che lanciava un eseguibile c ma non mi ha mai soddisfatto a pieno perche' le due cose erano separate e non c'era alcun controllo tra i due ambiti), ho paura di prendere una strada sbagliata e magari accorgermene dopo 3 o 4 mesi di infruttuosi tentativi.
Quello che in definitiva cerco e' una libreria per estendere il mio codice C e dotarlo di interfaccia grafica.
Sapreste indirizzarmi verso una direzione?
Grazie
Devi prima decidere come vuoi procedere
Quale linguaggio preferiresti usare e che conosci ?
L' applicativo deve girare su una sola o piu piattaforme ?
Quali piattaforme ?
E' un' applicativo per uso privato o commerciale ?
Se è commerciale quale licenza vuoi dargli ?
arkkimede
2014-06-11 13:01:01 UTC
Permalink
Post by enoquick
Post by arkkimede
Dopo vari mesi di debugging e sviluppo sono riuscito ad ottenere un codice che funziona correttamente.
Per renderlo un po' piu' "usabile" vorrei dotarlo di interfaccia grafica e qui iniziano i problemi.
Come procedere?
Considerato che mi muovo male in ambiente Microsoft VC (e non conosco il C++) e preferisco sicuramente linux (al massimo con la pistola alla tempia cygwin) ho provato a guardarmi in giro ma, causa mia inesperienza, ho tanta confusione in testa.
Proprio perche' non ho mai fatto niente di simile prima (anni fa avevo fatto l'interfaccia grafica con matlab che lanciava un eseguibile c ma non mi ha mai soddisfatto a pieno perche' le due cose erano separate e non c'era alcun controllo tra i due ambiti), ho paura di prendere una strada sbagliata e magari accorgermene dopo 3 o 4 mesi di infruttuosi tentativi.
Quello che in definitiva cerco e' una libreria per estendere il mio codice C e dotarlo di interfaccia grafica.
Sapreste indirizzarmi verso una direzione?
Grazie
Devi prima decidere come vuoi procedere
Quale linguaggio preferiresti usare e che conosci ?
L' applicativo deve girare su una sola o piu piattaforme ?
Quali piattaforme ?
E' un' applicativo per uso privato o commerciale ?
Se è commerciale quale licenza vuoi dargli ?
D. Quale linguaggio preferiresti usare e che conosci ?
R. Il C

D. L'applicativo deve girare su una sola o piu piattaforme ?
R. Ho cercato di usare un C che vorrebbe essere molto vicino al K&R e quindi la speranza e di riuscirlo a compilare su qualsiasi piattaforma (ovviamente previa verifica); di conseguenza, se fosse possibile, sarebbe bello che fosse indipendente dal sistema operativo. Se cio' non fosse, l'ordine di preferenza sarebba linux, Windows, MacOs

D. Quali piattaforme ?
R. Come precedentemente, le principali o in ordine di preferenza linux, Windows, MacOs

D. E' un' applicativo per uso privato o commerciale ?
R. Al momento sicuramente privato.

Ciao
f***@gmail.com
2014-06-11 13:32:34 UTC
Permalink
Post by arkkimede
R. Il C
R. Come precedentemente, le principali o in ordine di preferenza linux, Windows, MacOs
R. Al momento sicuramente privato.
GTK :)

Ciao!
enoquick
2014-06-11 14:38:09 UTC
Permalink
Post by f***@gmail.com
Post by arkkimede
R. Il C
R. Come precedentemente, le principali o in ordine di preferenza linux, Windows, MacOs
R. Al momento sicuramente privato.
GTK :)
Ciao!
Dovrebbero andare bene anche per windows
Ma programmare GUI in C secondo me è un incubo
f***@gmail.com
2014-06-11 14:51:52 UTC
Permalink
Post by enoquick
Post by f***@gmail.com
GTK :)
Dovrebbero andare bene anche per windows
Sì, certo, vanno.
Post by enoquick
Ma programmare GUI in C secondo me è un incubo
Condivido, anche se, se quello conosce, quello può usare :)

Dipende quant'è difficile quest'inferfaccia: all'estremo il tempo "perso"
imparando un nuovo linugaggio di più ad alto livello potrebbe essere minore
di quello speso nel fare tutto in C plain.

C'è anche da dire che programmare in C con le GTK e in C++ con le Qt (anche
usando il creator, che risparmia un sacco di tempo) siamo lì, cambia ben poco.
In caso bisogna andare su tipo sulle QtQuick, o roba simile, ma appunto, è
altra roba (che magari già sa, in fondo è tipo JS/CSS).
Io un'occhiata gliela darei.

Ciao!

P.S. Un'altra comodità di avere tutto in C, bisogna notare, è che non bisogna
passare troppo tempo a disaccoppiare logica e GUI, cosa di per-se giusta,
ma che a volte non ripaga in termini di tempo o qualità del prodotto finale.
arkkimede
2014-06-13 16:30:46 UTC
Permalink
Post by f***@gmail.com
Post by enoquick
Post by f***@gmail.com
GTK :)
Dovrebbero andare bene anche per windows
Sì, certo, vanno.
Post by enoquick
Ma programmare GUI in C secondo me è un incubo
Condivido, anche se, se quello conosce, quello può usare :)
Dipende quant'è difficile quest'inferfaccia: all'estremo il tempo "perso"
imparando un nuovo linugaggio di più ad alto livello potrebbe essere minore
di quello speso nel fare tutto in C plain.
C'è anche da dire che programmare in C con le GTK e in C++ con le Qt (anche
usando il creator, che risparmia un sacco di tempo) siamo lì, cambia ben poco.
In caso bisogna andare su tipo sulle QtQuick, o roba simile, ma appunto, è
altra roba (che magari già sa, in fondo è tipo JS/CSS).
Io un'occhiata gliela darei.
Ciao!
P.S. Un'altra comodità di avere tutto in C, bisogna notare, è che non bisogna
passare troppo tempo a disaccoppiare logica e GUI, cosa di per-se giusta,
ma che a volte non ripaga in termini di tempo o qualità del prodotto finale.
Ringrazio tutti per i consigli.
Ho provato GTK+ e seguendo il tutorial sono riuscito a compilare i primi esempi (pur avendo avuto qualche problema con pkg-config che non era configurato correttamente).
Non era qualcosa di nuovo per me avendo una decina di anni fa lavorato con Xlib e Morif: si catturano gli eventi a cui siamo interessati e si accodano per essere poi gestiti secondo le necessita'.

Ancora una volta rivolgendomi a questo NG ho avuto utili consigli e suggerimenti. Peccato che ultimamente non abbia il traffico che meriterebbe grazie alle esperienze e conoscenze che vi gravitano attorno.
Spaccafumo
2015-03-03 16:33:42 UTC
Permalink
Post by arkkimede
Dopo vari mesi di debugging e sviluppo sono riuscito ad ottenere un codice che funziona correttamente.
Per renderlo un po' piu' "usabile" vorrei dotarlo di interfaccia grafica e qui iniziano i problemi.
Come procedere?
Considerato che mi muovo male in ambiente Microsoft VC (e non conosco il C++) e preferisco sicuramente linux (al massimo con la pistola alla tempia cygwin) ho provato a guardarmi in giro ma, causa mia inesperienza, ho tanta confusione in testa.
Proprio perche' non ho mai fatto niente di simile prima (anni fa avevo fatto l'interfaccia grafica con matlab che lanciava un eseguibile c ma non mi ha mai soddisfatto a pieno perche' le due cose erano separate e non c'era alcun controllo tra i due ambiti), ho paura di prendere una strada sbagliata e magari accorgermene dopo 3 o 4 mesi di infruttuosi tentativi.
Quello che in definitiva cerco e' una libreria per estendere il mio codice C e dotarlo di interfaccia grafica.
Sapreste indirizzarmi verso una direzione?
Grazie
Non so cosa tu stia facendo e comunque non credo sia facile da
indovinare. Per conto mio uso il C quando voglio ottenere cose semplici
(es. calendari, calcoli ripetitivi, notificatori di email, effemeridi
ecc. ecc.) che funzionino. Per la grafica via di system, popen,
snprintf e sscanf per distribuire i compiti ai vari gxmessage, Xdialog,
Yad, Gtkdialog ecc. ecc. che servono per input e output.
In linux, naturalmente. Sono qui occasionalmente perché ho bisogno
di qualcuno che mi faccia vedere lo scritto giusto per mettere al
lavoro libspopc con Gmail e la sua SSL.

Saluti.

Loading...