ruby-gnome2-hiki-pt_BR****@sourc*****
ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 10日 (土) 08:35:43 JST
------------------------- REMOTE_ADDR = 200.216.145.78 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-treeview-model-add ------------------------- = Adicionando Linhas a um Armazenador {{link "tut-treeview-model-reference", "tut-treeview-model", "tut-treeview", "tut-treeview-model-manipulate"}} == Adicionando Linhas a um Armazenador de Lista As linhas s$BeP(B adicionadas a um armazenador de lista com Gtk::ListStore#append. Isso inseriruma nova linha vazia no final da lista. Existem outros m$BqU(Bodos, documentados na documenta$Bne(Bo de refer$BsO(Bcia de Gtk::ListStore, que dmais controle sobre exatamente onde a nova linha inserida, mas como eles funcionam de maneira parecida ao Gtk::ListStore#append e s$BeP(B bastante diretos de usar, n$BeP(B trataremos com eles aqui. Eis um exemplo simples de como criar um armazenador de lista e adicionar uma linha vazia a ele: liststore = Gtk::ListStore.new(String) # Adicionar uma linha vazia ao armazenador de lista. O "iter" apontarpara a nova linha. iter = liststore.append Isso sozinho n$BeP(B de muito uso ainda, claro. N$B(B adicionaremos dados as linhas na pr$B(Bima se$Bne(Bo. == Adicionando Linhas a um Armazenador de $BAr(Bvore Adicionar linhas a um armazenador de $Bar(Bvore funciona de maneira parecida com adicionar linhas a um armazenador de lista, a $Bzn(Bica coisa que o Gtk::TreeStore#append o m$Bit(Bodo usado e mais um argumento exigido, especificamente o "iter" de $Bar(Bvore para pai da linha que serinserida. Se vocfornecer nil em vez de fornecer um "iter" de $Bar(Bvore de outra linha, uma nova linha de n$Bmv(Bel superior serinserida. Se vocfornecer um "iter" de $Bar(Bvore pai, a nova linha vazia serinserida ap$Bss(B qualquer filho que jexista do pai. De novo, existem outras maneiras de inserir uma linha em um armazenador de $Bar(Bvore e elas est$Bco(B documentadas na documenta$Bgc(Bo de refer$Bjn(Bcia de Gtk::TreeStore. Outro exemplo curto: treestore = Gtk::TreeStore.new(String) # Adiciona uma linha vazia de n$Bmv(Bel superior ao armazenador de $Bar(Bvore. parent_iter = treestore.append(nil) # Adiciona um filho a linha que acabamos de adicionar. child_iter = treestore.append(parent_iter) == Problemas de Performance ao Adicionar muitas Linhas Um caso comum que um model precisa ser preenchido com um bocado de linhas em algum momento, seja no in$Bmc(Bio ou quando algum arquivo for aberto. Um caso igualmente comum que isso leva um terr$Bmv(Bel tmepo longo, mesmo em m$Baq(Buinas poderosas, uma vez que o model contenha mais que alguns milhares de linhas, com uma taxa de inser$Bgc(Bo que vai diminuindo exponencialmente. Existem algumas coisas que vocpode fazer para contornar esse problema e acelerar um pouco as coisas. Primeiramente, vocdeve certificar-se que a ordena$Bgc(Bo estdesabilitada enquanto vocestfazendo a sua inser$Bgc(Bo em massa, de outra maneira o seu armazenador poderser reordenado ap$Bss(B cada inser$Bgc(Bo de linha simples, o que vai ser qualquer coisa, menos r$Bap(Bido.. Segundo, vocn$Bco(B deve manter um monte de refer$Bjn(Bcias de linha de $Bar(Bvore se voctem tantas linhas, porque com cada inser$Bgc(Bo (ou remo$Bgc(Bo), cada refer$Bjn(Bcia de linha de $Bar(Bvore precisarchecar se o seu caminho precisa ser atualizado ou n$Bco(B.