Toollist.init = function(resolve){ //Toollist.init calls('Toollist.init') .then(function(){ //初始化节点 root = Z.E( '<div class="toollist">\ <div class="item">\ <span class="pinyin" title="QQ云输入法" cmd="pinyin"></span>\ <span class="sound" title="静音" cmd="sound"></span>\ </div>\ <div class="item">\ <span class="setting" title="系统设置" cmd="setting"></span>\ <span class="theme" title="主题设置" cmd="theme"></span>\ </div>\ <div class="item2"><span title="开始"></span></div>\ </div>' ); Sidebar.addToollist(root); }) .then(function(){ //设置事件监听 root.click(function(evt){ var target = Z(evt.target); switch(target.attr('cmd')){ case 'sound': target.cls('~mute'); break; case 'theme': Command.call('openTheme'); break; case 'setting': Command.call('openSystemset'); break; } }); resolve(); }); };
Systemset.init = function(resolve){//Systemset.init calls('Systemset.init') .then(function(){ //初始化节点 root = Z.E( '<div>\ <div class="desktopSettingHeader">默认桌面(登录后默认显示)</div>\ <div class="desktopSettingBody default_desktop_setting" id="defaultDesktopRadioSet">\ <label><input type="radio" value="1" name="defaultDesktop" id="defaultDesktop_1">第1屏桌面</label>\ <label><input type="radio" value="2" name="defaultDesktop" id="defaultDesktop_2">第2屏桌面</label>\ <label><input type="radio" value="3" name="defaultDesktop" id="defaultDesktop_3" checked>第3屏桌面</label>\ <label><input type="radio" value="4" name="defaultDesktop" id="defaultDesktop_4">第4屏桌面</label>\ <label><input type="radio" value="5" name="defaultDesktop" id="defaultDesktop_5">第5屏桌面</label>\ </div>\ <div class="desktopSettingHeader">桌面图标设置</div>\ <div class="desktopSettingBody dsektop_icon_style_setting" id="desktopIconStyle">\ <label><input type="radio" value="1" name="desktopIconStyle" id="desktopIconStyle_1">小图标</label>\ <label><input type="radio" value="0" name="desktopIconStyle" id="desktopIconStyle_0" checked>大图标</label>\ </div>\ <div class="desktopSettingHeader">应用码头位置</div>\ <div class="desktopSettingBody dock_location_preview_contaienr">\ <div class="dock_location_preview dock_location_left" id="dockLocationPreview">\ <div class="dock_set_btn dock_set_left"><label class="dock_set_btn_label"><input type="radio" class="dock_set_btn_radio" value="left" name="dockLocation" id="dockSetLeft">左部</label></div>\ <div class="dock_set_btn dock_set_right"><label class="dock_set_btn_label"><input type="radio" class="dock_set_btn_radio" value="right" name="dockLocation" id="dockSetRight">右部</label></div>\ <div class="dock_set_btn dock_set_top"><label class="dock_set_btn_label"><input type="radio" class="dock_set_btn_radio" value="top" name="dockLocation" id="dockSetTop" checked>顶部</label></div>\ </div>\ </div>\ </div>' ); }) .then(function(){ //设置事件监听 root.click(function(e){ var target = Z(e.target); switch(target.attr('name')){ case 'defaultDesktop': Command.call('toggleDesk', target.val() -1); break; case 'desktopIconStyle': Command.call('setGrid', ['big', 'small'][target.val()]); break; case 'dockLocation': Z('#dockLocationPreview').cls('=dock_location_preview dock_location_'+ target.val()); Viewport.layout(target.val()); break; } }); }) .then(function(){ //设置菜单指令 Desktop.contextmenuitems.splice(4, 0, {text: '系统设置', cmd: 'openSystemset'}); var app = createApp(); Command({ openSystemset: function(){ if(!app.window){ app.fire('open'); }else{ app.fire('focus'); } } }); resolve(); }); };
Navbar.init = function(resolve){ //Navbar.init calls('Navbar.init') .then(function(){ //初始化节点 Viewport.add(root = Z.E( '<div id="Navbar" class="navbar">\ <div class="indicatorContainer">\ '+ indicators() +'\ </div>\ </div>' ), true); function indicators(){ var indicators = ['<div class="header" cmd="user" title="请登录"><img src="css/imgs/avatar.png" alt="请登录"></div>']; Z.forEach(Desktop.desks, function(desk, i){ indicators.push(Z.rstr( '<a class="indicator{cls}" index="{index}"><span class="icon_bg"></span><span class="icon_{iconIndex}"></span></a>', {cls: desk.isFocus() ? ' current' : '', index: i, iconIndex: i + 1} )); }); indicators.push('<a href="#" class="indicator indicator_manage" hidefocus="true" cmd="openManager" title="全局视图"></a>'); return indicators.join(''); } }) .then(function(){ //设置事件监听 Desktop.on('focused', function(){ root.find('.current').cls('-current'); root.find('.indicator').eq(this.index).cls('+current'); }); root.drag({rang: 1}); root .on('mousedown', function(){ Contextmenu.hide(); }).find('.indicator').click(function(evt){ evt.preventDefault(); if(this.attr('cmd') == 'openManager'){ Command.call('openManager'); }else if(!this.cls('current')){ Command.call('toggleDesk', +this.attr('index')); } }); var button = root.find('.indicator'), toggleButtonX, toggleButtonY; App.on('beforeDrag', function(){ if(Desktop.active){ toggleButtonX = button.offsetLeft(); toggleButtonY = button.offsetTop(); } }); App.on('draging', function(point){ if(!Desktop.active){ return; } var x = point[0]; var y = point[1]; //拖动图标时候的桌面切换检测,20为按钮高度,22为按钮宽度 if(y > toggleButtonY //y在前面考虑高度小于宽度,减少运算量 && y < toggleButtonY + 20 && x > toggleButtonX && x < toggleButtonX + 110 ){ Command.call('toggleDesk', 0 | (x - toggleButtonX) / 22); } }); }) .then(resolve); };
Desktop.init = function(resolve){ //Desktop.init calls('Desktop.init') .then(function(){ //初始化节点 Viewport.add( deskwraper = Z.E('<div id=Desktop class=desktop></div>'), true ); }) .then(function(){ //设置事件监听 Viewport .on('layout', function(){ curdesk.refresh(); }) .on('resize', function(){ curdesk.refresh(); }); var submenuitems = [ //子菜单内容数据引用,独立引用便于操作 {text: '桌面1', cmd: 'moveAppToDesk', args: 0}, {text: '桌面2', cmd: 'moveAppToDesk', args: 1}, {text: '桌面3', cmd: 'moveAppToDesk', args: 2}, {text: '桌面4', cmd: 'moveAppToDesk', args: 3}, {text: '桌面5', cmd: 'moveAppToDesk', args: 4} ]; App.contextmenuitems.splice(2, 0, {text: '移动应用', submenu: submenuitems}); App.on('contextmenu', function(){ Z.forEach(submenuitems, function(item, i){ if(curdesk.index == i){ item.status = 'selected'; }else{ item.status = ''; } }); }); App .on('add', function(place, index){ var app = this; if(place.type == 'Desktop'){ place.addApp(app, index); app.stopEvent(); } }) .on('remove', function(){ var app = this; var place = app.place; if(place.type == 'Desktop'){ place.removeApp(app); app.stopEvent(); } }) .on('drop', function(point){ if(Desktop.active){ curdesk.dropApp(this, point); } }) .on('addoverflow', function(app){ if(Desktop.active){ app.add(curdesk, -1); } }) .on('end', function(){}); App.on('open', function(){ if(Desktop.active){ this.open(curdesk); } }) .on('opened', function(){ curdesk.addWindow(this.window); }) .on('closed', function(){ this.windowplace.removeWindow(this.window); }) .on('focus', function(){ if(Desktop.active){ this.windowplace.focus(); this.focus(); } }) .on('focused', function(){ this.windowplace.focusWindow(this.window); }) }) .then(function(){ //设置右键菜单 var submenuitems1 = [ {text: '大图标', cmd: 'setGrid', args: 'big'}, {text: '小图标', cmd: 'setGrid', args: 'small'} ], submenuitems2 = [ {text: '桌面1', cmd: 'toggleDesk', args: 0}, {text: '桌面2', cmd: 'toggleDesk', args: 1}, {text: '桌面3', cmd: 'toggleDesk', args: 2}, {text: '桌面4', cmd: 'toggleDesk', args: 3}, {text: '桌面5', cmd: 'toggleDesk', args: 4} ], menuitems = Desktop.contextmenuitems = [ {text: '显示桌面', cmd: 'showDesk'}, {text: '切换桌面', submenu: submenuitems2}, '-', ///{text: '系统设置', cmd: 'openSystemset'}, ///{text: '主题设置', cmd: 'openTheme'}, {text: '图标设置', submenu: submenuitems1}, '-', {text: '关于', cmd: 'showAbout'} ], contextmenu = new Contextmenu(menuitems); deskwraper.on('contextmenu', function(e){ e.preventDefault(); Z.forEach(submenuitems1, function(menuitem, i){ if(curgridsize == GRIDSIZE.big && i == 0 || curgridsize == GRIDSIZE.small && i == 1){ menuitem.status = 'selected'; }else{ menuitem.status = ''; } }); Z.forEach(submenuitems2, function(menuitem, i){ if(curdesk.index == i){ menuitem.status = 'selected'; }else{ menuitem.status = ''; } }); contextmenu.render(menuitems).showBy(Desktop, e.clientX, e.clientY); }); }) .then(function(){ //设置菜单指令 Command({ showDesk: function(){ curdesk.show(); }, toggleDesk: function(index){ desks[index].focus(); }, setGrid: function(type){ curdesk.setGrid(type); }, showAbout: function(){ alert([ 'WEB++是基于1kjs仿照WEBQQ开发的一款模拟桌面系统', '程序以文件和对象的方式进行管理,代码实现了流程控制和性能监控', '数据采用纯静态的JSON格式,在数据交互中实现了并行请求和串行处理', '===========================================', '感谢WEBQQ提供素材和交互模型,感谢Google App提供托管空间', '本程序所有图片素材都来自网络,版权归原作者所有!', '如有疑问请联系:zjfeihu@126.com', ].join('\n\n')); }, moveAppToDesk: function(index){ //图标位置移动 var app = this; var targetdesk = desks[index]; if(targetdesk != curdesk){ app.add(targetdesk, -1); } } }); }) .then(function(){ //初始化子桌面 var desktop = Data.CONFIG.desktop; Z.forEach(desktop.desks, function(data, i){ if(i == MAX_COUNT){ return true; } desks[i] = new Desktop({ container: deskwraper, apps: data.apps, gridsize: GRIDSIZE[desktop.gridtype || 'big'] }); }); desks[desktop.curindex || 2].focus(); Desktop.active = true; //设置桌面为激活状态 Desktop.desks = desks; //在Navbar中使用 }) .then(resolve); };
App.init = function(resolve){ //App.init calls('App.init') .then(function(){ //设置右键菜单 var menuitems = App.contextmenuitems = [ //右键菜单内容数据 {text: '打开应用', icon:'1', cmd: 'openApp'}, '-', {text: '卸载应用', cmd: 'removeApp'} ], original_contextmenu = new Contextmenu; contextmenu = { //重写original_contextmenu接口 showBy: function(app, x, y){ app.fire('contextmenu'); original_contextmenu.render(menuitems).showBy(app, x, y); }, hide: function(){ original_contextmenu.hide(); } }; }) .then(function(){ //设置事件监听 App.on('closed', function(){ var app = this; setTimeout(function(){ //延迟是为了在最后操作,因为其他接口在closed状态下需要用到这些属性 app.window = null; app.windowplace = null; }); }) .on('end', function(){}); }) .then(function(){ //设置菜单指令 Command({ openApp: function(){ appclick(this); }, removeApp: function(){ this.remove(true); } }); resolve(); }); };