diff options
Diffstat (limited to 'src/modules/notifier/libkvinotifier.cpp')
| -rw-r--r-- | src/modules/notifier/libkvinotifier.cpp | 646 |
1 files changed, 323 insertions, 323 deletions
diff --git a/src/modules/notifier/libkvinotifier.cpp b/src/modules/notifier/libkvinotifier.cpp index 90f51ba7e..5deb62778 100644 --- a/src/modules/notifier/libkvinotifier.cpp +++ b/src/modules/notifier/libkvinotifier.cpp @@ -1,323 +1,323 @@ -//==================================================================================
-//
-// File : libkvinotifier.cpp
-// Creation date : Tue Jul 7 2004 20:21:12 CEST by Szymon Stefanek
-//
-// Copyright (C) 2005 Iacopo Palazzi < iakko(at)siena(dot)linux(dot)it >
-//
-// This program is FREE software. You can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your opinion) any later version.
-//
-// This program is distributed in the HOPE that it will be USEFUL,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
-// See the GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program. If not, write to the Free Software Foundation,
-// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-//
-//==================================================================================
-
-#include "kvi_module.h"
-
-
-#include "notifierwindow.h"
-#include "notifiermessage.h"
-
-#include "kvi_kvs_variant.h"
-#include "kvi_app.h"
-#include "kvi_frame.h"
-#include "kvi_window.h"
-#include "kvi_locale.h"
-#include "kvi_iconmanager.h"
-#include "kvi_time.h"
-#include "kvi_options.h"
-
-#include <qsplitter.h>
-
-KviNotifierWindow * g_pNotifierWindow = 0;
-kvi_time_t g_tNotifierDisabledUntil = 0;
-
-/*
- @doc: notifier.message
- @type:
- command
- @title:
- notifier.message
- @short:
- Adds a message to the notifier window
- @syntax:
- notifier.message [-q|quiet] [-n|noanim] [-w[=<window_id:string>]!] [-i=<image_id:string>] [-t=<timeout:integer>] <messag:string>
- @description:
- Adds a message to the notifier window.
- The notifier window is shown (if not already visible)
- unless the -q switch is present.
- The new message becomes the current message of the notifier
- unless the user is already typing in the input window
- and the typed message would be directed to a different window.
- In that case the message is appended at the end of the
- message queue and the user will be able to scroll to it
- by using the proper notifier buttons.[br]
- The <message> text can contain simple html tags: basically you are
- allowed to use <b> and <i>. The usage of other
- tags is possible but is discouraged since it tends to
- mess up the message display. In particular you should avoid
- any color and/or font specification since the notifier is
- skinnable and you don't know which color will result in a visible text.
- [b]Please note that the user can forcibly disable the notifier
- for a limited period of time (a sort of "don't bug me" option).[/b]
- @switches:
- !sw: -n | --noanim
- Do not animate
- !sw: -w | --windowid
- Causes the message gets attacched to the specified window and
- the user is able to type commands in that window after
- showing up the notifier input. If the "=<window_id>" part
- is omitted then the current window is used.[br]
- !sw: -i | --icon
- If the -i=<image_id> switch is present then the
- message has the specified image displayed.
- See the [doc:image_id]documentation on the image identifier[/doc]
- for more informations about the image_id parameter.[br]
- !sw: -q | --quiet
- If you use -q then you must explicitly call [cmd]notifier.show[/cmd] to
- show the notifier. If the -n switch is present then
- the show action will not be animated (the notifier
- will be shown immediately instead of fading in).
- Obviously -n has no meaning if -q is used.[br]
- !sw: -t | --timeout
- Set the message lifetime to <timeout>
- Obviously this option has no meaning if the window is not going to be shown.
- The timeout may be overriddent by new messages but only in the future.
- If the timeout expires and is not overridden by any new message
- then the window will be automatically hidden.
- A zero timeout disables auto-hiding.
- @seealso:
- [cmd]notifier.show[/cmd] [cmd]notifier.hide[/cmd] [fnc]$notifier.isEnabled[/fnc]()
- @examples:
- [example]
- notifier.message Hello world!
- [cmd]notifier.hide[/cmd]
- notifier.message -q This is a hidden message!
- notifier.message -q -i=14 This is a second hidden message with an icon
- [cmd]notifier.show[/cmd]
- notifier.message -w This message has the current window associated
- notifier.message -w=[fnc]$window[/fnc] This is equivalent to the above
- notifier.message <b>Bold text</b> and normal text
- [cmd]notifier.hide[/cmd]
- notifier.message -t=10 This message will be shown only for 10 seconds
- [/example]
-*/
-
-static bool notifier_kvs_cmd_message(KviKvsModuleCommandCall * c)
-{
- QString szMessage;
- KVSM_PARAMETERS_BEGIN(c)
- KVSM_PARAMETER("message",KVS_PT_STRING,0,szMessage)
- KVSM_PARAMETERS_END(c)
-
- if(!g_pNotifierWindow)
- g_pNotifierWindow = new KviNotifierWindow();
-
- QString szIco="";
- QString szWnd="";
-
- KviWindow * pWnd = c->window();
-
- if(c->hasSwitch('w',"window_id"))
- {
- c->switches()->getAsStringIfExisting('w',"window_id",szWnd);
- if(!szWnd.isEmpty())
- {
- pWnd=g_pApp->findWindow(szWnd);
- if(!pWnd)
- c->warning(__tr2qs_ctx("The specified window does not exist","notifier"));
- }
- }
- c->switches()->getAsStringIfExisting('i',"icon",szIco);
- kvs_int_t uTime=0;
- if(c->hasSwitch('t',"timeout"))
- {
- KviKvsVariant *time=c->getSwitch('t',"timeout");
- if(time)
- {
- bool bOk=time->asInteger(uTime);
- if(!bOk)
- {
- uTime = 0;
- c->warning(__tr2qs_ctx("The specified timeout is not valid, assuming 0","notifier"));
- }
- } else {
- c->warning(__tr2qs_ctx("The -t switch expects a timeout in seconds","notifier"));
- }
- }
-
- g_pNotifierWindow->addMessage(pWnd,szIco,szMessage,uTime);
-
- if(!c->hasSwitch('q',"quiet"))
- g_pNotifierWindow->doShow(!(c->hasSwitch('n',"new")));
- return true;
-}
-
-/*
- @doc: notifier.hide
- @type:
- command
- @title:
- notifier.hide
- @short:
- Hides the notifier window
- @syntax:
- notifier.hide [-n|--noanim]
- @switches:
- !sw: -n
- Causes the hide operation is not animated.
- @description:
- Hide the notifier window
- [b]Please note that the user can forcibly disable the notifier
- for a limited period of time (a sort of "don't bug me" option).[/b]
- @seealso:
- [cmd]notifier.show[/cmd] [cmd]notifier.message[/cmd] [fnc]$notifier.isEnabled[/fnc]
-*/
-
-static bool notifier_kvs_cmd_hide(KviKvsModuleCommandCall * c)
-{
- if(g_pNotifierWindow) g_pNotifierWindow->doHide(!(c->hasSwitch('n',"notanimated")));
- return true;
-}
-
-/*
- @doc: notifier.show
- @type:
- command
- @title:
- notifier.show
- @short:
- Shows the notifier window
- @syntax:
- notifier.show [-n|--noanim]
- @switches:
- !sw: -n
- Disables the animation
- @description:
- Shows the notifier window if it is not already visible
- If the -n switch is present then the show operation is
- not animated.[br]
- The notifier is shown ONLY if it contains some messages.
- [b]Please note that the user can forcibly disable the notifier
- for a limited period of time (a sort of "don't bug me" option).[/b]
- @seealso:
- [cmd]notifier.hide[/cmd] [cmd]notifier.message[/cmd] [fnc]$notifier.isEnabled[/fnc]
-*/
-
-static bool notifier_kvs_cmd_show(KviKvsModuleCommandCall * c)
-{
- if(!g_pNotifierWindow)return true;
- if(!g_pNotifierWindow->countTabs())return true;
-
- g_pNotifierWindow->setDisableHideOnMainWindowGotAttention(true);
- g_pNotifierWindow->doShow(!(c->hasSwitch('n',"noanim")));
-
- return true;
-}
-/*
- @doc: notifier.isEnabled
- @type:
- function
- @title:
- $notifier.isEnabled
- @short:
- Returns 1 if the notifier window is enabled
- @syntax:
- <boolean> $notifier.isEnabled
- @description:
- Returns 1 if the notifier window is enabled and 0 otherwise.
- The user can forcibly disable the notifier as a sort of "don't bug me"
- feature for a limited period of time. When the notifier
- is disabled the messages sent to it will not be shown.[br]
- The only method that you (scripter) can use to forcibly
- re-enable the notifier is to unload the module and
- reload it...but [b]DON'T do it[/b] :)[br]
- There is also a global option that allows forcibly disabling
- the notifier forever, this option could be overridden with [cmd]option[/cmd]
- instead.. but again [b]DON'T do it[/b] :)[br]
-
-*/
-
-static bool notifier_kvs_fnc_isEnabled(KviKvsModuleFunctionCall * c)
-{
- bool bCheck;
- if(KVI_OPTION_BOOL(KviOption_boolForciblyDisableNotifier))
- bCheck=false;
- else
- bCheck=g_tNotifierDisabledUntil < kvi_unixTime();
- c->returnValue()->setBoolean(bCheck);
- return true;
-}
-
-static bool notifier_module_init(KviModule * m)
-{
-
- KVSM_REGISTER_SIMPLE_COMMAND(m,"message",notifier_kvs_cmd_message);
- KVSM_REGISTER_SIMPLE_COMMAND(m,"show",notifier_kvs_cmd_show);
- KVSM_REGISTER_SIMPLE_COMMAND(m,"hide",notifier_kvs_cmd_hide);
- KVSM_REGISTER_FUNCTION(m,"isEnabled",notifier_kvs_fnc_isEnabled);
-
- return true;
-}
-
-static bool notifier_module_cleanup(KviModule *m)
-{
- if(g_pNotifierWindow)
- {
- delete g_pNotifierWindow;
- g_pNotifierWindow = 0;
- }
- return true;
-}
-
-static bool notifier_module_can_unload(KviModule *m)
-{
- return (!g_pNotifierWindow);
-}
-
-typedef struct _NotifierMessageSupaDupaParameterStruct
-{
- KviWindow * pWindow;
- QString szIcon;
- QString szMessage;
- unsigned int uMessageLifetime; // 0 means no hide
-} NotifierMessageSupaDupaParameterStruct;
-
-static bool notifier_module_ctrl(KviModule *,const char *operation,void *param)
-{
- if(kvi_strEqualCI("notifier::message",operation))
- {
- NotifierMessageSupaDupaParameterStruct * p = (NotifierMessageSupaDupaParameterStruct *)param;
- if(!p)return false;
-
- if(!g_pNotifierWindow)
- g_pNotifierWindow = new KviNotifierWindow();
-
- g_pNotifierWindow->addMessage(p->pWindow,p->szIcon,p->szMessage,p->uMessageLifetime);
- g_pNotifierWindow->doShow(KVI_OPTION_BOOL(KviOption_boolDisableNotifierFadein)?false:true);
-
- return true;
- }
- return false;
-}
-
-KVIRC_MODULE(
- "Notifier",
- "2.0.0",
- "Copyright (C) 2005:\n" \
- " Iacopo Palazzi (iakko at siena dot linux dot it)",
- "KVIrc Client - Taskbar Notifier",
- notifier_module_init,
- notifier_module_can_unload,
- notifier_module_ctrl,
- notifier_module_cleanup
-)
+//================================================================================== +// +// File : libkvinotifier.cpp +// Creation date : Tue Jul 7 2004 20:21:12 CEST by Szymon Stefanek +// +// Copyright (C) 2005 Iacopo Palazzi < iakko(at)siena(dot)linux(dot)it > +// +// This program is FREE software. You can redistribute it and/or +// modify it under the terms of the GNU General Public License +// as published by the Free Software Foundation; either version 2 +// of the License, or (at your opinion) any later version. +// +// This program is distributed in the HOPE that it will be USEFUL, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +// See the GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program. If not, write to the Free Software Foundation, +// Inc. ,59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +// +//================================================================================== + +#include "kvi_module.h" + + +#include "notifierwindow.h" +#include "notifiermessage.h" + +#include "kvi_kvs_variant.h" +#include "kvi_app.h" +#include "kvi_frame.h" +#include "kvi_window.h" +#include "kvi_locale.h" +#include "kvi_iconmanager.h" +#include "kvi_time.h" +#include "kvi_options.h" + +#include <qsplitter.h> + +KviNotifierWindow * g_pNotifierWindow = 0; +kvi_time_t g_tNotifierDisabledUntil = 0; + +/* + @doc: notifier.message + @type: + command + @title: + notifier.message + @short: + Adds a message to the notifier window + @syntax: + notifier.message [-q|quiet] [-n|noanim] [-w[=<window_id:string>]!] [-i=<image_id:string>] [-t=<timeout:integer>] <messag:string> + @description: + Adds a message to the notifier window. + The notifier window is shown (if not already visible) + unless the -q switch is present. + The new message becomes the current message of the notifier + unless the user is already typing in the input window + and the typed message would be directed to a different window. + In that case the message is appended at the end of the + message queue and the user will be able to scroll to it + by using the proper notifier buttons.[br] + The <message> text can contain simple html tags: basically you are + allowed to use <b> and <i>. The usage of other + tags is possible but is discouraged since it tends to + mess up the message display. In particular you should avoid + any color and/or font specification since the notifier is + skinnable and you don't know which color will result in a visible text. + [b]Please note that the user can forcibly disable the notifier + for a limited period of time (a sort of "don't bug me" option).[/b] + @switches: + !sw: -n | --noanim + Do not animate + !sw: -w | --windowid + Causes the message gets attacched to the specified window and + the user is able to type commands in that window after + showing up the notifier input. If the "=<window_id>" part + is omitted then the current window is used.[br] + !sw: -i | --icon + If the -i=<image_id> switch is present then the + message has the specified image displayed. + See the [doc:image_id]documentation on the image identifier[/doc] + for more informations about the image_id parameter.[br] + !sw: -q | --quiet + If you use -q then you must explicitly call [cmd]notifier.show[/cmd] to + show the notifier. If the -n switch is present then + the show action will not be animated (the notifier + will be shown immediately instead of fading in). + Obviously -n has no meaning if -q is used.[br] + !sw: -t | --timeout + Set the message lifetime to <timeout> + Obviously this option has no meaning if the window is not going to be shown. + The timeout may be overriddent by new messages but only in the future. + If the timeout expires and is not overridden by any new message + then the window will be automatically hidden. + A zero timeout disables auto-hiding. + @seealso: + [cmd]notifier.show[/cmd] [cmd]notifier.hide[/cmd] [fnc]$notifier.isEnabled[/fnc]() + @examples: + [example] + notifier.message Hello world! + [cmd]notifier.hide[/cmd] + notifier.message -q This is a hidden message! + notifier.message -q -i=14 This is a second hidden message with an icon + [cmd]notifier.show[/cmd] + notifier.message -w This message has the current window associated + notifier.message -w=[fnc]$window[/fnc] This is equivalent to the above + notifier.message <b>Bold text</b> and normal text + [cmd]notifier.hide[/cmd] + notifier.message -t=10 This message will be shown only for 10 seconds + [/example] +*/ + +static bool notifier_kvs_cmd_message(KviKvsModuleCommandCall * c) +{ + QString szMessage; + KVSM_PARAMETERS_BEGIN(c) + KVSM_PARAMETER("message",KVS_PT_STRING,0,szMessage) + KVSM_PARAMETERS_END(c) + + if(!g_pNotifierWindow) + g_pNotifierWindow = new KviNotifierWindow(); + + QString szIco=""; + QString szWnd=""; + + KviWindow * pWnd = c->window(); + + if(c->hasSwitch('w',"window_id")) + { + c->switches()->getAsStringIfExisting('w',"window_id",szWnd); + if(!szWnd.isEmpty()) + { + pWnd=g_pApp->findWindow(szWnd); + if(!pWnd) + c->warning(__tr2qs_ctx("The specified window does not exist","notifier")); + } + } + c->switches()->getAsStringIfExisting('i',"icon",szIco); + kvs_int_t uTime=0; + if(c->hasSwitch('t',"timeout")) + { + KviKvsVariant *time=c->getSwitch('t',"timeout"); + if(time) + { + bool bOk=time->asInteger(uTime); + if(!bOk) + { + uTime = 0; + c->warning(__tr2qs_ctx("The specified timeout is not valid, assuming 0","notifier")); + } + } else { + c->warning(__tr2qs_ctx("The -t switch expects a timeout in seconds","notifier")); + } + } + + g_pNotifierWindow->addMessage(pWnd,szIco,szMessage,uTime); + + if(!c->hasSwitch('q',"quiet")) + g_pNotifierWindow->doShow(!(c->hasSwitch('n',"new"))); + return true; +} + +/* + @doc: notifier.hide + @type: + command + @title: + notifier.hide + @short: + Hides the notifier window + @syntax: + notifier.hide [-n|--noanim] + @switches: + !sw: -n + Causes the hide operation is not animated. + @description: + Hide the notifier window + [b]Please note that the user can forcibly disable the notifier + for a limited period of time (a sort of "don't bug me" option).[/b] + @seealso: + [cmd]notifier.show[/cmd] [cmd]notifier.message[/cmd] [fnc]$notifier.isEnabled[/fnc] +*/ + +static bool notifier_kvs_cmd_hide(KviKvsModuleCommandCall * c) +{ + if(g_pNotifierWindow) g_pNotifierWindow->doHide(!(c->hasSwitch('n',"notanimated"))); + return true; +} + +/* + @doc: notifier.show + @type: + command + @title: + notifier.show + @short: + Shows the notifier window + @syntax: + notifier.show [-n|--noanim] + @switches: + !sw: -n + Disables the animation + @description: + Shows the notifier window if it is not already visible + If the -n switch is present then the show operation is + not animated.[br] + The notifier is shown ONLY if it contains some messages. + [b]Please note that the user can forcibly disable the notifier + for a limited period of time (a sort of "don't bug me" option).[/b] + @seealso: + [cmd]notifier.hide[/cmd] [cmd]notifier.message[/cmd] [fnc]$notifier.isEnabled[/fnc] +*/ + +static bool notifier_kvs_cmd_show(KviKvsModuleCommandCall * c) +{ + if(!g_pNotifierWindow)return true; + if(!g_pNotifierWindow->countTabs())return true; + + g_pNotifierWindow->setDisableHideOnMainWindowGotAttention(true); + g_pNotifierWindow->doShow(!(c->hasSwitch('n',"noanim"))); + + return true; +} +/* + @doc: notifier.isEnabled + @type: + function + @title: + $notifier.isEnabled + @short: + Returns 1 if the notifier window is enabled + @syntax: + <boolean> $notifier.isEnabled + @description: + Returns 1 if the notifier window is enabled and 0 otherwise. + The user can forcibly disable the notifier as a sort of "don't bug me" + feature for a limited period of time. When the notifier + is disabled the messages sent to it will not be shown.[br] + The only method that you (scripter) can use to forcibly + re-enable the notifier is to unload the module and + reload it...but [b]DON'T do it[/b] :)[br] + There is also a global option that allows forcibly disabling + the notifier forever, this option could be overridden with [cmd]option[/cmd] + instead.. but again [b]DON'T do it[/b] :)[br] + +*/ + +static bool notifier_kvs_fnc_isEnabled(KviKvsModuleFunctionCall * c) +{ + bool bCheck; + if(KVI_OPTION_BOOL(KviOption_boolForciblyDisableNotifier)) + bCheck=false; + else + bCheck=g_tNotifierDisabledUntil < kvi_unixTime(); + c->returnValue()->setBoolean(bCheck); + return true; +} + +static bool notifier_module_init(KviModule * m) +{ + + KVSM_REGISTER_SIMPLE_COMMAND(m,"message",notifier_kvs_cmd_message); + KVSM_REGISTER_SIMPLE_COMMAND(m,"show",notifier_kvs_cmd_show); + KVSM_REGISTER_SIMPLE_COMMAND(m,"hide",notifier_kvs_cmd_hide); + KVSM_REGISTER_FUNCTION(m,"isEnabled",notifier_kvs_fnc_isEnabled); + + return true; +} + +static bool notifier_module_cleanup(KviModule *m) +{ + if(g_pNotifierWindow) + { + delete g_pNotifierWindow; + g_pNotifierWindow = 0; + } + return true; +} + +static bool notifier_module_can_unload(KviModule *m) +{ + return (!g_pNotifierWindow); +} + +typedef struct _NotifierMessageSupaDupaParameterStruct +{ + KviWindow * pWindow; + QString szIcon; + QString szMessage; + unsigned int uMessageLifetime; // 0 means no hide +} NotifierMessageSupaDupaParameterStruct; + +static bool notifier_module_ctrl(KviModule *,const char *operation,void *param) +{ + if(kvi_strEqualCI("notifier::message",operation)) + { + NotifierMessageSupaDupaParameterStruct * p = (NotifierMessageSupaDupaParameterStruct *)param; + if(!p)return false; + + if(!g_pNotifierWindow) + g_pNotifierWindow = new KviNotifierWindow(); + + g_pNotifierWindow->addMessage(p->pWindow,p->szIcon,p->szMessage,p->uMessageLifetime); + g_pNotifierWindow->doShow(KVI_OPTION_BOOL(KviOption_boolDisableNotifierFadein)?false:true); + + return true; + } + return false; +} + +KVIRC_MODULE( + "Notifier", + "2.0.0", + "Copyright (C) 2005:\n" \ + " Iacopo Palazzi (iakko at siena dot linux dot it)", + "KVIrc Client - Taskbar Notifier", + notifier_module_init, + notifier_module_can_unload, + notifier_module_ctrl, + notifier_module_cleanup +) |
