Depois primeira postagem Eu li um comentário que seria melhor começar com algo mais complexo do que um "hello world", então farei uma sequência (3 ou 4) postar a criação de um aplicativo simples (com vala + gtk 3).
O aplicativo consistirá em um jogo simples de perguntas e respostas de múltipla escolha (tipo Trivia), em que responder a 3 perguntas termina errado (game over), e o objetivo é responder o maior número de perguntas possível, para cada questão que você limitou tempo para resposta.
Projeto
O design principal de nosso aplicativo será:
Posteriormente colocaremos alguns botões que nos darão a opção de 50% (eliminando duas respostas erradas), congelar o tempo, passar uma pergunta. Todos eles podem ser usados apenas uma vez, sendo desativados uma vez usados.
Projete um Código
Como podemos ver no design, podemos ver os elementos gtk que usaremos:
Respostas -> Botão.
Pergunta -> Etiqueta.
Tempo -> ProgressBar.
Pontos e perguntas errados / corretos -> Etiqueta.
Podemos ver que temos uma estrutura vertical, portanto, podemos usar GBox verticalmente.
Código
int main (string [] args) {Gtk.init (ref args); janela var = novo Gtk.Window (); window.title = "app"; window.window_position = Gtk.WindowPosition.CENTER; window.set_default_size (300, 340); window.destroy.connect (Gtk.main_quit); window.set_border_width (10); // caixa vertical var box = new Gtk.Box (Gtk.Orientation.VERTICAL, 0); box.set_spacing (10); // Rótulo para a questão var question = new Gtk.Label ("Question?"); // barra de tempo progressiva var time_bar = new Gtk.ProgressBar (); time_bar.set_text ("Time"); time_bar.set_show_text (true); // Botões de resposta var response1 = new Gtk.Button.with_label ("Response 1"); var resposta2 = novo Gtk.Button.with_label ("Responder 2"); var resposta3 = novo Gtk.Button.with_label ("Responder 3"); var resposta4 = novo Gtk.Button.with_label ("Responder 4"); // informação dos rótulos var points = new Gtk.Label ("Points: 0"); box.pack_start (pergunta); box.pack_start (time_bar); box.pack_start (reply1); box.pack_start (resposta2); box.pack_start (resposta3); box.pack_start (resposta4); box.pack_start (pontos); window.add (caixa); window.show_all (); Gtk.main (); return 0;}
Para mover o "tempo" usamos GLib.Timeout onde a cada 500 milissegundos ele será ativado (é um loop onde a variável que contém o valor de nossa barra aumentará)
GLib.Timeout.add (500, () => {// Obtenha o progresso atual: // (0.0 -> 0%; 1.0 -> 100%) double progress = time_bar.get_fraction (); // Atualize a barra: progress = progress + 0.01; time_bar.set_fraction (progress); // Repete até 100% retornar progresso <1.0;});
Links de interesse
http://www.valadoc.org/#!wiki=index (você pode encontrar todos os elementos gtk com seus métodos ...)
Muito bom, vou perguntar como posso fazer uma espécie de TABS mas verticalmente, embora não tenham que ser necessariamente tabs, podem ser botões ou ToggleButtons, mas preciso do comportamento de uma tab, que ao tocar em 1 seu conteúdo é visto e a outra aba está desabilitada, não sei se me explico, deixo uma imagem para ver se você pode me dar alguma informação para investigar. Obrigado!
IMAGEM: http://i.imm.io/1jURw.png
O "layout" ou a mudança de texto (por exemplo)?
Parla catalã
Isso é muito bom na verdade é algo parecido com o que eu estava procurando, uma pergunta, essa pergunta poderia estar ligada ao terminal de alguma forma?
Por exemplo: Para começar aproveito para responder deixo no ilimitado e é isso que gostaria de fazer.
Qual ambiente de área de trabalho você deseja instalar?
KDE
Gnome 3
Canela
Unity
E cada um destes que estava ligado ao seu respectivo comando de instalação no terminal, sudo apt-get install ubuntu-desktop
Sim, você apenas teria que escrever Process.spawn_command_line_async ("apt-get install ubuntu-desktop");
http://valadoc.org/#!api=glib-2.0/GLib.Process.spawn_command_line_sync
Excelente, gostei do post, estarei praticando (e estou ansioso por isso), saudações