Newer
Older
ubChattin / src / ubChattin.mxml
@reddawg reddawg on 11 Feb 2008 8 KB Sync
<?xml version="1.0" encoding="utf-8"?>
<!--
  Copyright 2008 Christopher Olsen <cwolsen@domainatlantic.com>
  
  $Id$
-->
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="initApp();" horizontalScrollPolicy="off" verticalScrollPolicy="off" width="500" height="500" backgroundColor="#FFFFFF" xmlns:local="*">
  <mx:Style>
    Panel {
      borderAlpha: 1;
      borderThicknessLeft: 10;
      borderThicknessTop: 0;
      borderThicknessBottom: 0;
      borderThicknessRight: 10;
      roundedBottomCorners: true;
      cornerRadius: 8;
      headerHeight: 23;
      highlightAlphas: 0, 0.12;
      headerColors: #efaa15, #e6780c;
      titleStyleName: "myPanelTitle";
      }
    .myPanelTitle {
      color: #ffffff;
      fontSize: 12;
      fontWeight:bold;
      }
    .myInPanel {
      footerColors: #4e84df, #0f6cc3;
      }	
    ControlBar {
      paddingTop:2px;
      paddingBottom:2px;
      height:15px;
      }
    ComboBox {
      fillColors: #efaa15, #e6780c;
      fillAlphas: 1.0, 1.0;
      }
    Tab {
      fillAlphas: 1.0, 1.0;
      fillColors: #efaa15, #e6780c;
      roundedCorners: true;
      cornerRadius: 7;
      borderThickness: 0;
      }
    .curTab {
      fillAlphas: 1.0, 1.0;
      fillColors: #efaa15, #e6780c;
      roundedCorners: true;
      cornerRadius: 7;
      borderThickness: 0;
      }
    TabNavigator {   
      backgroundColor: #E2E2E2;
      tabOffset: 8;
      paddingTop: 0;
      borderThickness: 0;
      }
  </mx:Style>
  <mx:Script>
  <![CDATA[
    import mx.collections.ArrayCollection;
    import mx.controls.Alert;
    
  	[Bindable]
    public var tvMaster:Master = new Master();
    [Bindable]
    private var uM:ContextMenu;
    private var chatHist:Array;
    private var chatHistPos:Number = 0;
    
    /* Entry Point To TUve */
    private function initApp():void {
      tvMaster.init(this);
            
      this.addEventListener(TextEvent.LINK,doOpenInfo);
      
      /* Get Global Variables */
      tvMaster.chanSpec = Application.application.parameters.channel;
      tvMaster.guestUser = Application.application.parameters.guestuser;
      
      /* Fetch Register Channel Lust */
      tvMaster.tuveGetChans();
      
      /* Assemble Our Custom Context Menu */
      uM = new ContextMenu();
      uM.hideBuiltInItems();
      var cmi:ContextMenuItem = new ContextMenuItem("Whois",false);
      cmi.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,doWhois);
      uM.customItems.push(cmi);
      cmi = new ContextMenuItem("Kick",false);
      cmi.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT,doKick);
      uM.customItems.push(cmi);
      
      chatHist = new Array();
      
      if (tvMaster.tvSO.data.volume != null)
        volume.value = Number(tvMaster.tvSO.data.volume);

      this.setChildIndex(selChan,this.numChildren-1);
      this.setChildIndex(volBox,this.numChildren-1);
      mainPanel.height -= 4;
      }
      
    private function doOpenInfo(event:TextEvent):void {
      tvMaster.tuveShowIW(Number(event.text));
      }
      
    public function doWhois(event:ContextMenuEvent):void {
      tvMaster.tvNetwork.sendData("WHOIS " + userDispList.selectedItem.@data + "\n");
      }
      
    public function doKick(event:ContextMenuEvent):void {
      tvMaster.tvNetwork.sendData("KICK " + tvMaster.currentChannel + ":" + userDispList.selectedItem.@data + ":Bye!\n");
      }
      
    
    private function sendText():void {
      var tmpString:String;
      if ((chatText.text.length > 0) && (tvMaster.tvNetwork.tvNetCon == true)) {
        var myPattern:RegExp = /</g;
        tmpString = chatText.text.replace(myPattern,"&lt;");
        
        if (chatText.text.length > 0) {
      	  chatHist.push(chatText.text);
      	  if (chatHist.length > 20)
      	    chatHist.shift();
            
      	  chatHistPos = chatHist.length - 1;
      	  }
        
      	if (chatText.text.indexOf("/") == 0) {
      	  tvMaster.parseCommand(tmpString);
      	  chatText.text = "";
      	  }
      	else {
          tvMaster.tvNetwork.sendData("MSG " + tvMaster.currentChannel + ":" + tmpString + "\n");
          var date:Date = new Date;
  	      chatWindow.htmlText += ("[" + tvMaster.fmtdDate() + "] " + tvMaster.userName + ": " + tmpString + "\n");
  	      chatText.text = "";
  	      }
  	    }
      } /* End sendText() */
      
   private function userClick():void {
   	 tvMaster.tvNetwork.sendData('WHOIS ' + userDispList.selectedItem.@data + '\n');
   	 tvMaster.findIM(userDispList.selectedItem.@data);
     }
      
    private function doHist(event:KeyboardEvent):void {
      if (event.keyCode == Keyboard.DOWN) {
      	if (chatHistPos != (chatHist.length - 1)) {
      	  chatText.text = chatHist[chatHistPos++];
      	  chatText.dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_DOWN,true,false,0.0,103));
      	  }
      	else
      	  chatText.text = "";
        }
      else if (event.keyCode == Keyboard.UP) {
      	if (chatHistPos >= 0) {
      	  chatText.text = chatHist[chatHistPos--];
      	  chatText.dispatchEvent(new KeyboardEvent(KeyboardEvent.KEY_DOWN,true,false,0.0,103));
      	  }
      	if (chatHistPos < 0)
      	  chatHistPos = 0;
        }
      }
      
    private function changeChan():void {
      tvMaster.tvNetwork.sendData("PART " + tvMaster.currentChannel + "\n");
      tvMaster.currentChannel = tvMaster.chanList[selChan.selectedIndex].channel;
      tvMaster.tvNetwork.sendData("JOIN " + tvMaster.currentChannel + "\n");
      tvMaster.userList = null;
  	  tvMaster.userList = new XMLList();
      }

    public function updateVolume():void	{
	  var st:SoundTransform = tvMaster.tvSyncNS.soundTransform;
	  st.volume = (volume.value) * .01;
	  tvMaster.tvSyncNS.soundTransform = st;
	  tvMaster.tvSO.data.volume = volume.value;
      } /* End updateVolume */
       
  private function doNav():void {
  	if (mainNav.selectedIndex == 1)
  	  nP.getInfo(tvMaster.vid);
    }
    
  private function goToURL(url:String):void {
  	var webPageURL:URLRequest = new URLRequest(url);
  	navigateToURL(webPageURL, '_new');
    }
  ]]>
  </mx:Script>
  <mx:ComboBox width="120" dataProvider="{tvMaster.chanList}" id="selChan" labelField="channel" change="changeChan()" click="mainNav.selectedIndex = 0;" focusAlpha="0" y="25" x="360"/>
  <mx:HBox id="volBox" y="28" x="175" verticalAlign="middle" horizontalGap="0">
        <mx:Image id="mute" source="@Embed('assets/audio-volume-low 16x16.png')" click="volume.value = 0; updateVolume();" />
      	<mx:HSlider liveDragging="true" minimum="0" id="volume" snapInterval="1" value="75" maximum="100" change="updateVolume()" width="150"/>
      	<mx:Image id="loud" source="@Embed('assets/audio-volume-high 16x16.png')" click="volume.value = 100; updateVolume();" />
  </mx:HBox>
  <mx:Panel width="100%" height="100%" id="mainPanel" title="ubChattin v0.62" borderThicknessTop="5" backgroundAlpha="1.0" backgroundColor="#E2E2E2">
  	  <mx:TabNavigator id="mainNav" width="100%" height="100%" paddingTop="-1" creationPolicy="all" change="doNav()" paddingBottom="5">
  	  <mx:Panel id="chtPnl" borderThicknessLeft="0" borderThicknessRight="0" title="Channel Topic" styleName="myInPanel" label="Chat" width="100%" height="100%" paddingTop="0">
  	  <mx:HBox width="100%" height="100%" horizontalGap="2">	  	
  	  	<mx:TextArea height="100%" width="100%" mouseUp="tvMaster.setClip(chatWindow)" click="focusManager.setFocus(chatText)" updateComplete="chatWindow.verticalScrollPosition = chatWindow.maxVerticalScrollPosition" editable="false" id="chatWindow" horizontalScrollPolicy="off" />
  	  	<mx:List height="100%" width="75" id="userDispList" itemRollOver="userDispList.selectedIndex = event.rowIndex;" contextMenu="{uM}" dataProvider="{tvMaster.userList}" labelField="@label" doubleClickEnabled="true" doubleClick="userClick()" />
  	  </mx:HBox>
  		<mx:ControlBar height="30">
  		  <mx:TextInput width="100%" keyDown="doHist(event)" enter="sendText()" id="chatText" focusAlpha="0"  height="22"  cornerRadius="6" borderStyle="solid" fontSize="12"/>
  		  <mx:Label id="myNick" text="{tvMaster.userName}" width="75" fontFamily="Georgia" fontSize="10" fontWeight="bold"  color="#FFFFFF" textAlign="right"/>
  		</mx:ControlBar>
  	  </mx:Panel>
  	  <local:infoWindow label="Now Playing" id="nP" width="100%" creationPolicy="all" creationComplete="nP.tvMaster = this.tvMaster" sW="true" />
  	  </mx:TabNavigator>
      <mx:ControlBar verticalAlign="bottom">
      <mx:LinkButton label="Add this to your site for FREE!"  textDecoration="underline" fontSize="9" click="goToURL('http://www.tuve.tv/widget.php')" />
      <mx:LinkButton label="Register for a FREE Account"  textDecoration="underline" fontSize="9" click="goToURL('http://www.tuve.tv/register.php')" />
      <mx:Spacer  width="100%" height="100%"/>
      <mx:LinkButton label="Powered by TUvé" click="goToURL('http://www.tuve.tv')"  />
      </mx:ControlBar>
    </mx:Panel> 
</mx:Application>