DotNetNukeŽ Silverlight ToolBar

//
// DotNetNuke - http:'www.dotnetnuke.com
// Copyright (c) 2002-2007
// by DotNetNuke Corporation
//
// Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated 
// documentation files (the "Software"), to deal in the Software without restriction, including without limitation 
// the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and 
// to permit persons to whom the Software is furnished to do so, subject to the following conditions:
//
// The above copyright notice and this permission notice shall be included in all copies or substantial portions 
// of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED 
// TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 
// THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF 
// CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER 
// DEALINGS IN THE SOFTWARE.
//
//
using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Web.UI.WebControls;
using DotNetNuke;
using DotNetNuke.Common;
using DotNetNuke.Security;
using DotNetNuke.Security.Roles;
using DotNetNuke.Entities.Modules;
using DotNetNuke.Services.Exceptions;
 
namespace DotNetNuke.Modules.SilverlightToolBar
{
    public partial class View : PortalModuleBase, DotNetNuke.Entities.Modules.IActionable
    {
        int NumberOfButonsToShow;
 
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                if (!(Settings["Silverlight_NumberofButtons"] == null))
                {
                    NumberOfButonsToShow = Convert.ToInt32(Settings["Silverlight_NumberofButtons"]);
                }
                else
                {
                    NumberOfButonsToShow = Convert.ToInt32(4);
                }
 
                // Silverlight scripts
                Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "Silverlight", (this.TemplateSourceDirectory + "/js/Silverlight.js"));
                Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "SilverlightToolbar_Page", (this.TemplateSourceDirectory + "/js/Page.xaml.js"));
                Page.ClientScript.RegisterClientScriptInclude(this.GetType(), "SilverlightToolbar_box", (this.TemplateSourceDirectory + "/js/box.xaml.js"));
 
                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), string.Format("ClientsideJavaScript{0}", Convert.ToString(ModuleId)), ClientsideJavaScript());
                Page.ClientScript.RegisterClientScriptBlock(this.GetType(), string.Format("createSilverlight{0}", Convert.ToString(ModuleId)), CreateSilverlight());
 
                lrlSilverlight.Text = string.Format("createSilverlight{0}()", Convert.ToString(ModuleId));
 
                SilverlightControlHost.Width = (70 * NumberOfButonsToShow);
            }
 
            catch (Exception exc)
            { // Module failed to load
 
                Exceptions.ProcessModuleLoadException(this, exc);
            }
 
        }
 
        #region ClientsideJavaScript
 
        private string ClientsideJavaScript()
        {
            List<PicturesInfo> colPicturesInfo = Edit_DAL.GetPictures(ModuleId);
            string strPictureURL = "";
            string strURL = "";
            string strBaseDirectory = String.Format(@"http://{0}/{1}/", Request.Url.Host, this.TemplateSourceDirectory);
            StringBuilder sb = new System.Text.StringBuilder();
            int i = 0;
 
            sb.Append("<script type='text/javascript'> ");
 
            //Location of Box.xaml file
            sb.Append(string.Format("var ToolbarBoxXAMLFile_{0} = '{1}XAML/box.xaml'; ", Convert.ToString(ModuleId), strBaseDirectory));
 
            //Number of button to show
            sb.Append(string.Format("var NumberOfButtonsToShow_{0} = {1}; ", Convert.ToString(ModuleId), NumberOfButonsToShow));
 
            //Photo Array
            i = 0;
            sb.Append(string.Format("var ToolbarPhotoArray_{0} = new Array({1}); ", Convert.ToString(ModuleId), Edit_DAL.CountPictures(ModuleId)));
 
            foreach (PicturesInfo objPicturesInfo in colPicturesInfo)
            {
                strPictureURL = strBaseDirectory + objPicturesInfo.Picture;
                sb.Append(string.Format("ToolbarPhotoArray_{0}[{1}]='{2}';", Convert.ToString(ModuleId), i, strPictureURL));
                i++;
            }
 
            //URL Array
            i = 0;
            sb.Append(string.Format("var ToolbarURLArray_{0} = new Array({1}); ", Convert.ToString(ModuleId), Edit_DAL.CountPictures(ModuleId)));
 
            foreach (PicturesInfo objPicturesInfo in colPicturesInfo)
            {
                strURL = objPicturesInfo.Url;
                sb.Append(string.Format("ToolbarURLArray_{0}[{1}]='{2}';", Convert.ToString(ModuleId), i, strURL));
                i++;
            }
 
            sb.Append("</script> ");
 
            return sb.ToString();
        }
 
        #endregion
 
        #region CreateSilverlight
 
        private string CreateSilverlight()
        {
            System.Text.StringBuilder sb = new System.Text.StringBuilder();
 
            sb.Append("<script type='text/javascript'> ");
            sb.Append(string.Format("function createSilverlight{0}() ", Convert.ToString(ModuleId)));
            sb.Append("{ ");
            sb.Append("var scene = new ToolBar.Page(); ");
            sb.Append("Silverlight.createObjectEx(");
            sb.Append("{ ");
            sb.Append(string.Format("source: '{0}', ", (this.TemplateSourceDirectory + "/xaml/Page.xaml")));
            sb.Append(string.Format("parentElement: document.getElementById('dnn_ctr{0}_View_SilverlightControlHost'), ", Convert.ToString(ModuleId)));
            sb.Append(string.Format("id: '{0}', ", Convert.ToString(ModuleId)));
            sb.Append("properties: { ");
            sb.Append("width:'100%', ");
            sb.Append("height:'100%', ");
            sb.Append("inplaceInstallPrompt:false, ");
            sb.Append("background:'#00000000', ");
            sb.Append("isWindowless:'true', ");
            sb.Append("version: '1.0' ");
            sb.Append("}, ");
            sb.Append("events: { ");
            sb.Append("onError: null,");
            sb.Append("onLoad: Silverlight.createDelegate(scene, scene.handleLoad) ");
            sb.Append("}, ");
            sb.Append(string.Format("context: '{0}' ", Convert.ToString(ModuleId)));
            sb.Append("});} ");
 
            sb.Append("if (!window.Silverlight) ");
            sb.Append("window.Silverlight = {}; ");
            sb.Append("Silverlight.createDelegate = function(instance, method) { ");
            sb.Append("return function() { ");
            sb.Append("return method.apply(instance, arguments); ");
            sb.Append("} ");
            sb.Append("} ");
 
            sb.Append("</script> ");
            return sb.ToString();
 
        }
 
        #endregion
 
        #region IActionable Members
 
        public DotNetNuke.Entities.Modules.Actions.ModuleActionCollection ModuleActions
        {
            get
            {
                DotNetNuke.Entities.Modules.Actions.ModuleActionCollection Actions = new DotNetNuke.Entities.Modules.Actions.ModuleActionCollection();
                Actions.Add(GetNextActionID(), "Edit Menu Items", DotNetNuke.Entities.Modules.Actions.ModuleActionType.AddContent, "", "", EditUrl(), false, SecurityAccessLevel.Edit, true, false);
                return Actions;
            }
 
        }
 
        #endregion
    }
}