差分発生行の前後
無視リスト:
更新日時:
2010/01/16 22:00:04 (2 年 前)
更新者:
h
ログメッセージ:

fixes #45
実装した。設定ダイアログにも項目追加。
ついでにstartup.jsを大幅に修正。

ファイル:
1 変更

凡例:

変更なし
追加
削除
  • branches/release-1.0/components/vocalofx-startup.js

    r107 r110  
    44Cu.import("resource://gre/modules/XPCOMUtils.jsm"); 
    55 
    6 var ios=Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); 
    7 var resProt=ios.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler); 
    8 var modulesDir=__LOCATION__.parent.parent; 
    9 modulesDir.append("modules"); 
    10 resProt.setSubstitution("p4v-jsm",ios.newFileURI(modulesDir)); 
    11  
    12 Cu.import("resource://p4v-jsm/common.js"); 
    13 var obsSvc = new xpc.obsSvc; 
    14 var prefSvc = new xpc.prefSvc; 
    15 var prefBrc2 = new xpc.prefBrc2; 
    16 var extMgr = new xpc.extMgr; 
    17 var strbndSvc = new xpc.strbndSvc; 
    18  
    196function VocaloFxStartup(){} 
    207VocaloFxStartup.prototype = { 
    21         classID: Components.ID("{C5752C51-3062-42db-A5F8-8CF9920B4757}"), 
    22         classDescription: "VocaloFx Startup", 
    23         contractID: "@rayflood.org/vocalofx-startup;1", 
    24         _xpcom_categories: [{category: "app-startup", service: true}], 
    25         QueryInterface: XPCOMUtils.generateQI([Ci.nsIObserver]), 
    26         helpInfo: this.classDescription, 
    27  
    28         APP_STARTUP: "app-startup", 
    29         FINAL_UI_STARTUP: "final-ui-startup", 
    30         QUIT_APPLICATION: "quit-application", 
    31         observe: function(aSubject, aTopic, aData){ 
     8        classID           : Components.ID("{C5752C51-3062-42db-A5F8-8CF9920B4757}"), 
     9        classDescription  : "VocaloFx Startup", 
     10        contractID        : "@rayflood.org/vocalofx-startup;1", 
     11        _xpcom_categories : [{category: "app-startup", service: true}], 
     12        QueryInterface    : XPCOMUtils.generateQI([Ci.nsIObserver]), 
     13        helpInfo          : this.classDescription, 
     14 
     15        APP_STARTUP      : "app-startup", 
     16        FINAL_UI_STARTUP : "final-ui-startup", 
     17        QUIT_APPLICATION : "quit-application", 
     18 
     19        ENABLED_ITEMS    : "extensions.enabledItems", 
     20        DEFAULT_THEME    : "{972ce4c6-7e08-4474-a285-3208198ce6fd}", 
     21        MOZ_LWTHEME_USED : "lightweightThemes.isThemeSelected", 
     22        GREASEMONKEY_ID  : "{e4a8a97b-f2ed-450b-b12d-ee082ba24781}", 
     23 
     24        VOCALOFX_PROPERTY_VERSION  : "extensions.vocalofx.version", 
     25        SKIN_PROPERTY_IMAGE        : "extensions.vocalofx.skin_image", 
     26        SKIN_PROPERTY_PALLET       : "extensions.vocalofx.skin_pallet", 
     27        SKIN_PROPERTY_POSITION     : "extensions.vocalofx.skin_position", 
     28        SKIN_PROPERTY_CATEGORY     : "extensions.vocalofx.skin_category", 
     29        SKIN_PROPERTY_USE_ALLPARET : "extensions.vocalofx.skin_use_allparet", 
     30        SKIN_SELECT_RANDOM         : "extensions.vocalofx.skin_select_random", 
     31        ALERT_ADDON                : "extensions.vocalofx.alert_addon.", 
     32        ALERT_THEME                : "extensions.vocalofx.skin_theme_alert", 
     33        ALERT_PIAPROGM             : "extensions.vocalofx.tool_piaprogm_alert", 
     34 
     35        observe : function(aSubject, aTopic, aData){ 
    3236                switch(aTopic){ 
    3337                case this.APP_STARTUP: 
    34                         obsSvc.addObserver(this, this.FINAL_UI_STARTUP, false); 
    35                         obsSvc.addObserver(this, this.QUIT_APPLICATION, false); 
     38                        this.constructor(); 
     39                        this.obsSvc.addObserver(this, this.FINAL_UI_STARTUP, false); 
     40                        this.obsSvc.addObserver(this, this.QUIT_APPLICATION, false); 
    3641                break; 
    3742                case this.FINAL_UI_STARTUP: 
    38                         obsSvc.removeObserver(this, this.FINAL_UI_STARTUP); 
     43                        this.obsSvc.removeObserver(this, this.FINAL_UI_STARTUP); 
    3944                        this.init(); 
     45                        this.selectSkinByRandom(); 
    4046                        this.alert(); 
    4147                        this.piaprogm(); 
    4248                break; 
    4349                case this.QUIT_APPLICATION: 
    44                         obsSvc.removeObserver(this, this.QUIT_APPLICATION); 
     50                        this.obsSvc.removeObserver(this, this.QUIT_APPLICATION); 
    4551                break; 
    4652                } 
    4753        } 
    4854        , 
    49         init: function(){ 
    50                 const ENABLED_ITEMS = "extensions.enabledItems"; 
     55        constructor : function(){ 
     56                var ios=Cc["@mozilla.org/network/io-service;1"].getService(Ci.nsIIOService); 
     57                var resProt=ios.getProtocolHandler("resource").QueryInterface(Ci.nsIResProtocolHandler); 
     58                var modulesDir=__LOCATION__.parent.parent; 
     59                modulesDir.append("modules"); 
     60                resProt.setSubstitution("p4v-jsm",ios.newFileURI(modulesDir)); 
     61                Cu.import("resource://p4v-jsm/common.js"); 
     62 
     63                this.obsSvc = new xpc.obsSvc; 
     64                this.prefSvc = new xpc.prefSvc; 
     65                this.prefBrc2 = new xpc.prefBrc2; 
     66                this.extMgr = new xpc.extMgr; 
     67                this.strbndSvc = new xpc.strbndSvc; 
     68                this.verComp = new xpc.verComp; 
     69                this.ww = new xpc.ww; 
     70                this.skin_properties = this.strbndSvc.createBundle("chrome://vocalofx/content/skin/skin.properties"); 
     71        } 
     72        , 
     73        init : function(){ 
    5174                this.enabledItems = {}; 
    5275 
    53                 var items = prefBrc2.getCharPref(ENABLED_ITEMS).split(","); 
     76                var items = this.prefBrc2.getCharPref(this.ENABLED_ITEMS).split(","); 
    5477                for(var i = 0; i < items.length; i++){ 
    5578                        var item = items[i].split(":"); 
     
    5780                } 
    5881 
    59                 const VOCALOFX_PROPERTY_VERSION = "extensions.vocalofx.version"; 
    60                 const SKIN_PROPERTY_CATEGORY = "extensions.vocalofx.skin_category"; 
    61                 var addon = extMgr.getItemForID("vocalofx@rayflood.org"); 
     82                var addon = this.extMgr.getItemForID("vocalofx@rayflood.org"); 
    6283                var version = "0.1pre"; 
    6384                try{ 
    64                         version = prefBrc2.getCharPref(VOCALOFX_PROPERTY_VERSION); 
     85                        version = this.prefBrc2.getCharPref(this.VOCALOFX_PROPERTY_VERSION); 
    6586                } 
    6687                catch(e){ 
    6788                        try{ 
    68                                 prefBrc2.getCharPref(SKIN_PROPERTY_CATEGORY); 
     89                                this.prefBrc2.getCharPref(this.SKIN_PROPERTY_CATEGORY); 
    6990                        } 
    7091                        catch(e){ 
     
    7697                } 
    7798 
    78                 prefBrc2.setCharPref(VOCALOFX_PROPERTY_VERSION, addon.version); 
     99                this.prefBrc2.setCharPref(this.VOCALOFX_PROPERTY_VERSION, addon.version); 
    79100                if(version == "0.0"){ 
    80101                        this.initVocalofxPref(); 
    81102                } 
    82                 else if(version == "0.1pre"){ 
    83                         this.update_0_1pre(); 
    84                 } 
    85                 var verComp = new xpc.verComp; 
    86                 if(verComp.compare("1.0", version) > 0){ 
    87                         var ww = new xpc.ww; 
    88                         ww.openWindow(null, "chrome://vocalofx/content/splash/splash_alert.xul", "vocalofx-splash-alert", "chrome,centerscreen,alwaysRaised=yes,modal=yes", null); 
     103                else{ 
     104                        this.resetVocalofxSkin(); 
     105                } 
     106                if(this.verComp.compare("1.0", version) > 0){ 
     107                        this.ww.openWindow(null, "chrome://vocalofx/content/splash/splash_alert.xul", "vocalofx-splash-alert", "chrome,centerscreen,alwaysRaised=yes,modal=yes", null); 
    89108                } 
    90109        } 
     
    116135user_pref("extensions.vocalofx.version", "0.1pre3"); 
    117136*/ 
    118         initVocalofxPref: function(){ 
     137        initVocalofxPref : function(){ 
    119138                var srchEngine = new xpc.lclstr; 
    120139                srchEngine.data = "ピアプロ音楽検索"; 
     
    140159user_pref("extensions.vocalofx.tool.startup.fullmiku", false); 
    141160*/ 
    142         update_0_1pre: function(){ 
    143                 const SKIN_PROPERTY_IMAGE = "extensions.vocalofx.skin_image"; 
    144                 const SKIN_PROPERTY_PALLET = "extensions.vocalofx.skin_pallet"; 
    145                 const SKIN_PROPERTY_POSITION = "extensions.vocalofx.skin_position"; 
    146                 const SKIN_PROPERTY_CATEGORY = "extensions.vocalofx.skin_category"; 
    147                 try{ 
    148                         var skin_properties = strbndSvc.createBundle("chrome://vocalofx/content/skin/skin.properties"); 
    149                         var image = prefBrc2.getCharPref(SKIN_PROPERTY_IMAGE); 
    150                         var token = image.split("/"); 
    151                         var imagefile = token[token.length - 1]; 
    152                         var image_id = imagefile.substr(0, imagefile.lastIndexOf(".png")); 
    153                         var position = skin_properties.GetStringFromName(image_id + ".position"); 
    154                         prefBrc2.setCharPref(SKIN_PROPERTY_POSITION, position); 
    155  
    156                         var category = prefBrc2.getCharPref(SKIN_PROPERTY_CATEGORY); 
    157                         var pallet = category; 
    158                         prefBrc2.setCharPref(SKIN_PROPERTY_PALLET + "." + category, pallet); 
    159                         prefBrc2.setCharPref(SKIN_PROPERTY_PALLET, pallet); 
    160                 } 
    161                 catch(e){ 
    162                         // nop 
    163                 } 
    164         } 
    165         , 
    166         alert: function(){ 
    167                 const ALERT_ADDON = "extensions.vocalofx.alert_addon."; 
    168                 const ALERT_THEME = "extensions.vocalofx.skin_theme_alert"; 
    169                 const DEFAULT_THEME = "{972ce4c6-7e08-4474-a285-3208198ce6fd}"; 
     161        alert : function(){ 
    170162                var installedAddons = new xpc.sptAry; 
    171163 
    172                 var addons = prefSvc.getBranch(ALERT_ADDON).getChildList("", {}); 
     164                var addons = this.prefSvc.getBranch(this.ALERT_ADDON).getChildList("", {}); 
    173165                for(var i = 0; i < addons.length; i++){ 
    174                         if(!prefBrc2.getBoolPref(ALERT_ADDON + addons[i])){ 
     166                        if(!this.prefBrc2.getBoolPref(this.ALERT_ADDON + addons[i])){ 
    175167                                continue; 
    176168                        } 
     
    182174                } 
    183175 
    184                 if(prefBrc2.getBoolPref(ALERT_THEME) && (prefBrc2.getCharPref("general.skins.selectedSkin") != "classic/1.0" || this.isLWThemeUsed())){ 
     176                if(this.prefBrc2.getBoolPref(this.ALERT_THEME) && (this.prefBrc2.getCharPref("general.skins.selectedSkin") != "classic/1.0" || this.isLWThemeUsed())){ 
    185177                        var string = new xpc.supportsString; 
    186                         string.data = DEFAULT_THEME; 
     178                        string.data = this.DEFAULT_THEME; 
    187179                        installedAddons.AppendElement(string); 
    188180                } 
    189181 
    190182                if(installedAddons.Count()){ 
    191                         var ww = new xpc.ww; 
    192                         ww.openWindow(null, "chrome://vocalofx/content/alert.xul", "vocalofx-alert", "chrome,centerscreen,alwaysRaised=yes,modal=yes", installedAddons); 
    193                 } 
    194         } 
    195         , 
    196         isLWThemeUsed: function(){ 
    197                 const MOZ_LWTHEME_USED = "lightweightThemes.isThemeSelected"; 
     183                        this.ww.openWindow(null, "chrome://vocalofx/content/alert.xul", "vocalofx-alert", "chrome,centerscreen,alwaysRaised=yes,modal=yes", installedAddons); 
     184                } 
     185        } 
     186        , 
     187        isLWThemeUsed : function(){ 
    198188                var lwt_used; 
    199189                try{ 
    200                         lwt_used = prefBrc2.getBoolPref(MOZ_LWTHEME_USED); 
     190                        lwt_used = this.prefBrc2.getBoolPref(this.MOZ_LWTHEME_USED); 
    201191                } 
    202192                catch(e){ 
     
    206196        } 
    207197        , 
    208         piaprogm: function(){ 
    209                 const GREASEMONKEY_ID = "{e4a8a97b-f2ed-450b-b12d-ee082ba24781}"; 
    210                 const ALERT_PIAPROGM = "extensions.vocalofx.tool_piaprogm_alert"; 
    211                 if(this.enabledItems[GREASEMONKEY_ID] && prefBrc2.getBoolPref(ALERT_PIAPROGM)){ 
    212                         var ww = new xpc.ww; 
    213                         ww.openWindow(null, "chrome://vocalofx/content/tool/piapro_gm.xul", "piaprogm-alert", "chrome,centerscreen,alwaysRaised=yes,modal=yes", null); 
     198        piaprogm : function(){ 
     199                if(this.enabledItems[this.GREASEMONKEY_ID] && this.prefBrc2.getBoolPref(this.ALERT_PIAPROGM)){ 
     200                        this.ww.openWindow(null, "chrome://vocalofx/content/tool/piapro_gm.xul", "piaprogm-alert", "chrome,centerscreen,alwaysRaised=yes,modal=yes", null); 
     201                } 
     202        } 
     203        , 
     204        selectSkinByRandom : function(){ 
     205                if(!this.prefBrc2.getBoolPref(this.SKIN_SELECT_RANDOM)){ 
     206                        return; 
     207                } 
     208 
     209                try{ 
     210                        var skins = this.skin_properties.GetStringFromName("skinmenu").split(","); 
     211                        var skin_index = Math.floor(Math.random() * skins.length); 
     212                        var category = this.skin_properties.GetStringFromName(skins[skin_index] + ".category"); 
     213                        var pallets; 
     214                        if(category == "piapro" || this.prefBrc2.getBoolPref(this.SKIN_PROPERTY_USE_ALLPARET)){ 
     215                                pallets = this.skin_properties.GetStringFromName("palletmenu").split(","); 
     216                        } 
     217                        else{ 
     218                                pallets = this.skin_properties.GetStringFromName("palletmenu." + category).split(","); 
     219                        } 
     220                        var pallet_index = Math.floor(Math.random() * (pallets.length - 1)); 
     221                        this.selectVocalofxSkin(skins[skin_index], pallets[pallet_index]); 
     222                } 
     223                catch(e){ 
     224                        // nop 
     225                } 
     226        } 
     227        , 
     228        resetVocalofxSkin : function(){ 
     229                try{ 
     230                        var image = this.prefBrc2.getCharPref(this.SKIN_PROPERTY_IMAGE); 
     231                        var token = image.split("/"); 
     232                        var imagefile = token[token.length - 1]; 
     233                        var skin = imagefile.substr(0, imagefile.lastIndexOf(".png")); 
     234                        var pallet = this.prefBrc2.getCharPref(this.SKIN_PROPERTY_PALLET); 
     235                        this.selectVocalofxSkin(skin, pallet); 
     236                } 
     237                catch(e){ 
     238                        // nop 
     239                } 
     240        } 
     241        , 
     242        selectVocalofxSkin : function(skin, pallet){ 
     243                try{ 
     244                        var position = this.skin_properties.GetStringFromName(skin + ".position"); 
     245                        var category = this.skin_properties.GetStringFromName(skin + ".category"); 
     246                        this.prefBrc2.setCharPref(this.SKIN_PROPERTY_IMAGE, "chrome://vocalofx/content/skin/" + skin + ".png"); 
     247                        this.prefBrc2.setCharPref(this.SKIN_PROPERTY_POSITION, position); 
     248                        this.prefBrc2.setCharPref(this.SKIN_PROPERTY_CATEGORY, category); 
     249                        this.prefBrc2.setCharPref(this.SKIN_PROPERTY_PALLET + "." + category, pallet); 
     250                        this.prefBrc2.setCharPref(this.SKIN_PROPERTY_PALLET, pallet); 
     251                } 
     252                catch(e){ 
     253                        // nop 
    214254                } 
    215255        }