[mozbr-desenvolvimento] dúvida - programação em XUL
Fernando Pereira Silveira
fernandopsilveira em yahoo.com.br
Terça Abril 3 14:19:26 BRT 2007
Citando Jeferson Hultmann:
> Acredito que o problema está relacionado a chamada/implementação do
> QueryInterface. Mas sem ver o código todo não dá pra dizer. :-)
O código (esboço) é o seguinte:
ARQUIVO 1
-----------------
var controledescripts = {
adicionarEvento: function() {
if (this.listaDisponiveis.selectedItem) {
var lower =
this.listaDisponiveis.selectedItem.getAttribute("label").toLowerCase();
if (!estaNaLista(lower, this.eventosValidos)) {
this.eventosValidos.push(lower);
this.eventosValidos = this.eventosValidos.sort();
this.carregarEventos(true);
}
else
alert(this.stringset.getString("controledescripts.eventOnList"));
}
},
adicionarPermissao: function() {
var perm = new Permissao("Window.status", "sameOrigin");
this.arvore.view.adicionarItem(perm);
},
atualizarBotoesEventos: function() {
if (this.listaDisponiveis.selectedItem)
this.botaoAdicionarEvento.disabled = false;
else
this.botaoAdicionarEvento.disabled = true;
if (this.listaPermitidos.selectedItem)
this.botaoRemoverEvento.disabled = false;
else
this.botaoRemoverEvento.disabled = true;
},
atualizarCaixa: function() {
this.caixaIcones.disabled = this.caixaFerramentas.checked;
},
carregarArvore: function(categoria) {
var nomes =
obterString("controledescripts.policy."+categoria).split(",");
var itens = new Array();
if (listaEstaVazia(nomes))
nomes.splice(0, 1);
for (i in nomes) {
var status =
obterString("capability.policy."+categoria+"."+nomes[i]);
var item = new Permissao(nomes[i], status);
itens.push(item);
}
this.arvore.view = new Arvore(itens);
},
carregarCaixas: function() {
var caixas = document.getElementsByTagName("checkbox");
var inversas = document.getElementsByAttribute("inverted", "true");
for (var i = 0; i < caixas.length; i++)
if (estaNaLista(caixas[i], inversas))
caixas[i].checked =
!obterBooleana(caixas[i].getAttribute("preference"));
else
caixas[i].checked =
obterBooleana(caixas[i].getAttribute("preference"));
this.atualizarCaixa();
},
carregarCategorias: function() {
var itens = this.popupCategorias.childNodes;
var padrao = document.createElement("menuitem");
for (var i = itens.length - 2; i > 0; i--)
this.popupCategorias.removeChild(this.popupCategorias.lastChild);
if (!listaEstaVazia(this.categorias)) {
this.separador.hidden = false;
this.categorias = this.categorias.sort();
for (i in this.categorias) {
var menuitem = document.createElement("menuitem");
menuitem.setAttribute("label", this.categorias[i]);
menuitem.setAttribute("oncommand",
"controledescripts.carregarArvore(\""+this.categorias[i]+"\");");
this.popupCategorias.appendChild(menuitem);
}
}
else
this.separador.hidden = true;
},
carregarEventos: function(recarga) {
if (recarga)
for (var i = 0; i < this.tamanhoAnteriorEventos; i++)
if (this.listaPermitidos.hasChildNodes)
this.listaPermitidos.removeChild(this.listaPermitidos.lastChild);
for (i in this.eventosValidos)
this.listaPermitidos.appendItem(this.eventosValidos[i]);
this.tamanhoAnteriorEventos = this.eventosValidos.length;
this.atualizarBotoesEventos();
},
criarCategoria: function() {
},
iniciar: function() {
this.iniciarItens();
this.eventosValidos =
obterString("dom.popup_allowed_events").split(" ");
this.categorias =
obterString("capability.policy.policynames").split(" ");
if (listaEstaVazia(this.eventosValidos))
this.eventosValidos.splice(0, 1);
if (listaEstaVazia(this.categorias))
this.categorias.splice(0, 1);
this.tamanhoAnteriorEventos = this.eventosValidos.length;
this.carregarCaixas();
this.carregarEventos(false);
this.carregarCategorias();
this.carregarArvore("default");
this.tempomaximo.value = obterInteiro("dom.max_script_run_time");
},
iniciarItens: function() {
this.stringset = document.getElementById("prefs-strings");
this.tabbox = document.getElementById("prefs-tabbox");
this.botaoAdicionarEvento =
document.getElementById("basico-adicionar");
this.botaoRemoverEvento =
document.getElementById("basico-remover");
this.caixaContexto =
document.getElementById("outros-ocultarcontexto");
this.caixaFerramentas =
document.getElementById("outros-ocultarmenu");
this.caixaIcones =
document.getElementById("outros-exibiricones");
this.listaDisponiveis =
document.getElementById("basico-disponiveis");
this.listaPermitidos =
document.getElementById("basico-permitidos");
this.tempomaximo =
document.getElementById("outros-tempomaximo");
this.arvore = document.getElementById("avancado-arvore");
this.menuCategorias =
document.getElementById("avancado-categorias");
this.popupCategorias =
document.getElementById("avancado-categorias-popup");
this.separador =
document.getElementById("avancado-separador");
},
removerEvento: function() {
if (this.listaPermitidos.selectedItem) {
var i =
posicaoNaLista(this.listaPermitidos.selectedItem.getAttribute("label"),
this.eventosValidos);
this.eventosValidos.splice(i, 1);
this.carregarEventos(true);
}
},
removerPermissao: function() {
if
(confirm(this.stringset.getString("controledescripts.deletePermission")))
this.arvore.view.removerItem();
},
salvar: function() {
if (this.tempoValido()) {
this.salvarCaixas();
salvarString("dom.popup_allowed_events",
this.eventosValidos.join(" "));
salvarString("capability.policy.policynames",
this.categorias.join(" "));
salvarInteiro("dom.max_script_run_time",
this.tempomaximo.value);
return true;
}
return false;
},
salvarCaixas: function()
{
var caixas = document.getElementsByTagName("checkbox");
var inversas = document.getElementsByAttribute("inverted", "true");
for (var i = 0; i < caixas.length; i++)
if (estaNaLista(caixas[i], inversas))
salvarBooleana(caixas[i].getAttribute("preference"),!caixas[i].checked);
else
salvarBooleana(caixas[i].getAttribute("preference"),
caixas[i].checked);
},
sobreEvento: function()
{
if (this.listaDisponiveis.selectedItem)
openDialog("chrome://controledescripts/content/evento.xul",
"controledescripts-sobre",
"chrome,centerscreen,modal",
this.listaDisponiveis.selectedItem.getAttribute("label"));
},
tempoValido: function()
{
var valor = this.tempomaximo.value;
var inteiro = new RegExp(/^-?\d+$/);
if (!valor || !inteiro.test(valor)) {
this.tabbox.selectedIndex = 2;
this.tempomaximo.focus();
if (valor)
alert(this.stringset.getString("controledescripts.invalidInteger"));
else
alert(this.stringset.getString("controledescripts.emptyBox"));
return false;
}
return true;
}
}
ARQUIVO 2
-----------------
function Arvore(itens) {
this.itens = itens;
}
Arvore.prototype = {
getCellText: function(linha,coluna) {
var texto = new String();
if (coluna.id == "avancado-propriedade")
texto = this.itens[linha].propriedade;
else
switch (this.itens[linha].status) {
case "noAccess": texto =
controledescripts.stringset.getString("controledescripts.block");break;
case "allAccess": texto =
controledescripts.stringset.getString("controledescripts.allow");break;
case "sameOrigin": texto =
controledescripts.stringset.getString("controledescripts.sameorigin");break;
}
return texto;
},
adicionarItem: function(novoItem) {
this.itens.push(novoItem);
this.treebox.rowCountChanged(this.rowCount, 1);
},
removerItem: function() {
var linha = this.selection.currentIndex;
if (linha >= 0) {
this.itens.splice(linha, 1);
this.treebox.rowCountChanged(linha, -1);
}
},
get rowCount(){ return this.itens.length; },
getCellProperties: function(linha,coluna,props){},
getColumnProperties: function(colid,coluna,props){},
getImageSrc: function(linha,coluna){ return null; },
getRowProperties: function(linha,props){},
isContainer: function(linha){ return false; },
isSeparator: function(linha){ return false; },
isSorted: function(){ return false; },
setTree: function(treebox){ this.treebox = treebox; }
}
_______________________________________________________
Yahoo! Mail - Sempre a melhor opção para você!
Experimente já e veja as novidades.
http://br.yahoo.com/mailbeta/tudonovo/
Mais detalhes sobre a lista de discussão mozbr-desenvolvimento