X-Git-Url: https://jfr.im/git/irc/quakenet/qwebirc.git/blobdiff_plain/ea29e3d77bb6b6f11545dd02a43883def07ea869..710fd882348569cb7824e0e4628e904375000150:/js/ui/baseui.js diff --git a/js/ui/baseui.js b/js/ui/baseui.js index 582a490..86e1ba9 100644 --- a/js/ui/baseui.js +++ b/js/ui/baseui.js @@ -6,6 +6,7 @@ qwebirc.ui.WINDOW_CONNECT = 0x10; qwebirc.ui.WINDOW_MESSAGES = 0x20; qwebirc.ui.CUSTOM_CLIENT = "custom"; +qwebirc.ui.DEFAULT_HUE = 210; /* nice blue */ qwebirc.ui.BaseUI = new Class({ Implements: [Events], @@ -102,7 +103,7 @@ qwebirc.ui.BaseUI = new Class({ if(!$defined(c)) return null; - return c[this.getWindowIdentifier(client, type, name)]; + return c.get(this.getWindowIdentifier(client, type, name)); }, getActiveWindow: function() { return this.active; @@ -215,41 +216,40 @@ qwebirc.ui.StandardUI = new Class({ initialize: function(parentElement, windowClass, uiName, options) { this.parent(parentElement, windowClass, uiName, options); + this.__styleValues = {hue: qwebirc.ui.DEFAULT_HUE, saturation: 0, lightness: 0, textHue: null, textSaturation: null, textLightness: null}; + if($defined(this.options.hue)) this.__styleValues.hue = this.options.hue; this.tabCompleter = new qwebirc.ui.TabCompleterFactory(this); this.uiOptions = new qwebirc.ui.DefaultOptionsClass(this, options.uiOptionsArg); this.customWindows = new QHash(); - - this.__styleValues = {hue: this.uiOptions.STYLE_HUE, saturation: 0, lightness: 0}; - if($defined(this.options.hue)) this.__styleValues.hue = this.options.hue; + if($defined(this.options.saturation)) this.__styleValues.saturation = this.options.saturation; if($defined(this.options.lightness)) this.__styleValues.lightness = this.options.lightness; + if($defined(this.options.tsaturation)) this.__styleValues.textSaturation = this.options.tsaturation; + if($defined(this.options.tlightness)) this.__styleValues.textLightness = this.options.tlightness; - if(this.options.thue !== null) this.__styleValues.textHue = this.options.thue; - if(this.options.tsaturation !== null) this.__styleValues.textSaturation = this.options.tsaturation; - if(this.options.tlightness !== null) this.__styleValues.textLightness = this.options.tlightness; - - var ev; - if(Browser.Engine.trident) { - ev = "keydown"; + if($defined(this.options.hue)) { /* overridden in url */ + /* ugh... this will go away when we add proper options for hue/sat/light for text and background */ + this.uiOptions.setValueByPrefix("STYLE_HUE", this.__styleValues.hue); } else { - ev = "keypress"; + this.__styleValues.hue = this.uiOptions.STYLE_HUE; /* otherwise copy from serialised store */ } - document.addEvent(ev, this.__handleHotkey.bind(this)); + this.__styleValues.textHue = $defined(this.options.thue) ? this.options.thue : this.__styleValues.hue; + + document.addEvent("keydown", this.__handleHotkey.bind(this)); }, __handleHotkey: function(x) { - if(!x.alt || x.control) { - if(x.key == "backspace" || x.key == "/") - if(!this.getInputFocused(x)) - new Event(x).stop(); - return; - } var success = false; - if(x.key == "a" || x.key == "A") { + if(!x.alt && !x.control && !x.shift && !x.meta) { + if((x.key == "backspace" || x.key == "/") && !this.getInputFocused(x)) { + success = true; + } + } else if(!x.alt || x.control || x.meta) { + /* do nothing */ + } else if(x.key == "a" || x.key == "A") { var highestNum = 0; var highestIndex = -1; success = true; - - new Event(x).stop(); + for(var i=0;i highestNum) { @@ -259,7 +259,7 @@ qwebirc.ui.StandardUI = new Class({ } if(highestIndex > -1) this.selectWindow(this.windowArray[highestIndex]); - } else if(x.key >= '0' && x.key <= '9') { + } else if((x.key >= '0' && x.key <= '9') && !x.shift) { success = true; number = x.key - '0'; @@ -272,15 +272,18 @@ qwebirc.ui.StandardUI = new Class({ return; this.selectWindow(this.windowArray[number]); - } else if(x.key == "left") { + } else if((x.key == "left" || x.key == "up") && !x.shift) { this.prevWindow(); success = true; - } else if(x.key == "right") { + } else if((x.key == "right" || x.key == "down") && !x.shift) { this.nextWindow(); success = true; } - if(success) + + if(success) { new Event(x).stop(); + x.preventDefault(); + } }, getInputFocused: function(x) { if($$("input").indexOf(x.target) == -1 && $$("textarea").indexOf(x.target) == -1) @@ -367,8 +370,8 @@ qwebirc.ui.StandardUI = new Class({ return null; }, - tabComplete: function(element) { - this.tabCompleter.tabComplete(element); + tabComplete: function(element, backwards) { + this.tabCompleter.tabComplete(element, backwards); }, resetTabComplete: function() { this.tabCompleter.reset(); @@ -378,18 +381,19 @@ qwebirc.ui.StandardUI = new Class({ this.setModifiableStylesheetValues({}); }, setModifiableStylesheetValues: function(values) { - for(var k in values) + for (var k in values) this.__styleValues[k] = values[k]; - - if(!$defined(this.__styleSheet)) + + if (!$defined(this.__styleSheet)) return; - - var back = {hue: this.__styleValues.hue, lightness: this.__styleValues.lightness, saturation: this.__styleValues.saturation}; - var front = {hue: this.__styleValues.textHue, lightness: this.__styleValues.textLightness, saturation: this.__styleValues.textSaturation}; - if(!this.__styleValues.textHue && !this.__styleValues.textLightness && !this.__styleValues.textSaturation) + var back = {hue: this.__styleValues.hue, lightness: this.__styleValues.lightness, saturation: this.__styleValues.saturation}; + var front; + if (!$defined(this.__styleValues.textHue) && !$defined(this.__styleValues.textLightness) && !$defined(this.__styleValues.textSaturation)) { front = back; - + } else { + front = {hue: Number(this.__styleValues.textHue), lightness: Number(this.__styleValues.textLightness), saturation: Number(this.__styleValues.textSaturation)} + } var colours = { back: back, front: front @@ -419,16 +423,25 @@ qwebirc.ui.NotificationUI = new Class({ this.__beeper = new qwebirc.ui.Beeper(this.uiOptions); this.__flasher = new qwebirc.ui.Flasher(this.uiOptions); - - this.beep = this.__beeper.beep.bind(this.__beeper); - - this.flash = this.__flasher.flash.bind(this.__flasher); + this.__notifier = new qwebirc.ui.Notifier(this.uiOptions); + this.cancelFlash = this.__flasher.cancelFlash.bind(this.__flasher); }, + beep: function() { + this.__beeper.beep(); + }, + notify: function(title, message, callback) { + this.__beeper.beep(); + this.__flasher.flash(); + this.__notifier.notify(title, message, callback); + }, setBeepOnMention: function(value) { if(value) this.__beeper.soundInit(); }, + setNotifications: function(value) { + this.__notifier.setEnabled(value); + }, updateTitle: function(text) { if(this.__flasher.updateTitle(text)) this.parent(text); @@ -436,6 +449,7 @@ qwebirc.ui.NotificationUI = new Class({ focusChange: function(value) { this.parent(value); this.__flasher.focusChange(value); + this.__notifier.focusChange(value); } }); @@ -445,7 +459,7 @@ qwebirc.ui.NewLoginUI = new Class({ this.postInitialize(); /* I'd prefer something shorter and snappier! */ - var w = this.newCustomWindow("Connection details", true, qwebirc.ui.WINDOW_CONNECT); + var w = this.newCustomWindow("Connect", true, qwebirc.ui.WINDOW_CONNECT); var callback = function(args) { w.close(); callbackfn(args);