qo-preferences-override.js
上传用户:snow1005
上传日期:2015-11-10
资源大小:3151k
文件大小:27k
源码类别:

Ajax

开发平台:

JavaScript

  1. /*
  2.  * qWikiOffice Desktop 0.8.1
  3.  * Copyright(c) 2007-2008, Integrated Technologies, Inc.
  4.  * licensing@qwikioffice.com
  5.  * 
  6.  * http://www.qwikioffice.com/license
  7.  */
  8. Ext.override(QoDesk.QoPreferences, {
  9. actions : null,
  10. cards : [
  11. 'pref-win-card-1', // navigation
  12. 'pref-win-card-2', // quickstart
  13. 'pref-win-card-3', // color and appearance
  14. 'pref-win-card-4', // wallpaper
  15. 'pref-win-card-5', // autorun
  16. 'pref-win-card-6'  // shortcuts
  17. ],
  18. contentPanel : null,
  19. cardHistory : [
  20. 'pref-win-card-1' // default
  21. ],
  22. layout: null,
  23. win : null,
  24.     createWindow : function(){
  25.      var desktop = this.app.getDesktop();
  26.         this.win = desktop.getWindow(this.moduleId);
  27.         
  28.         if(!this.win){
  29.          var winWidth = 610;
  30. var winHeight = 460;
  31. this.contentPanel = new Ext.Panel({
  32. activeItem: 0,
  33.                 border: false,
  34. id: 'pref-win-content',
  35. items: [
  36.                  new QoDesk.QoPreferences.NavPanel({owner: this, id: 'pref-win-card-1'}),
  37.                  new QoDesk.QoPreferences.Shortcuts({owner: this, id: 'pref-win-card-6'}),
  38.                  new QoDesk.QoPreferences.AutoRun({owner: this, id: 'pref-win-card-5'}),
  39.                  new QoDesk.QoPreferences.QuickStart({owner: this, id: 'pref-win-card-2'}),
  40.                  new QoDesk.QoPreferences.Appearance({owner: this, id: 'pref-win-card-3'}),
  41.                  new QoDesk.QoPreferences.Background({owner: this, id: 'pref-win-card-4'})
  42.                 ],
  43. layout: 'card',
  44. tbar: [{
  45. disabled: true,
  46.                  handler: this.navHandler.createDelegate(this, [-1]),
  47.                  id: 'back',
  48.                  scope: this,
  49.                  text: 'Back'
  50.                 },{
  51.                  disabled: true,
  52.                  handler: this.navHandler.createDelegate(this, [1]),
  53.                  id: 'next',
  54.                  scope: this,
  55.                  text: 'Next'
  56.                 }]
  57. });
  58.             this.win = desktop.createWindow({
  59.              animCollapse: false,
  60.                 constrainHeader: true,
  61.                 id: this.moduleId,
  62.                 height: winHeight,
  63.                 iconCls: 'pref-icon',
  64.                 items: this.contentPanel,
  65.                 layout: 'fit',
  66.                 shim: false,
  67.                 taskbuttonTooltip: '<b>Preferences</b><br />Allows you to modify your desktop',
  68.                 title: 'Preferences',
  69.                 width: winWidth
  70.             });
  71.             
  72. this.layout = this.contentPanel.getLayout();
  73.         }
  74.         
  75.         this.win.show();
  76.     },
  77.     
  78.     handleButtonState : function(){
  79.      var cards = this.cardHistory, activeId = this.layout.activeItem.id,
  80.      items = this.contentPanel.getTopToolbar().items, back = items.get(0), next = items.get(1);
  81.     
  82.      for(var i = 0, len = cards.length; i < len; i++){
  83.      if(cards[i] === activeId){
  84.      if(i <= 0){
  85.      back.disable();
  86.      next.enable();
  87.      }else if(i >= (len-1)){
  88.      back.enable();
  89.      next.disable();
  90.      }else{
  91.      back.enable();
  92.      next.enable();
  93.      }
  94.      break;
  95.      }
  96.      }
  97.     },
  98.     
  99.     navHandler : function(index){
  100.      var cards = this.cardHistory,
  101.      activeId = this.layout.activeItem.id,
  102.      nextId;
  103.     
  104.      for(var i = 0, len = cards.length; i < len; i++){
  105.      if(cards[i] === activeId){
  106.      nextId = cards[i+index];
  107.      break;
  108.      }
  109.      }
  110.     
  111.      this.layout.setActiveItem(nextId);
  112.      this.handleButtonState();
  113.     },
  114.     
  115.     save : function(params){    
  116.      var desktop = this.app.getDesktop();
  117.      var notifyWin = desktop.showNotification({
  118. html: 'Saving your data...'
  119. , title: 'Please wait'
  120. });
  121.     var callback = params.callback || null;
  122. var callbackScope = params.callbackScope || this;
  123. params.moduleId = this.moduleId;
  124.     Ext.Ajax.request({
  125. url: this.app.connection,
  126. /* Could also pass moduleId and action in querystring like this
  127.  * instead of in the params config option.
  128.  *
  129.  * url: this.app.connection+'?moduleId='+this.id+'&action=myAction', */
  130. params: params,
  131. success: function(o){
  132. if(o && o.responseText && Ext.decode(o.responseText).success){
  133. saveComplete('Finished', 'Save complete.');
  134. }else{
  135. saveComplete('Error', 'Errors encountered on the server.');
  136. }
  137. },
  138. failure: function(){
  139. saveComplete('Error', 'Lost connection to server.');
  140. },
  141. scope: this
  142. });
  143. function saveComplete(title, msg){
  144. notifyWin.setIconClass('x-icon-done');
  145. notifyWin.setTitle(title);
  146. notifyWin.setMessage(msg);
  147. desktop.hideNotification(notifyWin);
  148. if(callback){
  149. callback.call(callbackScope);
  150. }
  151. }
  152. },
  153.     
  154.     viewCard : function(card){
  155. this.layout.setActiveItem(card);
  156.     if(this.cardHistory.length > 1){
  157.      this.cardHistory.pop();
  158.     }
  159.     this.cardHistory.push(card);
  160.     this.handleButtonState();
  161. }
  162. });
  163. QoDesk.QoPreferences.NavPanel = function(config){
  164. this.owner = config.owner;
  165. QoDesk.QoPreferences.NavPanel.superclass.constructor.call(this, {
  166. autoScroll: true,
  167. bodyStyle: 'padding:15px',
  168. border: false,
  169. html: '<ul id="pref-nav-panel"> 
  170. <li> 
  171. <img src="'+Ext.BLANK_IMAGE_URL+'" class="icon-pref-autorun"/> 
  172. <a id="viewShortcuts" href="#">Shortcuts</a><br /> 
  173. <span>Choose which applications appear in your shortcuts.</span> 
  174. </li> 
  175. <li> 
  176. <img src="'+Ext.BLANK_IMAGE_URL+'" class="icon-pref-autorun"/> 
  177. <a id="viewAutoRun" href="#">Auto Run Apps</a><br /> 
  178. <span>Choose which applications open automatically once logged in.</span> 
  179. </li> 
  180. <li> 
  181. <img src="'+Ext.BLANK_IMAGE_URL+'" class="icon-pref-quickstart"/> 
  182. <a id="viewQuickstart" href="#">Quick Start Apps</a><br /> 
  183. <span>Choose which applications appear in your Quick Start panel.</span> 
  184. </li> 
  185. <li> 
  186. <img src="'+Ext.BLANK_IMAGE_URL+'" class="icon-pref-appearance"/> 
  187. <a id="viewAppearance" href="#">Window Color and Appearance</a><br /> 
  188. <span>Fine tune window color and style of your windows.</span> 
  189. </li> 
  190. <li> 
  191. <img src="'+Ext.BLANK_IMAGE_URL+'" class="icon-pref-wallpaper"/> 
  192. <a id="viewWallpapers" href="#">Desktop Background</a><br /> 
  193. <span>Choose from available wallpapers or colors to decorate you desktop.</span> 
  194. </li> 
  195. </ul>',
  196. id: config.id
  197. });
  198. this.actions = {
  199. 'viewShortcuts' : function(owner){
  200. owner.viewCard('pref-win-card-6');
  201. },
  202. 'viewAutoRun' : function(owner){
  203. owner.viewCard('pref-win-card-5');
  204. },
  205. 'viewQuickstart' : function(owner){
  206.     owner.viewCard('pref-win-card-2');
  207.     },
  208.    
  209.     'viewAppearance' : function(owner){
  210.     owner.viewCard('pref-win-card-3');
  211.     },
  212.    
  213.     'viewWallpapers' : function(owner){
  214.     owner.viewCard('pref-win-card-4');
  215.     }
  216. };
  217. };
  218. Ext.extend(QoDesk.QoPreferences.NavPanel, Ext.Panel, {
  219. afterRender : function(){
  220. this.body.on({
  221. 'mousedown': {
  222. fn: this.doAction,
  223. scope: this,
  224. delegate: 'a'
  225. },
  226. 'click': {
  227. fn: Ext.emptyFn,
  228. scope: null,
  229. delegate: 'a',
  230. preventDefault: true
  231. }
  232. });
  233. QoDesk.QoPreferences.NavPanel.superclass.afterRender.call(this); // do sizing calcs last
  234. },
  235. doAction : function(e, t){
  236.      e.stopEvent();
  237.      this.actions[t.id](this.owner);  // pass owner for scope
  238.     }
  239. });
  240. QoDesk.QoPreferences.AutoRun = function(config){
  241. this.owner = config.owner;
  242. this.app = this.owner.app;
  243. var ms = this.app.modules,
  244. ids = this.app.launchers.autorun,
  245. nodes = expandNodes(ms, ids);
  246. QoDesk.QoPreferences.AutoRun.superclass.constructor.call(this, {
  247. autoScroll: true,
  248. bodyStyle: 'padding:10px',
  249. border: false,
  250. buttons: [{
  251. disabled: this.app.isAllowedTo('saveAutorun', this.owner.moduleId) ? false : true,
  252. handler: onSave,
  253. scope: this,
  254. text: 'Save'
  255. },{
  256. handler: onClose,
  257. scope: this,
  258. text: 'Close'
  259. }],
  260. cls: 'pref-card pref-check-tree',
  261. id: config.id,
  262. lines: false,
  263. listeners: {
  264. 'checkchange': {
  265. fn: onCheckChange,
  266. scope: this
  267. }
  268. },
  269. loader: new Ext.tree.TreeLoader(),
  270. rootVisible: false,
  271. root: new Ext.tree.AsyncTreeNode({
  272. text: 'Auto Run Apps',
  273. children: nodes
  274. }),
  275. title: 'Auto Run Apps'
  276. });
  277. new Ext.tree.TreeSorter(this, {dir: "asc"});
  278. function expandNodes(ms, ids){
  279. var nodes = [];
  280. for(var i = 0, len = ms.length; i < len; i++){
  281. if(ms[i].moduleType === 'menu'){
  282. /* nodes.push({
  283. leaf: false,
  284. text: ms[i].launcher.text,
  285. children: this.expandNodes(o.menu.items, ids)
  286. }); */
  287. }else{
  288. nodes.push({
  289.             checked: isChecked(ms[i].moduleId, ids) ? true : false,
  290.             iconCls: ms[i].launcher.iconCls,
  291.             id: ms[i].moduleId,
  292.             leaf: true,
  293.             selected: true,
  294.             text: ms[i].launcher.text
  295. });
  296. }
  297. }
  298. return nodes;
  299. }
  300. function isChecked(id, ids){
  301. for(var i = 0, len = ids.length; i < len; i++){
  302. if(id == ids[i]){
  303. return true;
  304. }
  305. }
  306. }
  307. function onCheckChange(node, checked){
  308. if(node.leaf && node.id){
  309.      if(checked){
  310. this.app.desktop.addAutoRun(node.id, true);
  311.      }else{
  312. this.app.desktop.removeAutoRun(node.id, true);
  313.      }
  314.      }
  315.      node.ownerTree.selModel.select(node);
  316.     }
  317.     
  318.     function onClose(){
  319. this.owner.win.close();
  320. }
  321.     function onSave(){
  322.      this.buttons[0].disable();
  323.      this.owner.save({
  324.      action: 'saveAutorun'
  325.      , callback: function(){
  326.      this.buttons[0].enable();
  327.      }
  328.      , callbackScope: this
  329.      , ids: Ext.encode(this.app.launchers.autorun)
  330.      });
  331.     }
  332. };
  333. Ext.extend(QoDesk.QoPreferences.AutoRun, Ext.tree.TreePanel);
  334. QoDesk.QoPreferences.Shortcuts = function(config){
  335. this.owner = config.owner;
  336. this.app = this.owner.app;
  337. var ms = this.app.modules,
  338. ids = this.app.launchers.shortcut,
  339. nodes = expandNodes(ms, ids);
  340. QoDesk.QoPreferences.Shortcuts.superclass.constructor.call(this, {
  341. autoScroll: true,
  342. bodyStyle: 'padding:10px',
  343. border: false,
  344. buttons: [{
  345. disabled: this.app.isAllowedTo('saveShortcut', this.owner.moduleId) ? false : true,
  346. handler: onSave,
  347. scope: this,
  348. text: 'Save'
  349. },{
  350. handler: onClose,
  351. scope: this,
  352. text: 'Close'
  353. }],
  354. cls: 'pref-card pref-check-tree',
  355. id: config.id,
  356. lines: false,
  357. listeners: {
  358. 'checkchange': {
  359. fn: onCheckChange,
  360. scope: this
  361. }
  362. },
  363. loader: new Ext.tree.TreeLoader(),
  364. rootVisible: false,
  365. root: new Ext.tree.AsyncTreeNode({
  366. text: 'Shortcuts',
  367. children: nodes
  368. }),
  369. title: 'Shortcuts'
  370. });
  371. new Ext.tree.TreeSorter(this, {dir: "asc"});
  372. function expandNodes(ms, ids){
  373. var nodes = [];
  374. for(var i = 0, len = ms.length; i < len; i++){
  375. if(ms[i].moduleType === 'menu'){
  376. /* nodes.push({
  377. leaf: false,
  378. text: ms[i].launcher.text,
  379. children: this.expandNodes(o.menu.items, ids)
  380. }); */
  381. }else{
  382. nodes.push({
  383.             checked: isChecked(ms[i].moduleId, ids) ? true : false,
  384.             iconCls: ms[i].launcher.iconCls,
  385.             id: ms[i].moduleId,
  386.             leaf: true,
  387.             selected: true,
  388.             text: ms[i].launcher.text
  389. });
  390. }
  391. }
  392. return nodes;
  393. }
  394. function isChecked(id, ids){
  395. for(var i = 0, len = ids.length; i < len; i++){
  396. if(id == ids[i]){
  397. return true;
  398. }
  399. }
  400. }
  401. function onCheckChange(node, checked){
  402. if(node.leaf && node.id){
  403.      if(checked){
  404. this.app.desktop.addShortcut(node.id, true);
  405.      }else{
  406. this.app.desktop.removeShortcut(node.id, true);
  407.      }
  408.      }
  409.      node.ownerTree.selModel.select(node);
  410.     }
  411.     
  412.     function onClose(){
  413. this.owner.win.close();
  414. }
  415.     function onSave(){
  416.      this.buttons[0].disable();
  417.      this.owner.save({
  418.      action: 'saveShortcut'
  419.      , callback: function(){
  420.      this.buttons[0].enable();
  421.      }
  422.      , callbackScope: this
  423.      , ids: Ext.encode(this.app.launchers.shortcut)
  424.      });
  425.     }
  426. };
  427. Ext.extend(QoDesk.QoPreferences.Shortcuts, Ext.tree.TreePanel);
  428. QoDesk.QoPreferences.QuickStart = function(config){
  429. this.owner = config.owner;
  430. this.app = this.owner.app;
  431. var ms = this.app.modules,
  432. ids = this.app.launchers.quickstart,
  433. nodes = expandNodes(ms, ids);
  434.     QoDesk.QoPreferences.QuickStart.superclass.constructor.call(this, {
  435.      autoScroll: true,
  436. bodyStyle: 'padding:10px',
  437. border: false,
  438. buttons: [{
  439. disabled: this.app.isAllowedTo('saveQuickstart', this.owner.moduleId) ? false : true,
  440. handler: onSave,
  441. scope: this,
  442. text: 'Save'
  443. },{
  444. handler: onClose,
  445. scope: this,
  446. text: 'Close'
  447. }],
  448. cls: 'pref-card pref-check-tree',
  449. id: config.id,
  450. lines: false,
  451. listeners: {
  452. 'checkchange': {
  453. fn: onCheckChange,
  454. scope: this
  455. }
  456. },
  457. loader: new Ext.tree.TreeLoader(),
  458. rootVisible: false,
  459. root: new Ext.tree.AsyncTreeNode({
  460. text: 'Quick Start Apps',
  461. children: nodes
  462. }),
  463. title: 'Quick Start Apps'
  464.     });
  465.     
  466.     new Ext.tree.TreeSorter(this, {dir: "asc"});
  467. function expandNodes(ms, ids){
  468. var nodes = [];
  469. for(var i = 0, len = ms.length; i < len; i++){
  470. if(ms[i].moduleType === 'menu'){
  471. /* nodes.push({
  472. leaf: false,
  473. text: ms[i].launcher.text,
  474. children: this.expandNodes(o.menu.items, ids)
  475. }); */
  476. }else{
  477. nodes.push({
  478.             checked: isChecked(ms[i].moduleId, ids) ? true : false,
  479.             iconCls: ms[i].launcher.iconCls,
  480.             id: ms[i].moduleId,
  481.             leaf: true,
  482.             selected: true,
  483.             text: ms[i].launcher.text
  484. });
  485. }
  486. }
  487. return nodes;
  488. }
  489. function isChecked(id, ids){
  490. for(var i = 0, len = ids.length; i < len; i++){
  491. if(id == ids[i]){
  492. return true;
  493. }
  494. }
  495. }
  496. function onCheckChange(node, checked){
  497. if(node.leaf && node.id){
  498.      if(checked){
  499. this.app.desktop.addQuickStartButton(node.id, true);
  500.      }else{
  501. this.app.desktop.removeQuickStartButton(node.id, true);
  502.      }
  503.      }
  504.      node.ownerTree.selModel.select(node);
  505.     }
  506.     
  507.     function onClose(){
  508. this.owner.win.close();
  509. }
  510.     function onSave(){
  511.      this.buttons[0].disable();
  512.      this.owner.save({
  513.      action: 'saveQuickstart'
  514.      , callback: function(){
  515.      this.buttons[0].enable();
  516.      }
  517.      , callbackScope: this
  518.      , ids: Ext.encode(this.app.launchers.quickstart)
  519.      });
  520.     }
  521. };
  522. Ext.extend(QoDesk.QoPreferences.QuickStart, Ext.tree.TreePanel);
  523. QoDesk.QoPreferences.Appearance = function(config){
  524. this.owner = config.owner;
  525. this.app = this.owner.app;
  526. var desktop = this.app.getDesktop();
  527. var store = new Ext.data.JsonStore({
  528. baseParams: {
  529. action: 'viewThemes',
  530. moduleId: this.owner.moduleId
  531. },
  532. fields: ['id', 'name', 'pathtothumbnail', 'pathtofile'],
  533. id: 'id',
  534. root: 'images',
  535. url: this.app.connection
  536. });
  537. this.store = store;
  538. store.on('load', function(store, records){
  539. if(records){
  540. defaults.setTitle('Themes Available (' + records.length + ')');
  541. var id = this.app.styles.theme.id;
  542. if(id){
  543. view.select('theme-'+id);
  544. }
  545. }
  546. }, this);
  547. var tpl = new Ext.XTemplate(
  548. '<tpl for=".">',
  549. '<div class="pref-view-thumb-wrap" id="theme-{id}">',
  550. '<div class="pref-view-thumb"><img src="{pathtothumbnail}" title="{name}" /></div>',
  551. '<span>{shortName}</span></div>',
  552. '</tpl>',
  553. '<div class="x-clear"></div>'
  554. );
  555. var view = new Ext.DataView({
  556. autoHeight:true,
  557. cls: 'pref-thumnail-view',
  558. emptyText: 'No themes to display',
  559. itemSelector:'div.pref-view-thumb-wrap',
  560. loadingText: 'loading...',
  561. singleSelect: true,
  562. overClass:'x-view-over',
  563. prepareData: function(data){
  564. data.shortName = Ext.util.Format.ellipsis(data.name, 17);
  565. return data;
  566. },
  567. store: store,
  568. tpl: tpl
  569. });
  570. view.on('selectionchange', onSelectionChange, this);
  571. var defaults = new Ext.Panel({
  572. animCollapse: false,
  573. baseCls:'collapse-group',
  574. border: false,
  575. cls: 'pref-thumbnail-viewer',
  576. collapsible: true,
  577. hideCollapseTool: true,
  578. id: 'pref-theme-view',
  579. items: view,
  580. title: 'Default Themes',
  581. titleCollapse: true
  582. });
  583. var themes = new Ext.Panel({
  584. autoScroll: true,
  585. bodyStyle: 'padding:10px',
  586. border: true,
  587. cls: 'pref-card-subpanel',
  588. id: 'themes',
  589. items: defaults,
  590. margins: '10 15 0 15',
  591. region: 'center'
  592. });
  593. this.slider = createSlider({
  594. handler: new Ext.util.DelayedTask(updateTransparency, this)
  595. , min: 0
  596. , max: 100
  597. , x: 15
  598. , y: 35
  599. , width: 100
  600. });
  601. var formPanel = new Ext.FormPanel({
  602. border: false,
  603. height: 70,
  604. items: [
  605. {x: 15, y: 15, xtype: 'label', text: 'Taskbar Transparency'},
  606. this.slider.slider,
  607. this.slider.display
  608. ],
  609. layout: 'absolute',
  610. split: false,
  611. region: 'south'
  612. });
  613. QoDesk.QoPreferences.Appearance.superclass.constructor.call(this, {
  614. border: false,
  615. buttons: [{
  616. disabled: this.app.isAllowedTo('saveAppearance', this.owner.moduleId) ? false : true,
  617. handler: onSave,
  618. scope: this,
  619. text: 'Save'
  620. },{
  621. handler: onClose,
  622. scope: this,
  623. text: 'Close'
  624. }],
  625. cls: 'pref-card',
  626. id: config.id,
  627. items: [
  628. themes,
  629. formPanel
  630. ],
  631. layout: 'border',
  632. title: 'Window Color And Appearance'
  633. });
  634. // private functions
  635. function createSlider(config){
  636. var handler = config.handler, min = config.min, max = config.max
  637. , width = config.width || 100, x = config.x, y = config.y;
  638. var slider = new Ext.Slider({
  639. minValue: min
  640. , maxValue: max
  641. , width: width
  642. , x: x
  643. , y: y
  644. });
  645. var display =  new Ext.form.NumberField({
  646. cls: 'pref-percent-field'
  647. , enableKeyEvents: true
  648. , maxValue: max
  649. , minValue: min
  650. , width: 45
  651. , x: x + width + 15
  652. , y: y - 1
  653. });
  654. function sliderHandler(slider){
  655. var v = slider.getValue();
  656. display.setValue(v);
  657. handler.delay(100, null, null, [v]); // delayed task prevents IE bog
  658. }
  659. slider.on({
  660. 'change': { fn: sliderHandler, scope: this }
  661. , 'drag': { fn: sliderHandler, scope: this }
  662. });
  663. display.on({
  664. 'keyup': {
  665. fn: function(field){
  666. var v = field.getValue();
  667. if(v !== '' && !isNaN(v) && v >= field.minValue && v <= field.maxValue){
  668. slider.setValue(v);
  669. }
  670. }
  671. , buffer: 350
  672. , scope: this
  673. }
  674. });
  675. return { slider: slider, display: display }
  676. }
  677. function onClose(){
  678. this.owner.win.close();
  679. }
  680. function onSave(){
  681. var c = this.app.styles;
  682. this.buttons[0].disable();
  683.      this.owner.save({
  684.      action: 'saveAppearance'
  685.      , callback: function(){
  686.      this.buttons[0].enable();
  687.      }
  688.      , callbackScope: this
  689.      , backgroundcolor: c.backgroundcolor
  690.      , fontcolor: c.fontcolor
  691.      , theme: c.theme.id
  692.      , transparency: c.transparency
  693.      , wallpaper: c.wallpaper.id
  694.      , wallpaperposition: c.wallpaperposition
  695.      });
  696. }
  697. function onSelectionChange(view, sel){
  698. if(sel.length > 0){
  699. var cId = this.app.styles.theme.id,
  700. r = view.getRecord(sel[0]),
  701. d = r.data;
  702. if(parseInt(cId) !== parseInt(r.id)){
  703. if(r && r.id && d.name && d.pathtofile){
  704. desktop.setTheme({
  705. id: r.id,
  706. name: d.name,
  707. pathtofile: d.pathtofile
  708. });
  709. }
  710. }
  711. }
  712. }
  713. function updateTransparency(v){
  714. desktop.setTransparency(v);
  715. }
  716. };
  717. Ext.extend(QoDesk.QoPreferences.Appearance, Ext.Panel, {
  718. afterRender : function(){
  719. QoDesk.QoPreferences.Appearance.superclass.afterRender.call(this);
  720. this.on('show', this.loadStore, this, {single: true});
  721. },
  722. loadStore : function(){
  723. this.store.load();
  724. this.slider.slider.setValue(this.app.styles.transparency);
  725. }
  726. });
  727. QoDesk.QoPreferences.Background = function(config){
  728. this.owner = config.owner;
  729. this.app = this.owner.app;
  730. var desktop = this.app.getDesktop();
  731. var store = new Ext.data.JsonStore({
  732. baseParams: {
  733. action: 'viewWallpapers',
  734. moduleId: this.owner.moduleId
  735. },
  736. fields: ['id', 'name', 'pathtothumbnail', 'pathtofile'],
  737. id: 'id',
  738. root: 'images',
  739. url: this.app.connection
  740. });
  741. this.store = store;
  742. store.on('load', function(store, records){
  743. if(records){
  744. defaults.setTitle('Default Wallpapers (' + records.length + ')');
  745. var id = this.app.styles.wallpaper.id;
  746. if(id){
  747. view.select('wallpaper-'+id);
  748. }
  749. }
  750. }, this);
  751. var tpl = new Ext.XTemplate(
  752. '<tpl for=".">',
  753. '<div class="pref-view-thumb-wrap" id="wallpaper-{id}">',
  754. '<div class="pref-view-thumb"><img src="{pathtothumbnail}" title="{name}" /></div>',
  755. '<span>{shortName}</span></div>',
  756. '</tpl>',
  757. '<div class="x-clear"></div>'
  758. );
  759. var view = new Ext.DataView({
  760. autoHeight:true,
  761. cls: 'pref-thumnail-view',
  762. emptyText: 'No wallpapers to display',
  763. itemSelector:'div.pref-view-thumb-wrap',
  764. loadingText: 'loading...',
  765. singleSelect: true,
  766. overClass:'x-view-over',
  767. prepareData: function(data){
  768. data.shortName = Ext.util.Format.ellipsis(data.name, 17);
  769. return data;
  770. },
  771. store: store,
  772. tpl: tpl
  773. });
  774. view.on('selectionchange', onSelectionChange, this);
  775. var defaults = new Ext.Panel({
  776. animCollapse: false,
  777. baseCls:'collapse-group',
  778. border: false,
  779. cls: 'pref-thumbnail-viewer',
  780. collapsible: true,
  781. hideCollapseTool: true,
  782. id: 'pref-wallpaper-view',
  783. items: view,
  784. title: 'Default Wallpapers',
  785. titleCollapse: true
  786. });
  787. var wallpapers = new Ext.Panel({
  788. autoScroll: true,
  789. bodyStyle: 'padding:10px',
  790. border: true,
  791. cls: 'pref-card-subpanel',
  792. id: 'wallpapers',
  793. items: defaults,
  794. margins: '10 15 0 15',
  795. region: 'center'
  796. });
  797. var wpp = this.app.styles.wallpaperposition;
  798. var tileRadio = createRadio('tile', wpp == 'tile' ? true : false, 90, 40);
  799. var centerRadio = createRadio('center', wpp == 'center' ? true : false, 200, 40);
  800. var position = new Ext.FormPanel({
  801. border: false,
  802. height: 140,
  803. id: 'position',
  804. items: [{
  805. border: false,
  806. items: {border: false, html:'How should the wallpaper be positioned?'},
  807. x: 15,
  808. y: 15
  809. },{
  810. border: false,
  811. items: {border: false, html: '<img class="bg-pos-tile" src="'+Ext.BLANK_IMAGE_URL+'" width="64" height="44" border="0" alt="" />'},
  812. x: 15,
  813. y: 40
  814. },
  815. tileRadio,
  816. {
  817. border: false,
  818. items: {border: false, html: '<img class="bg-pos-center" src="'+Ext.BLANK_IMAGE_URL+'" width="64" height="44" border="0" alt="" />'},
  819. x: 125,
  820. y: 40
  821. },
  822. centerRadio,
  823. {
  824. border: false,
  825. items: {border: false, html:'Choose a background color'},
  826. x: 245,
  827. y: 15
  828. },{
  829. border: false,
  830. /* items: new Ext.ColorPalette({
  831. listeners: {
  832. 'select': {
  833. fn: onColorSelect
  834. , scope: this
  835. }
  836. }
  837. }), */
  838. items: new Ext.Button({
  839. handler: onChangeBgColor,
  840. //menu: new Ext.ux.menu.ColorMenu(),
  841. scope: this,
  842. text: 'Background color'
  843. }),
  844. x: 245,
  845. y: 40
  846. },{
  847. border: false,
  848. items: {border: false, html:'Choose a font color'},
  849. x: 425,
  850. y: 15
  851. },{
  852. border: false,
  853. /* items: new Ext.ColorPalette({
  854. listeners: {
  855. 'select': {
  856. fn: onFontColorSelect
  857. , scope: this
  858. }
  859. }
  860. }), */
  861. items: new Ext.Button({
  862. handler: onChangeFontColor,
  863. scope: this,
  864. text: 'Background color'
  865. }),
  866. x: 425,
  867. y: 40
  868. }],
  869. layout: 'absolute',
  870. region: 'south',
  871. split: false
  872. });
  873. QoDesk.QoPreferences.Background.superclass.constructor.call(this, {
  874. border: false,
  875. buttons: [{
  876. disabled: this.app.isAllowedTo('saveBackground', this.owner.moduleId) ? false : true,
  877. handler: onSave,
  878. scope: this,
  879. text: 'Save'
  880. },{
  881. handler: onClose,
  882. scope: this,
  883. text: 'Close'
  884. }],
  885. cls: 'pref-card',
  886. id: config.id,
  887. items: [
  888. wallpapers,
  889. position
  890. ],
  891. layout: 'border',
  892. title: 'Desktop Background'
  893. });
  894. function createRadio(value, checked, x, y){
  895. if(value){
  896. radio = new Ext.form.Radio({
  897. name: 'position',
  898. inputValue: value,
  899. checked: checked,
  900. x: x,
  901. y: y
  902. });
  903. radio.on('check', togglePosition, radio);
  904. return radio;
  905. }
  906. }
  907.     
  908.     function onChangeBgColor(){
  909.      var dialog = new Ext.ux.ColorDialog({
  910. border: false
  911. , closeAction: 'close'
  912. , listeners: {
  913. 'select': { fn: onColorSelect, scope: this, buffer: 350 }
  914. }
  915. , manager: this.app.getDesktop().getManager()
  916. , resizable: false
  917. , title: 'Color Picker'
  918. });
  919. dialog.show(this.app.styles.backgroundcolor);
  920.     }
  921.     
  922.     function onColorSelect(p, hex){
  923. desktop.setBackgroundColor(hex);
  924. }
  925. function onChangeFontColor(){
  926.      var dialog = new Ext.ux.ColorDialog({
  927. border: false
  928. , closeAction: 'close'
  929. , listeners: {
  930. 'select': { fn: onFontColorSelect, scope: this, buffer: 350 }
  931. }
  932. , manager: this.app.getDesktop().getManager()
  933. , resizable: false
  934. , title: 'Color Picker'
  935. });
  936. dialog.show(this.app.styles.fontcolor);
  937.     }
  938. function onFontColorSelect(p, hex){
  939. desktop.setFontColor(hex);
  940. }
  941. function onClose(){
  942. this.owner.win.close();
  943. }
  944. function onSave(){
  945. var c = this.app.styles;
  946. this.buttons[0].disable();
  947.      this.owner.save({
  948.      action: 'saveBackground'
  949.      , callback: function(){
  950.      this.buttons[0].enable();
  951.      }
  952.      , callbackScope: this
  953.      , backgroundcolor: c.backgroundcolor
  954.      , fontcolor: c.fontcolor
  955.      , theme: c.theme.id
  956.      , transparency: c.transparency
  957.      , wallpaper: c.wallpaper.id
  958.      , wallpaperposition: c.wallpaperposition
  959.      });
  960. }
  961. function onSelectionChange(view, sel){
  962. if(sel.length > 0){
  963. var cId = this.app.styles.wallpaper.id,
  964. r = view.getRecord(sel[0]),
  965. d = r.data;
  966. if(parseInt(cId) !== parseInt(r.id)){
  967. if(r && r.id && d.name && d.pathtofile){
  968. desktop.setWallpaper({
  969. id: r.id,
  970. name: d.name,
  971. pathtofile: d.pathtofile
  972. });
  973. }
  974. }
  975. }
  976. }
  977. function togglePosition(field, checked){
  978. if(checked === true){
  979. desktop.setWallpaperPosition(field.inputValue);
  980. }
  981. }
  982. };
  983. Ext.extend(QoDesk.QoPreferences.Background, Ext.Panel, {
  984. afterRender : function(){
  985. QoDesk.QoPreferences.Background.superclass.afterRender.call(this);
  986. this.on('show', this.loadStore, this, {single: true});
  987. },
  988. loadStore : function(){
  989. this.store.load();
  990. }
  991. });
  992. /* 
  993.  * Will ensure that the checkchange event is fired on 
  994.  * node double click
  995.  */
  996. Ext.override(Ext.tree.TreeNodeUI, {
  997. toggleCheck : function(value){
  998.         var cb = this.checkbox;
  999.         if(cb){
  1000.             cb.checked = (value === undefined ? !cb.checked : value);
  1001.             this.fireEvent('checkchange', this.node, cb.checked);
  1002.         }
  1003.     }
  1004. });