2007-06-25

CFFORM - Tree - DragDrop

Já escrevi algumas matérias sobre tree, com códigos meus:
Ações e eventos
Tree.dataProvider com XML complexo
mx:Tree addNode/removeNode 2
mx:Tree addNode/removeNode

Ou lembretes sobre outras matérias:
mx:Tree

Mas percebi que nenhuma demonstra o uso de DragDrop, então implementei um pequeno script de exemplo para vocês, e o resultado pode ser observado no filme a seguir.

youtube



<cfform format="flash" name="form" onload="initDragDrop();">
<cfformitem type="script">
function initDragDrop(){
tree.dragEnabled = true;
lista.dragEnabled = true;
tree.multipleSelection = true;
lista.multipleSelection = true;
tree.addEventListener('dragEnter' , dragEnterEvent );
lixeira.addEventListener('dragEnter' , dragEnterEvent );
tree.addEventListener('dragDrop', dragCompleteEvent);
lixeira.addEventListener('dragDrop', dragCompleteEvent);

}
function dragEnterEvent(event){
var source = event.dragSource._data.source;
event.handled = source.__id == 'tree' ? true : ( event.target._name == 'tree' ? true : false );
}
function dragCompleteEvent(event){
var source = event.dragSource._data.source;
if(event.target._name == 'lixeira' && source.__id == 'tree'){
for(var i = _root.tree.selectedNodes.length-1; i>=0; i--){
_root.tree.selectedNodes[i].removeTreeNode();
}
}else if(event.target._name == 'tree' && source.__id == 'lista'){
if(event.target.selectedNode == null){
for(var i = 0; i < source.selectedItems.length; i++){
event.target.addTreeNode(source.selectedItems[i].label,source.selectedItems[i].data);
}
}else{
for(var i = 0; i < source.selectedItems.length; i++){
event.target.selectedNode.addTreeNode(source.selectedItems[i].label,source.selectedItems[i].data);
}
}
}
}
</cfformitem>
<cfformgroup type="horizontal" width="480">
<cftree name = "tree" height="400" width = "250" >
<cftreeitem value="Departamentos" parent="Departamentos" expand="yes">
<cftreeitem value="DPR" parent="Departamentos" expand="yes">
<cftreeitem value="DOP" parent="Departamentos" expand="yes">
<cftreeitem value="DDP" parent="Departamentos" expand="yes">
<cftreeitem value="Empregados" parent="Empregados" expand="yes">
<cftreeitem value="Pedro" parent="Empregados" expand="yes">
<cftreeitem value="Claudio" parent="Empregados" expand="yes">
<cftreeitem value="pcsilva" parent="Empregados" expand="yes">
</cftree>
<cfformitem type="spacer" />
<cfselect name="lixeira" size="4" width="50" />
<cfformitem type="spacer" />
<cfselect name="lista" width="100" size="4" >
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
</cfselect>
</cfformgroup>

</cfform>

2007-06-24

Duplicate CFC tem funcionalidade?

Com a nova funcionalidade da função Duplicate agora podemos armazenar o contexto completo da sessão, incluindo variáveis do tipo componente.
Antes para que uma variável do tipo componente criada durante uma sessão, que tem tempo de vida predefinido, não fosse perdida em sessões futuras, o desenvolvedor precisava de alguma POG, utilizando WDDX, ou algum código extenso, copiando as variáveis contidas no objeto componente. Esta nova funcionalidade do Duplicate será uma 'mão na roda'.
Tenho visto alguns criando componentes e copiando-o sem se quer iniciar o componente. Não aconselho. Aconselho o uso do createobject (component).

Para um exemplo simples, imagine uma aplicação onde uma montadora de veículos possui o Carro.cfc, e tudo mais acima dele, e a cada sessão (web) de um gerente de qualquer setor, encarregado de uma parte específica do projeto, ele precise ter armazenado o histórico do que seu setor (sua sessão web) implementou, a dias ou semanas atrás, em um carro em particular, ou mesmo em todos os carros.

Sabendo que todas as propriedades do Carro estarão no objeto Carro, fica mais simples armazenar este objeto em um escopo mais persistente (aqui chamo atenção dos desenvolvedores que dispõem de servidores compartilhados - este procedimento NÃO é apropriado, CASO a jvm seja a mesma para todo o servidor).

Com Duplicate(CFC) isto se resume a um script de no mínimo 23 linhas no Application.cfc, bastando usar o escopo session para criar novos Carro.cfcs com o createobject.

<cfcomponent>

<cfset this.name = "Montadora">
<cfset this.sessionmanagement = true>

<cffunction name="onApplicationStart">
<!--- Atenção com servidores compartilhados --->
<!--- cria variável que conterá todos os contextos de todas as sessões --->
<cfset Application.contextsaved = {} >
<cfreturn true>
</cffunction>

<cffunction name="onSessionEnd">
<cfargument name="SessionScope">
<cfargument name="ApplicationScope">
<!--- Cria variável expired com horario corrente no escopo this do componente --->
<cfset SessionScope.carro.expired = now() >
<!--- com o fim da sessão, armazeno o contexto do carro corrente no escopo application --->
<cfset ArrayAppend(ApplicationScope.contextsaved[CGI.REMOTE_ADDR],Duplicate(SessionScope.carro))>
</cffunction>

<cffunction name="onSessionStart">
<cfif StructKeyExists(Application.contextsaved,CGI.REMOTE_ADDR) and ArrayLen(Application.contextsaved[CGI.REMOTE_ADDR])>
<!--- sessão corrente possui histórico, que é restiduido --->
<cfset Session.carros = Application.contextsaved[CGI.REMOTE_ADDR] >
<cfelse>
<!--- sessão corrente NÃO possui histórico --->
<cfset Application.contextsaved[CGI.REMOTE_ADDR] = [] >
<cfset Session.carros = [] >
</cfif>
<!--- Cria a variável carro --->
<cfset Session.carro = {} >
</cffunction>

</cfcomponent>



Isto tornará cada item do array session.carros um objeto com as propriedades e métodos intactos, após o término da manipulação de carro em especial.
E o desenvolvedor pode atribuir manualmente um novo carro no histórico (<cfset ArrayAppend(Application.contextsaved[CGI.REMOTE_ADDR],Duplicate(Session.carro))>), antes mesmo da sessão expirar.

2007-06-22

Randomize letras

Continuando meu pensamento sobre asc, quando fui interrompido...
Vi uma pergunta sobre randomizar letras, já deve existir em algum lugar, mas desenvolvi a minha.


<cffunction name="randChar">
<cfscript>
var qchar = QueryNew("") ;
var qchar2 = '' ;
var char1 = 65 ;
var char2 = 122 ;
var char3 = 0 ;
if(StructKeyExists(ARGUMENTS,"1")) char1 = Asc(ARGUMENTS['1']);
if(StructKeyExists(ARGUMENTS,"2")) char2 = Asc(ARGUMENTS['2']);
QueryAddColumn(qchar,"c",ListToArray("65,66,67,68,69,70,71,72,73,
74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,
101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,
117,118,119,120,121,122"));
if(char1 gt char2){
char3 = char1;
char1 = char2;
char2 = char3;
}
</cfscript>
<cfquery name="qchar2" dbtype="query">
select c from qchar
where c >= #char1# and c <= #char2#
</cfquery>
<cfif NOT qchar2.recordcount>
<cfreturn Chr(qchar.c[RandRange(1,qchar.recordcount)])>
</cfif>
<cfreturn Chr(qchar2.c[RandRange(1,qchar2.recordcount)])>
</cffunction>
<cfoutput>#randChar("c","P")#</cfoutput>

Entresafra provoca especulação

Quando o mercado enfrenta a entresafra, os investidores criam argumentos especulativos, por vezes para destrair, outras vezes como jutificativa para a própria entresafra. Tanto faz o importante mesmo é desviar do motivo ou culpado pela entresafra, pois este sempre acaba voltando.

2007-06-21

Randomize cores

Vi uma pergunta sobre randomizar cores, já deve existir em algum lugar, mas desenvolvi a minha.



<cffunction name="randColor">
   <cfset var color1 = InputBaseN("000000",16)>
   <cfset var color2 = InputBaseN("FFFFFF",16)>
   <cfif( StructKeyExists(ARGUMENTS,"1") )>
      <cfset color1 = InputBaseN(ARGUMENTS['1'],16)>
   </cfif>
   <cfif( StructKeyExists(ARGUMENTS,"2") )>
      <cfset color2 = InputBaseN(ARGUMENTS['2'],16)>
   </cfif>
   <cfif(color1 gt color2)>
      <cfreturn FormatBaseN(randrange(color2,color1),16)>
   </cfif>
   <cfreturn FormatBaseN(randrange(color1,color2),16)>
 </cffunction>
<div
  style=" width:80px;
  height:80px;
  background-color: #<cfoutput>#randColor("FFFFFF","CCCCCC")#</cfoutput>;" />

Internet, o Brasil terá uma?

Imagine que toda vez em que usar o telefone você deva ir a um órgão público e registrar suas conversas e esperar pela autorização.

Já ouviu ou leu algo parecido com isto?

É o que a grande maioria suspeita que deva acontecer com posts em blogs, foruns, portais, e midias do gênero, isto porque está em tramitação no congresso um Projeto de Lei que regula a internet e não é divulgado, debatido (com os grandes afetados).
O que nos remete ao primeiro parágrafo.

Eu já havia falado sobre isso mais de uma vez, e também Caribe.

Agora a SaferNet Brasil, o Centro de Tecnologia e Sociedade da Escola de Direito da Fundação Getúlio Vargas, Projeto Software Livre Brasil, a Free Software Foundation América Latina, a Rede de Informações para o Terceiro Setor, o Instituto de Estudos e Projetos em Comunicação e Cultura, o Comitê para Democratização da Informática em Pernambuco, o Coletivo Intervozes, o Instituto Brasileiro de Defesa do Consumidor e o Instituto Brasileiro de Política e Direito da Informática, uniram forças para que exista um debate e transparência no PL de Controle da Internet.

INFORME-SE!!!!

fonte



Curiosamete o registro está com problemas.

2007-06-19

Mais um AC CF Brazuca

Um maninho meu acaba de certificar-se em CF7.
Rogerio Oliveira da Zellen, parabéns maninho.
Só falta um.

2007-06-16

Open Source Flash Conference

O segundo Open Source Flash Conference ocorrido ontem contou com os seguintes palestrantes e assuntos:

Aral Balkan - Keynote Speech
https://breeze.itap.purdue.edu/p53406718/

Ralph Hauwert - Papervision 3D
https://breeze.itap.purdue.edu/p83105421/

Aral Balkan - SWX
https://breeze.itap.purdue.edu/p62103321/

Nicolas Cannasse - Haxe Programming Language
https://breeze.itap.purdue.edu/p22188329/

Firdosh Tangri - ASWing Component Framework
https://breeze.itap.purdue.edu/p20838194/

John Grden - The Red5 Project
https://breeze.itap.purdue.edu/p20388149/

Igor Costa - Flex Applications using Flex 2 SDK and Granite Data Services and Conclusion
https://breeze.itap.purdue.edu/p19208031/

Special Drum Solo - John Grden
https://breeze.itap.purdue.edu/p38865264/


Para saber mais acesse osflash.

2007-06-14

Flash Player 9 Update - beta

A Adobe disponibilizou o beta do update do FP9 no labs, contemplando um número maior de SO que em outras vezes.

A turma do linux pode sentir-se prestigiada.

# este script deve ser considerado como temporário,
# considerando o tempo de vida do título BETA
wget http://download.macromedia.com/pub/labs/flashplayer9_update/flashplayer9_install_linux_061107.tar.gz
tar -xvf flashplayer9_install_linux_061107.tar.gz
cd install_flash_player_9_linux
chmod 777 flashplayer-installer
./flashplayer-installer

Desafio Pan MXSTUDIO

O concurso promovido pelo MXSTUDIO visa a criação de um hotsite sobre o PAN 2007, e possui como requisito a utilização de uma das tecnologias entre várias, como ColdFusion, e os prêmios são bem interessantes.


Desafio PAN MXSTUDIO

logo

2007-06-02

ColdFusion 8 servindo paginas PHP

Sim isso mesmo, veja o post de Sean Corfield onde está sendo disponibilizada a customtag e as bibliotecas necessárias.

Há pouco Sean atualizou o post, e com ela agora ColdFusion 8 disponibiliza PHP e Ruby.

CFFORM Chart - tutorial

Acabo de publicar mais um artigo no MXSTUDIO, desta vez falando sobre um video aqui, então veja como construir aplicações MXML 1.5 em CFFORMs Flash.