]> jfr.im git - irc/kvirc/kvirc-scripts.git/commitdiff
adjusted svn-properties, removed some empty files/dirs
authorMarkus Rennings <redacted>
Thu, 18 Sep 2008 11:32:23 +0000 (11:32 +0000)
committerMarkus Rennings <redacted>
Thu, 18 Sep 2008 11:32:23 +0000 (11:32 +0000)
35 files changed:
NGL fserv/changelog.txt
NGL fserv/install.kvs
NGL fserv/main.kvs
NGL fserv/src/NGLfserv_classes_changeneralproperties.kvs
NGL fserv/src/NGLfserv_classes_chantriggerproperties.kvs
NGL fserv/src/NGLfserv_config_loadSendAndQueues.kvs
NGL fserv/src/NGLfserv_corefunctions_say.kvs
NGL fserv/src/NGLfserv_uninstall_uninstallclasses.kvs
NGL fserv/utils/installer.kvs
calculator/install.kvs [changed mode: 0755->0644]
calculator/utils/installer.kvs [changed mode: 0755->0644]
chanstats/INSTALL [changed mode: 0755->0644]
chanstats/install.kvs [changed mode: 0755->0644]
chanstats/locale/chanstats_nl.po
chanstats/pics/chanstats_16.png [changed mode: 0755->0644]
chanstats/pics/chanstats_32.png [changed mode: 0755->0644]
chanstats/utils/installer.kvs [changed mode: 0755->0644]
checkers/src/dama.kvs [changed mode: 0755->0644]
clonescan/install.kvs [changed mode: 0755->0644]
clonescan/utils/installer.kvs [changed mode: 0755->0644]
country/install.kvs [changed mode: 0755->0644]
country/utils/installer.kvs [changed mode: 0755->0644]
cryption/install.kvs [changed mode: 0755->0644]
cryption/pics/cryption_16.png [changed mode: 0755->0644]
cryption/pics/cryption_32.png [changed mode: 0755->0644]
ezbounce/INSTALL [deleted file]
ezbounce/README [deleted file]
mediaplayer/install.kvs [changed mode: 0755->0644]
mediaplayer/utils/installer.kvs [changed mode: 0755->0644]
quiz/INSTALL [deleted file]
quiz/README [deleted file]
quiz/configs/quiz_it.kvc [changed mode: 0755->0644]
quiz/install.kvs [changed mode: 0755->0644]
quiz/todo [changed mode: 0755->0644]
twinsmediaplayer/src/classes.kvs

index ce180c808dfcb8f1c08ef5bc43be8a1d6cfcc54f..6db5b6365e7cc23648256c0ff4d856e01b42a061 100644 (file)
@@ -1,72 +1,72 @@
-[LoSko, 14 October 2007]\r
-- Fixed some warning messages complaining about insertItem method\r
-- Temporarly fixed crash on shared tab folder on unix commenting out setCheckable function\r
-\r
-[Noldor, 07 February 2007]\r
-- Added multiple files enqueues\r
-\r
-[Noldor, 06 February 2007]\r
-- First step to script localization: there are problems on .mo compilation on win.. Hope we fix it soon ;)... Anyway, now all string support $tr();\r
-- Working on the "new" gui: applly, cancel and ok button will appear very soon: need to manage some internal tab coding (tab channel and trigger).\r
-  At moment the gui is "invisible" and the new cool logo too :)\r
-- Added options to enable removing user from queue when it parts or quit channel.\r
-- Improved wizard appearence and internal code;\r
-- Fixed some minor bugs\r
-Code Changes:\r
-- New gui coding classes almost completed: now we need 1 line of code to add one control :)\r
-[Losko]\r
-- Implemented Load/Save queues/sends (still a little bit incomplete ;) ) \r
-\r
-Known bugs:\r
-- Errors when fserver does not found a trigger path\r
-- Errors sometimes when add/remove extra dirs (this part of code is still instable)\r
-- Bugs in monitor engine\r
-\r
-[Noldor, 22 january 2007]\r
-- fixed checkboxes (from now we must use clicked signal instead of toggle signal)\r
-- rewritten virtual tree code and fast load/save tree info (need to remove old config files)\r
-- completed dirview gui (maybe instable... need testing)\r
-- added simple wildcards filter in fserver shell navigation\r
-WARNING: THIS VERSION IS A WIP AND CAN BE VERY UNSTABLE DUE TO THE INTERNAL NEW RECODING AND IT IS NOT YET FULL TESTED! USE IT AT OWN RISK :)\r
-\r
-\r
-[LoSko, 21 january 2007]\r
-- wizard styling\r
-- removed Add Send/Enqueue from monitor and created a new nick pop-up for it\r
-- localfolder ~/pics/NGLfserv is removed when unistalling\r
-- trigger configuration files are removed when removing trigger\r
-\r
-[Noldor, 18 january 2007]\r
-gui changes:\r
-- added a wizard gui to configure quickly a trigger (thanks to hellvis69 for translation in english)\r
-- fixed some warnings in tab sharedfiles (dirview section)\r
-- fixed blank chars bug in "add channel section"\r
-- fixed layout view problems in tab global options\r
-code changes:\r
-- added experimental fastscandrive routine (need a recent KVIrc svn version but it doesn't necessary due to an internal script version check ;) )\r
-- fixed uninstall issues\r
-- added $NGLfserv::corefunctions::addWidget (wizard class and shared folder tab are based on this new widget constructor: in the future we'll use this instead of NGLfserv::classes::customwidgets::box class)\r
-- removed unused code\r
-- optimized asyincload class \r
-- fixed some aesthetic coding style\r
-work in progress:\r
-- save queues and sends at kvirc exit (at this moment only the load/save functions are ready... need some synch routine with server connection)\r
-- "busy status" is still incomplete.\r
-knows bugs:\r
-- add/delete extra folders is temporarily deactivated due a few bugs\r
-- some others to discovery :P\r
-\r
-[Noldor, 24 december 2006]\r
-- Work on "busy status" of the fserver (still incomplete)\r
-- Removed some memory lack\r
-- Now the tabwidget is a class named "NGLgui" (moved all the global var definitions and the freememory allocation from aliases to this class)\r
-\r
-[LoSko]\r
-- Fixed welcome message displaying in shell\r
-- Fixed dcc-chat shell clonescanner\r
-- More integration with other fileserver's browsers\r
-- Fixed #10 slot number in monitor\r
-- Any @find option is now a channel related option\r
-- Restructured GUI option tabwidget\r
-\r
+[LoSko, 14 October 2007]
+- Fixed some warning messages complaining about insertItem method
+- Temporarly fixed crash on shared tab folder on unix commenting out setCheckable function
+
+[Noldor, 07 February 2007]
+- Added multiple files enqueues
+
+[Noldor, 06 February 2007]
+- First step to script localization: there are problems on .mo compilation on win.. Hope we fix it soon ;)... Anyway, now all string support $tr();
+- Working on the "new" gui: applly, cancel and ok button will appear very soon: need to manage some internal tab coding (tab channel and trigger).
+  At moment the gui is "invisible" and the new cool logo too :)
+- Added options to enable removing user from queue when it parts or quit channel.
+- Improved wizard appearence and internal code;
+- Fixed some minor bugs
+Code Changes:
+- New gui coding classes almost completed: now we need 1 line of code to add one control :)
+[Losko]
+- Implemented Load/Save queues/sends (still a little bit incomplete ;) ) 
+
+Known bugs:
+- Errors when fserver does not found a trigger path
+- Errors sometimes when add/remove extra dirs (this part of code is still instable)
+- Bugs in monitor engine
+
+[Noldor, 22 january 2007]
+- fixed checkboxes (from now we must use clicked signal instead of toggle signal)
+- rewritten virtual tree code and fast load/save tree info (need to remove old config files)
+- completed dirview gui (maybe instable... need testing)
+- added simple wildcards filter in fserver shell navigation
+WARNING: THIS VERSION IS A WIP AND CAN BE VERY UNSTABLE DUE TO THE INTERNAL NEW RECODING AND IT IS NOT YET FULL TESTED! USE IT AT OWN RISK :)
+
+
+[LoSko, 21 january 2007]
+- wizard styling
+- removed Add Send/Enqueue from monitor and created a new nick pop-up for it
+- localfolder ~/pics/NGLfserv is removed when unistalling
+- trigger configuration files are removed when removing trigger
+
+[Noldor, 18 january 2007]
+gui changes:
+- added a wizard gui to configure quickly a trigger (thanks to hellvis69 for translation in english)
+- fixed some warnings in tab sharedfiles (dirview section)
+- fixed blank chars bug in "add channel section"
+- fixed layout view problems in tab global options
+code changes:
+- added experimental fastscandrive routine (need a recent KVIrc svn version but it doesn't necessary due to an internal script version check ;) )
+- fixed uninstall issues
+- added $NGLfserv::corefunctions::addWidget (wizard class and shared folder tab are based on this new widget constructor: in the future we'll use this instead of NGLfserv::classes::customwidgets::box class)
+- removed unused code
+- optimized asyincload class 
+- fixed some aesthetic coding style
+work in progress:
+- save queues and sends at kvirc exit (at this moment only the load/save functions are ready... need some synch routine with server connection)
+- "busy status" is still incomplete.
+knows bugs:
+- add/delete extra folders is temporarily deactivated due a few bugs
+- some others to discovery :P
+
+[Noldor, 24 december 2006]
+- Work on "busy status" of the fserver (still incomplete)
+- Removed some memory lack
+- Now the tabwidget is a class named "NGLgui" (moved all the global var definitions and the freememory allocation from aliases to this class)
+
+[LoSko]
+- Fixed welcome message displaying in shell
+- Fixed dcc-chat shell clonescanner
+- More integration with other fileserver's browsers
+- Fixed #10 slot number in monitor
+- Any @find option is now a channel related option
+- Restructured GUI option tabwidget
+
 Version 1.0alpha
\ No newline at end of file
index 0a641179f018c7c3a9e3819d9d4cd02bf62580b7..6c0f6d88a03c88174360c5b4ca930aecaae01139 100644 (file)
-# NGL File Server for KVIrc\r
-# Written by LoSko, Noldor, Grifisx (2006)\r
-\r
-# register the script: this must be the first instruction executed\r
-# since it will abort with an error when a greater version is already installed\r
-addon.register("NGLfserv","1.0.0",%NGLlogo,$tr("Written by: Noldor\, Grifisx\, LoSko","NGLfserv"),"3.2.2",NGLfserv_32.png)\r
-{\r
-       # This is our uninstall callback: it will be called by KVIrc when addon.uninstall is invoked\r
-       NGLfserv::uninstall::uninstall\r
-}\r
-\r
-# Ok, addon.register succeeded. We can go on with the installation.\r
-\r
-# get the installer helper class (this is pretty standard and included in the distro)\r
-include "utils/installer.kvs"\r
-\r
-# Get the path that this script was launched from\r
-%mypath = $file.extractPath($0)\r
-\r
-# The installer will copy our files and generate automatically an uninstallation alias for them\r
-%installer = $new(installer,0,myinstaller)\r
-\r
-# copy files in each subdirectory\r
-# the pics\r
-%installer->$copyFiles("%mypath/pics/","*.png",$file.localdir("pics/NGLfserv"))\r
-%installer->$copyFiles("%mypath/pics/","NGLfserv_32.png",$file.localdir("pics/"))\r
-\r
-# the translations\r
-#%installer->$copyFiles("%mypath/locale/","*.mo",$file.localdir("locale"))\r
-\r
-# the documentation\r
-#%installer->$copyFiles("%mypath/help/en/NGLfserv/","*.html",$file.localdir("help/en/NGLfserv"))\r
-\r
-# then generate the uninstall alias\r
-%installer->$generateUninstallAlias("NGLfserv::uninstall::uninstallfiles");\r
-\r
-# finally kill the installer helper\r
-delete %installer\r
-\r
-# fetch the complete script\r
-include "main.kvs" %mypath\r
-\r
-# make sure any previous instance is closed\r
-# ______::close\r
-# show it up :)\r
-#________::show\r
-\r
-# File Server Initialization\r
-\r
-NGLfserv::classes::register\r
-NGLfserv::events::init\r
-NGLfserv::config::load\r
-NGLfserv::config::save\r
-\r
-defpopup("NGLfserv")\r
-{\r
-       prologue{\r
-               if(%FservActive=="OFF") {\r
-                       %:labelText = File server is OFF\r
-                       %:status = ON\r
-                       %:icon = 167\r
-               }\r
-               else {\r
-                       %:labelText = File server is ON\r
-                       %:status = OFF\r
-                       %:icon = 8\r
-               }\r
-       }\r
-\r
-       label(%:labelText)\r
-       \r
-       item($tr("Wizard","NGLfserv"),110)\r
-       {\r
-               if (!$objects.exists(%NGLwizard)) %NGLwizard = $new(NGLfserv::classes::gui::wiz)\r
-               else {\r
-                       %NGLwizard->$show()\r
-                       %NGLwizard->$raise()\r
-               }\r
-       }\r
-\r
-       item($tr("Options"),20)\r
-       {\r
-               if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui,%NGLfserver)\r
-               else {\r
-                       %NGLgui->$show()\r
-                       %NGLgui->$raise()\r
-               }\r
-       }\r
-\r
-       item($tr("Monitor","NGLfserv"),171)\r
-       {\r
-               if ($objects.exists(%NGLmonitor)) {\r
-                       %NGLmonitor->$show()\r
-                       %NGLmonitor->$raise()\r
-               }\r
-               else{\r
-                       %NGLmonitor=$new(NGLfserv::classes::gui::monitor,%NGLfserver)\r
-                       %NGLmonitor->$show()\r
-               }\r
-       }\r
-       \r
-       item($tr("Save configuration","NGLfserv"),10)\r
-       {\r
-               NGLfserv::config::save\r
-       }\r
-\r
-       separator\r
-\r
-       item($tr("Turn fileserver %:status","NGLfserv"),%:icon)\r
-       {\r
-               if(%FservActive=="OFF") {\r
-                       %FservActive="ON"\r
-                       NGLfserv::events::eventshandler ENABLE\r
-               }\r
-               else {\r
-                       %FservActive="OFF"\r
-                       NGLfserv::events::eventshandler DISABLE\r
-               }\r
-       }\r
-}\r
-\r
-setmenu -q -i=7 %NGLlogo NGLfserv\r
-\r
-addon.setconfigurecallback("NGLfserv")\r
-{\r
-       //if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui)\r
-               //      else %NGLgui->$show()\r
-       $new(NGlfserv::classes::gui::wiz)\r
-}\r
-\r
-defpopup(NGLfserv_channel)\r
-{\r
-       item($tr("Display ads","NGLfserv"),180)\r
-       {\r
-               if(%FservChannels{$chan.name}->%rootFolders{}#>0)\r
-               {\r
-                       %normalAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)Fserve active$k(%NGLc1)"] - Triggers:["\r
-                       %normalAdsCount=0\r
-                       %normalAdsRowCount=0\r
-                       %normalAds[0] = %normalAdsPrefix\r
-\r
-                       // %TDCCAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)TDCC active$k(%NGLc1)"] - Triggers:["\r
-\r
-                       #-------Gives a shape to the trigger notice\r
-                       foreach(%tr,%FservChannels{$chan.name}->%rootFolders{}) {\r
-                               if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),0)) {\r
-                                       %token = "$k(%NGLc2)/ctcp $me %tr->$triggerName() $k(%NGLc1)& "\r
-                                       if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {\r
-                                               %normalAds[%normalAdsRowCount] .= %token\r
-                                       }\r
-                                       else {\r
-                                               %normalAdsRowCount++\r
-                                               %normalAds[%normalAdsRowCount] = %normalAdsPrefix\r
-                                               %normalAds[%normalAdsRowCount] .= %token\r
-                                       }\r
-                                       %normalAdsCount++\r
-                               }\r
-                               if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),1)) {\r
-                                       %token = "$k(%NGLc2)%tr->$triggerName() $k(%NGLc1)& "\r
-                                       if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {\r
-                                               %normalAds[%normalAdsRowCount] .= %token\r
-                                       }\r
-                                       else {\r
-                                               %normalAdsRowCount++\r
-                                               %normalAds[%normalAdsRowCount] = %normalAdsPrefix\r
-                                               %normalAds[%normalAdsRowCount] .= %token\r
-                                       }\r
-                                       %normalAdsCount++\r
-                               }\r
-                       }\r
-                       if(!%Send) %sends = 0\r
-                       else %sends = %Send->$count()\r
-                       if(!%Queues) %queues = 0\r
-                       else %queues = %Queues->$count()\r
-                       if(%normalAdsCount>0) {\r
-                               for(%i=0; %i<=%normalAdsRowCount; %i++) {\r
-                                       %normalAds[%i]=$str.lefttolast(%normalAds,&)\r
-                                       %normalAds[%i]=$str.lefttolast(%normalAds," ")\r
-                                       %normalAds[%i] .= $k(%NGLc1)] - Users:[$k(%NGLc2)$r$r%Session{}#$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSessions$k(%NGLc1)] - Sends:[$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)] - Queues:[$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)] -$k(%NGLc2) %NGLlogo\r
-                                       say %normalAds[%i]\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       separator\r
-\r
-       item($tr("Show sends","NGLfserv"),77)\r
-       {\r
-               if(!$objects.exists(%Send)) %sends = 0\r
-               else %sends = %Send->$count()\r
-               say $k(%NGLc1)"Total Number Of Sends Currently: ["$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo\r
-               for(%i=0;%i!=%Send->$count();%i++) {\r
-                       %id=%Send->$at(%i)->%dcc_id\r
-                       if(%id) {\r
-                               %a=$($dcc.transferredBytes(%id)/100)\r
-                               %b=$($dcc.localFileSize(%id)/100)\r
-                               %c=$((%b-%a)/($dcc.averageSpeed(%id)/100))\r
-                               if($($date("e",%c)-1) > 0) %eta .= $($date("e",%c)-1)d" "\r
-                               if($($date("k",%c)-1) > 0) %eta .= $($date("k",%c)-1)h" "\r
-                               if($date("M",%c) > 0) %eta .= $date("M",%c)m" "\r
-                               if($date("S",%c) > 0) %eta .= $date("S",%c)s" "\r
-                               %progress=done at $k(%NGLc2)$r$r$(100*%a/%b)\%$k(%NGLc1), ETA: $k(%NGLc2)$r$r%eta$k(%NGLc1)\r
-                       }\r
-                       else {\r
-                               %progress=Waiting\r
-                       }\r
-                       say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Send->$at(%i)->%file$k(%NGLc1), to $k(%NGLc2)%Send->$at(%i)->%nick$k(%NGLc1), %progress, size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Send->$at(%i)->%size)\r
-               }\r
-       }\r
-\r
-       item($tr("Show queues","NGLfserv"),78)\r
-       {\r
-               if(!$objects.exists(%Queues)) %queues = 0\r
-               else %queues = %Queues->$count()\r
-               say $k(%NGLc1)"Total Number Of Queues Currently: ["$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo\r
-               for(%i=0; %i!=%Queues->$count(); %i++)\r
-                       say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Queues->$at(%i)->%file$k(%NGLc1), for $k(%NGLc2)%Queues->$at(%i)->%nick$k(%NGLc1), size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Queues->$at(%i)->%size)\r
-       }\r
-\r
-       separator\r
-\r
-       item($tr("Show statistics","NGLfserv"),119)\r
-       {\r
-               %bytesSent = $NGLfserv::corefunctions::calc(%NGLSentBytes)\r
-               %vect[] = $str.split(" ",%bytesSent)\r
-               %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-4))\r
-               if($str.right(%vect[0],1) == 0) {\r
-                       %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))\r
-                       if($str.right(%vect[0],1) == 0) %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))\r
-               }\r
-               say $k(%NGLc1)"["$k(%NGLc2)File Server statistics$k(%NGLc1)"] Bytes sent:["$k(%NGLc2)$r$r%vect[0]" "%vect[1]$k(%NGLc1)"] - Files sent:["$k(%NGLc2)$r$r%NGLSentFiles$k(%NGLc1)"] - "$k(%NGLc2)%NGLlogo\r
-       }\r
-}\r
-\r
-defpopup -m (channeltextview)\r
-{\r
-       extpopup(%NGLlogo,NGLfserv_channel,13,NGLfserv.menu) (%FservChannels{$chan.name})\r
-}\r
-\r
-defpopup(NGLfserv_nick)\r
-{\r
-       item($tr("Send file now","NGLfserv"),39)\r
-       {\r
-               dialog.file(open,%NGLlogo,,,$0) {\r
-                       if ($0) {\r
-                               %fl_send = $new(object)\r
-                               %fl_send->%completepath = $0\r
-                               %fl_send->%size = $file.size(%fl_send->%completepath)\r
-                               %fl_send->%file = $file.extractfilename(%fl_send->%completepath)\r
-                               %fl_send->%retries = 0\r
-                               %fl_send->%nick = $1\r
-                               %fl_send->%initialNick = %fl_send->%nick\r
-                               %fl_send->%nickStatus = "op"\r
-                               %fl_send->%ircContext = $context()\r
-                               %fl_send->%console = $console(%fl_send->%ircContext)\r
-                               %fl_send->%serverName = $server()\r
-\r
-                               if($NGLfserv::corefunctions::dccStartSend(%fl_send->%console, %fl_send->%nick, %fl_send->%completepath)) {\r
-                                       %Send->$append(%fl_send)\r
-                                       if(!%Nick_nr_sends{%fl_send->%nick}) %Nick_nr_sends{%fl_send->%nick}=0\r
-                                       %Nick_nr_sends{%fl_send->%nick}++\r
-                                       if($objects.exists(%NGLmonitor)) {\r
-                                               %NGLmonitor->$showSends()\r
-                                       }\r
-                                       NGLfserv::config::saveSendAndQueues\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-\r
-       item($tr("Enqueue files","NGLfserv"),257) ($(%Send->$count()>0))\r
-       {\r
-               dialog.file(openm,%NGLlogo,%G_dir,,$0) {\r
-                       if ($0) {\r
-                               %G_dir=$file.extractpath($0)\r
-                               %files[]=$0\r
-                               foreach(%file,%files[]){\r
-                                       %fl_send = $new(object)\r
-                                       %fl_send->%completepath = %file\r
-                                       %fl_send->%size = $file.size(%fl_send->%completepath)\r
-                                       %fl_send->%file = $file.extractfilename(%fl_send->%completepath)\r
-                                       %fl_send->%retries = 0\r
-                                       %fl_send->%nick = $1\r
-                                       %fl_send->%initialNick = %fl_send->%nick\r
-                                       %fl_send->%nickStatus = "op"\r
-                                       %fl_send->%ircContext = $context()\r
-                                       %fl_send->%console = $console(%fl_send->%ircContext)\r
-                                       %fl_send->%serverName = $server()\r
-                                       %Queues->$append(%fl_send)\r
-                                       if(!%Nick_nr_queues{%fl_send->%nick}) %Nick_nr_queues{%fl_send->%nick}=0\r
-                                       %Nick_nr_queues{%fl_send->%nick}++\r
-                                       if($objects.exists(%NGLmonitor)) {\r
-                                               %NGLmonitor->$showQueues()\r
-                                       }\r
-                               }\r
-                                       NGLfserv::config::saveSendAndQueues\r
-                       }\r
-               }\r
-       }\r
-}\r
-\r
-defpopup -m (defaulttextview)\r
-{\r
-       extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)\r
-}\r
-\r
-defpopup -m (querytextview)\r
-{\r
-       extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)\r
-}\r
-\r
-defpopup -m (channel)\r
-{\r
-       extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)\r
-}\r
-\r
-option uintDccSocketTimeout 10\r
-option boolCreateMinimizedDccChat 1\r
-option boolAutoAcceptDccChat 1\r
-option boolAutoAcceptDccSend 1\r
-option boolShowMinimizedDebugWindow 1\r
+# NGL File Server for KVIrc
+# Written by LoSko, Noldor, Grifisx (2006)
+
+# register the script: this must be the first instruction executed
+# since it will abort with an error when a greater version is already installed
+addon.register("NGLfserv","1.0.0",%NGLlogo,$tr("Written by: Noldor\, Grifisx\, LoSko","NGLfserv"),"3.2.2",NGLfserv_32.png)
+{
+       # This is our uninstall callback: it will be called by KVIrc when addon.uninstall is invoked
+       NGLfserv::uninstall::uninstall
+}
+
+# Ok, addon.register succeeded. We can go on with the installation.
+
+# get the installer helper class (this is pretty standard and included in the distro)
+include "utils/installer.kvs"
+
+# Get the path that this script was launched from
+%mypath = $file.extractPath($0)
+
+# The installer will copy our files and generate automatically an uninstallation alias for them
+%installer = $new(installer,0,myinstaller)
+
+# copy files in each subdirectory
+# the pics
+%installer->$copyFiles("%mypath/pics/","*.png",$file.localdir("pics/NGLfserv"))
+%installer->$copyFiles("%mypath/pics/","NGLfserv_32.png",$file.localdir("pics/"))
+
+# the translations
+#%installer->$copyFiles("%mypath/locale/","*.mo",$file.localdir("locale"))
+
+# the documentation
+#%installer->$copyFiles("%mypath/help/en/NGLfserv/","*.html",$file.localdir("help/en/NGLfserv"))
+
+# then generate the uninstall alias
+%installer->$generateUninstallAlias("NGLfserv::uninstall::uninstallfiles");
+
+# finally kill the installer helper
+delete %installer
+
+# fetch the complete script
+include "main.kvs" %mypath
+
+# make sure any previous instance is closed
+# ______::close
+# show it up :)
+#________::show
+
+# File Server Initialization
+
+NGLfserv::classes::register
+NGLfserv::events::init
+NGLfserv::config::load
+NGLfserv::config::save
+
+defpopup("NGLfserv")
+{
+       prologue{
+               if(%FservActive=="OFF") {
+                       %:labelText = File server is OFF
+                       %:status = ON
+                       %:icon = 167
+               }
+               else {
+                       %:labelText = File server is ON
+                       %:status = OFF
+                       %:icon = 8
+               }
+       }
+
+       label(%:labelText)
+       
+       item($tr("Wizard","NGLfserv"),110)
+       {
+               if (!$objects.exists(%NGLwizard)) %NGLwizard = $new(NGLfserv::classes::gui::wiz)
+               else {
+                       %NGLwizard->$show()
+                       %NGLwizard->$raise()
+               }
+       }
+
+       item($tr("Options"),20)
+       {
+               if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui,%NGLfserver)
+               else {
+                       %NGLgui->$show()
+                       %NGLgui->$raise()
+               }
+       }
+
+       item($tr("Monitor","NGLfserv"),171)
+       {
+               if ($objects.exists(%NGLmonitor)) {
+                       %NGLmonitor->$show()
+                       %NGLmonitor->$raise()
+               }
+               else{
+                       %NGLmonitor=$new(NGLfserv::classes::gui::monitor,%NGLfserver)
+                       %NGLmonitor->$show()
+               }
+       }
+       
+       item($tr("Save configuration","NGLfserv"),10)
+       {
+               NGLfserv::config::save
+       }
+
+       separator
+
+       item($tr("Turn fileserver %:status","NGLfserv"),%:icon)
+       {
+               if(%FservActive=="OFF") {
+                       %FservActive="ON"
+                       NGLfserv::events::eventshandler ENABLE
+               }
+               else {
+                       %FservActive="OFF"
+                       NGLfserv::events::eventshandler DISABLE
+               }
+       }
+}
+
+setmenu -q -i=7 %NGLlogo NGLfserv
+
+addon.setconfigurecallback("NGLfserv")
+{
+       //if (!$objects.exists(%NGLgui)) %NGLgui=$new(NGLfserv::classes::gui)
+               //      else %NGLgui->$show()
+       $new(NGlfserv::classes::gui::wiz)
+}
+
+defpopup(NGLfserv_channel)
+{
+       item($tr("Display ads","NGLfserv"),180)
+       {
+               if(%FservChannels{$chan.name}->%rootFolders{}#>0)
+               {
+                       %normalAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)Fserve active$k(%NGLc1)"] - Triggers:["
+                       %normalAdsCount=0
+                       %normalAdsRowCount=0
+                       %normalAds[0] = %normalAdsPrefix
+
+                       // %TDCCAdsPrefix = $k(%NGLc1)"["$k(%NGLc2)TDCC active$k(%NGLc1)"] - Triggers:["
+
+                       #-------Gives a shape to the trigger notice
+                       foreach(%tr,%FservChannels{$chan.name}->%rootFolders{}) {
+                               if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),0)) {
+                                       %token = "$k(%NGLc2)/ctcp $me %tr->$triggerName() $k(%NGLc1)& "
+                                       if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {
+                                               %normalAds[%normalAdsRowCount] .= %token
+                                       }
+                                       else {
+                                               %normalAdsRowCount++
+                                               %normalAds[%normalAdsRowCount] = %normalAdsPrefix
+                                               %normalAds[%normalAdsRowCount] .= %token
+                                       }
+                                       %normalAdsCount++
+                               }
+                               if($str.contains(%Triggers{%tr->$triggerName()}->%activeChannels{$chan.name}->$getTriggerType(),1)) {
+                                       %token = "$k(%NGLc2)%tr->$triggerName() $k(%NGLc1)& "
+                                       if($($str.len(%normalAds[%normalAdsRowCount]) + $str.len(%token)) <= 350) {
+                                               %normalAds[%normalAdsRowCount] .= %token
+                                       }
+                                       else {
+                                               %normalAdsRowCount++
+                                               %normalAds[%normalAdsRowCount] = %normalAdsPrefix
+                                               %normalAds[%normalAdsRowCount] .= %token
+                                       }
+                                       %normalAdsCount++
+                               }
+                       }
+                       if(!%Send) %sends = 0
+                       else %sends = %Send->$count()
+                       if(!%Queues) %queues = 0
+                       else %queues = %Queues->$count()
+                       if(%normalAdsCount>0) {
+                               for(%i=0; %i<=%normalAdsRowCount; %i++) {
+                                       %normalAds[%i]=$str.lefttolast(%normalAds,&)
+                                       %normalAds[%i]=$str.lefttolast(%normalAds," ")
+                                       %normalAds[%i] .= $k(%NGLc1)] - Users:[$k(%NGLc2)$r$r%Session{}#$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSessions$k(%NGLc1)] - Sends:[$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)] - Queues:[$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)] -$k(%NGLc2) %NGLlogo
+                                       say %normalAds[%i]
+                               }
+                       }
+               }
+       }
+
+       separator
+
+       item($tr("Show sends","NGLfserv"),77)
+       {
+               if(!$objects.exists(%Send)) %sends = 0
+               else %sends = %Send->$count()
+               say $k(%NGLc1)"Total Number Of Sends Currently: ["$k(%NGLc2)$r$r%sends$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxSends$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo
+               for(%i=0;%i!=%Send->$count();%i++) {
+                       %id=%Send->$at(%i)->%dcc_id
+                       if(%id) {
+                               %a=$($dcc.transferredBytes(%id)/100)
+                               %b=$($dcc.localFileSize(%id)/100)
+                               %c=$((%b-%a)/($dcc.averageSpeed(%id)/100))
+                               if($($date("e",%c)-1) > 0) %eta .= $($date("e",%c)-1)d" "
+                               if($($date("k",%c)-1) > 0) %eta .= $($date("k",%c)-1)h" "
+                               if($date("M",%c) > 0) %eta .= $date("M",%c)m" "
+                               if($date("S",%c) > 0) %eta .= $date("S",%c)s" "
+                               %progress=done at $k(%NGLc2)$r$r$(100*%a/%b)\%$k(%NGLc1), ETA: $k(%NGLc2)$r$r%eta$k(%NGLc1)
+                       }
+                       else {
+                               %progress=Waiting
+                       }
+                       say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Send->$at(%i)->%file$k(%NGLc1), to $k(%NGLc2)%Send->$at(%i)->%nick$k(%NGLc1), %progress, size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Send->$at(%i)->%size)
+               }
+       }
+
+       item($tr("Show queues","NGLfserv"),78)
+       {
+               if(!$objects.exists(%Queues)) %queues = 0
+               else %queues = %Queues->$count()
+               say $k(%NGLc1)"Total Number Of Queues Currently: ["$k(%NGLc2)$r$r%queues$k(%NGLc1)\/$k(%NGLc2)$r$r%MaxQueues$k(%NGLc1)"]"$k(%NGLc2) %NGLlogo
+               for(%i=0; %i!=%Queues->$count(); %i++)
+                       say $k(%NGLc1)#$(%i+1) $k(%NGLc2)%Queues->$at(%i)->%file$k(%NGLc1), for $k(%NGLc2)%Queues->$at(%i)->%nick$k(%NGLc1), size: $k(%NGLc2)$r$r$NGLfserv::corefunctions::calc(%Queues->$at(%i)->%size)
+       }
+
+       separator
+
+       item($tr("Show statistics","NGLfserv"),119)
+       {
+               %bytesSent = $NGLfserv::corefunctions::calc(%NGLSentBytes)
+               %vect[] = $str.split(" ",%bytesSent)
+               %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-4))
+               if($str.right(%vect[0],1) == 0) {
+                       %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))
+                       if($str.right(%vect[0],1) == 0) %vect[0] = $str.left(%vect[0],$($str.len(%vect[0])-1))
+               }
+               say $k(%NGLc1)"["$k(%NGLc2)File Server statistics$k(%NGLc1)"] Bytes sent:["$k(%NGLc2)$r$r%vect[0]" "%vect[1]$k(%NGLc1)"] - Files sent:["$k(%NGLc2)$r$r%NGLSentFiles$k(%NGLc1)"] - "$k(%NGLc2)%NGLlogo
+       }
+}
+
+defpopup -m (channeltextview)
+{
+       extpopup(%NGLlogo,NGLfserv_channel,13,NGLfserv.menu) (%FservChannels{$chan.name})
+}
+
+defpopup(NGLfserv_nick)
+{
+       item($tr("Send file now","NGLfserv"),39)
+       {
+               dialog.file(open,%NGLlogo,,,$0) {
+                       if ($0) {
+                               %fl_send = $new(object)
+                               %fl_send->%completepath = $0
+                               %fl_send->%size = $file.size(%fl_send->%completepath)
+                               %fl_send->%file = $file.extractfilename(%fl_send->%completepath)
+                               %fl_send->%retries = 0
+                               %fl_send->%nick = $1
+                               %fl_send->%initialNick = %fl_send->%nick
+                               %fl_send->%nickStatus = "op"
+                               %fl_send->%ircContext = $context()
+                               %fl_send->%console = $console(%fl_send->%ircContext)
+                               %fl_send->%serverName = $server()
+
+                               if($NGLfserv::corefunctions::dccStartSend(%fl_send->%console, %fl_send->%nick, %fl_send->%completepath)) {
+                                       %Send->$append(%fl_send)
+                                       if(!%Nick_nr_sends{%fl_send->%nick}) %Nick_nr_sends{%fl_send->%nick}=0
+                                       %Nick_nr_sends{%fl_send->%nick}++
+                                       if($objects.exists(%NGLmonitor)) {
+                                               %NGLmonitor->$showSends()
+                                       }
+                                       NGLfserv::config::saveSendAndQueues
+                               }
+                       }
+               }
+       }
+
+       item($tr("Enqueue files","NGLfserv"),257) ($(%Send->$count()>0))
+       {
+               dialog.file(openm,%NGLlogo,%G_dir,,$0) {
+                       if ($0) {
+                               %G_dir=$file.extractpath($0)
+                               %files[]=$0
+                               foreach(%file,%files[]){
+                                       %fl_send = $new(object)
+                                       %fl_send->%completepath = %file
+                                       %fl_send->%size = $file.size(%fl_send->%completepath)
+                                       %fl_send->%file = $file.extractfilename(%fl_send->%completepath)
+                                       %fl_send->%retries = 0
+                                       %fl_send->%nick = $1
+                                       %fl_send->%initialNick = %fl_send->%nick
+                                       %fl_send->%nickStatus = "op"
+                                       %fl_send->%ircContext = $context()
+                                       %fl_send->%console = $console(%fl_send->%ircContext)
+                                       %fl_send->%serverName = $server()
+                                       %Queues->$append(%fl_send)
+                                       if(!%Nick_nr_queues{%fl_send->%nick}) %Nick_nr_queues{%fl_send->%nick}=0
+                                       %Nick_nr_queues{%fl_send->%nick}++
+                                       if($objects.exists(%NGLmonitor)) {
+                                               %NGLmonitor->$showQueues()
+                                       }
+                               }
+                                       NGLfserv::config::saveSendAndQueues
+                       }
+               }
+       }
+}
+
+defpopup -m (defaulttextview)
+{
+       extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)
+}
+
+defpopup -m (querytextview)
+{
+       extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)
+}
+
+defpopup -m (channel)
+{
+       extpopup(%NGLlogo,NGLfserv_nick,13,NGLfserv.menu)
+}
+
+option uintDccSocketTimeout 10
+option boolCreateMinimizedDccChat 1
+option boolAutoAcceptDccChat 1
+option boolAutoAcceptDccSend 1
+option boolShowMinimizedDebugWindow 1
index 79320e7cdcca712d7347a3401bae5d7022952e88..b1a3ede92a73508ac35175e1eb338f5f78710fa0 100644 (file)
@@ -1,15 +1,15 @@
-%files[]=$file.ls($file.extractpath($0)/src,f)\r
-%alias  = "alias (NGLfserv::uninstall::uninstallaliases)"\r
-%alias .= "{$lf"\r
-\r
-\r
-for (%i=0;%i<$length(%files[]);%i++)\r
-{\r
-       include $file.extractpath($0)/src/%files[%i]\r
-       %flt=$str.left(%files[%i],$($str.len(%files[%i])-4))\r
-       %file=$str.replace(%flt,"::","_")\r
-       %alias  .= "alias (%file){};$lf"\r
-       \r
-}\r
-%alias .= "}"\r
-eval %alias\r
+%files[]=$file.ls($file.extractpath($0)/src,f)
+%alias  = "alias (NGLfserv::uninstall::uninstallaliases)"
+%alias .= "{$lf"
+
+
+for (%i=0;%i<$length(%files[]);%i++)
+{
+       include $file.extractpath($0)/src/%files[%i]
+       %flt=$str.left(%files[%i],$($str.len(%files[%i])-4))
+       %file=$str.replace(%flt,"::","_")
+       %alias  .= "alias (%file){};$lf"
+       
+}
+%alias .= "}"
+eval %alias
index 6d16795bf5e60e390ec1796bad3417312c91b0e2..06236c7da3cd40a0cf6cc5c1acb02fc8becfc77c 100644 (file)
 alias(NGLfserv::classes::chanGeneralProperties)
 {
-       class(NGLfserv::classes::chanGeneralProperties,object)\r
-       {\r
-               function constructor()\r
-               {\r
-                       $$->%channelName=$0\r
-                       $$->%respToList=$true\r
-                       $$->%respToFind=$true\r
-                       $$->%respToMyQueues=$false\r
-                       $$->%useQuickGet=$true\r
-                       $$->%displayNoOccurrenceFound=$false\r
-                       $$->%multipleResultsPerLine=$true\r
-                       $$->%findFilter=$false\r
-                       $$->%cache=$new(NGLfserv::classes::cache,$$,cache,$$->%channelName)\r
-               }\r
-               function destructor()\r
-               {\r
-                       if($objects.exists($$->%cache)) {\r
-                               $$->%cache->$resetCache()\r
-                               delete $$->%cache\r
-                       }\r
-               }\r
-               function setRespToList()\r
-               {\r
-                       $$->%respToList=$0\r
-               }\r
-               function setRespToFind()\r
-               {\r
-                       $$->%respToFind=$0\r
-               }\r
-               function setRespToMyQueues()\r
-               {\r
-                       $$->%respToMyQueues=$0\r
-               }\r
-               function setUseQuickGet()\r
-               {\r
-                       $$->%useQuickGet=$0\r
-               }\r
-               function setDisplayNoOccurrenceFound()\r
-               {\r
-                       $$->%displayNoOccurrenceFound=$0\r
-               }\r
-               function setMultipleResultsPerLine()\r
-               {\r
-                       $$->%multipleResultsPerLine=$0\r
-               }\r
-               function setFindFilter()\r
-               {\r
-                       $$->%findFilter=$0\r
-               }\r
-               function toggleRespToList()\r
-               {\r
-                       if($$->%respToList) $$->%respToList=$false\r
-                       else $$->%respToList=$true\r
-               }\r
-               function toggleRespToFind()\r
-               {\r
-                       if($$->%respToFind) $$->%respToFind=$false\r
-                       else $$->%respToFind=$true\r
-               }\r
-               function toggleRespToMyQueues()\r
-               {\r
-                       if($$->%respToMyQueues) $$->%respToMyQueues=$false\r
-                       else $$->%respToMyQueues=$true\r
-               }\r
-               function toggleUseQuickGet()\r
-               {\r
-                       if($$->%useQuickGet) $$->%useQuickGet=$false\r
-                       else $$->%useQuickGet=$true\r
-               }\r
-               function toggleDisplayNoOccurrenceFound()\r
-               {\r
-                       if($$->%displayNoOccurrenceFound) $$->%displayNoOccurrenceFound=$false\r
-                       else $$->%displayNoOccurrenceFound=$true\r
-               }\r
-               function toggleMultipleResultsPerLine()\r
-               {\r
-                       if($$->%multipleResultsPerLine) $$->%multipleResultsPerLine=$false\r
-                       else $$->%multipleResultsPerLine=$true\r
-               }\r
-               function toggleFindFilter()\r
-               {\r
-                       if($$->%findFilter) $$->%findFilter=$false\r
-                       else $$->%findFilter=$true\r
-               }\r
-               function getChannelName()\r
-               {\r
-                       return $$->%channelName\r
-               }\r
-               function getRespToList()\r
-               {\r
-                       return $$->%respToList\r
-               }\r
-               function getRespToFind()\r
-               {\r
-                       return $$->%respToFind\r
-               }\r
-               function getRespToMyQueues()\r
-               {\r
-                       return $$->%respToMyQueues\r
-               }\r
-               function getUseQuickGet()\r
-               {\r
-                       return $$->%useQuickGet\r
-               }\r
-               function getDisplayNoOccurrenceFound()\r
-               {\r
-                       return $$->%displayNoOccurrenceFound\r
-               }\r
-               function getMultipleResultsPerLine()\r
-               {\r
-                       return $$->%multipleResultsPerLine\r
-               }\r
-               function getFindFilter()\r
-               {\r
-                       return $$->%findFilter\r
-               }\r
-               function addRootFolder()\r
-               {\r
-                       $$->%rootFolders{$0->$triggerName()}=$0\r
-                       $$->%cache->$resetCache()\r
-               }\r
-               function removeRootFolder()\r
-               {\r
-                       $$->%rootFolders{$0}=""\r
-                       $$->%cache->$resetCache()\r
-               }\r
-               function isRootFolderEmpty()\r
-               {\r
-                       if($$->%rootFolders{}#==0) return $true\r
-                       else return $false\r
-               }\r
-               function createCache()\r
-               {\r
-                       $$->%cache=$new(NGLfserv::classes::cache,$$,cache,$$->%channelName)\r
-               }\r
-               function cache()\r
-               {\r
-                       return $$->%cache\r
-               }\r
+       class(NGLfserv::classes::chanGeneralProperties,object)
+       {
+               function constructor()
+               {
+                       $$->%channelName=$0
+                       $$->%respToList=$true
+                       $$->%respToFind=$true
+                       $$->%respToMyQueues=$false
+                       $$->%useQuickGet=$true
+                       $$->%displayNoOccurrenceFound=$false
+                       $$->%multipleResultsPerLine=$true
+                       $$->%findFilter=$false
+                       $$->%cache=$new(NGLfserv::classes::cache,$$,cache,$$->%channelName)
+               }
+               function destructor()
+               {
+                       if($objects.exists($$->%cache)) {
+                               $$->%cache->$resetCache()
+                               delete $$->%cache
+                       }
+               }
+               function setRespToList()
+               {
+                       $$->%respToList=$0
+               }
+               function setRespToFind()
+               {
+                       $$->%respToFind=$0
+               }
+               function setRespToMyQueues()
+               {
+                       $$->%respToMyQueues=$0
+               }
+               function setUseQuickGet()
+               {
+                       $$->%useQuickGet=$0
+               }
+               function setDisplayNoOccurrenceFound()
+               {
+                       $$->%displayNoOccurrenceFound=$0
+               }
+               function setMultipleResultsPerLine()
+               {
+                       $$->%multipleResultsPerLine=$0
+               }
+               function setFindFilter()
+               {
+                       $$->%findFilter=$0
+               }
+               function toggleRespToList()
+               {
+                       if($$->%respToList) $$->%respToList=$false
+                       else $$->%respToList=$true
+               }
+               function toggleRespToFind()
+               {
+                       if($$->%respToFind) $$->%respToFind=$false
+                       else $$->%respToFind=$true
+               }
+               function toggleRespToMyQueues()
+               {
+                       if($$->%respToMyQueues) $$->%respToMyQueues=$false
+                       else $$->%respToMyQueues=$true
+               }
+               function toggleUseQuickGet()
+               {
+                       if($$->%useQuickGet) $$->%useQuickGet=$false
+                       else $$->%useQuickGet=$true
+               }
+               function toggleDisplayNoOccurrenceFound()
+               {
+                       if($$->%displayNoOccurrenceFound) $$->%displayNoOccurrenceFound=$false
+                       else $$->%displayNoOccurrenceFound=$true
+               }
+               function toggleMultipleResultsPerLine()
+               {
+                       if($$->%multipleResultsPerLine) $$->%multipleResultsPerLine=$false
+                       else $$->%multipleResultsPerLine=$true
+               }
+               function toggleFindFilter()
+               {
+                       if($$->%findFilter) $$->%findFilter=$false
+                       else $$->%findFilter=$true
+               }
+               function getChannelName()
+               {
+                       return $$->%channelName
+               }
+               function getRespToList()
+               {
+                       return $$->%respToList
+               }
+               function getRespToFind()
+               {
+                       return $$->%respToFind
+               }
+               function getRespToMyQueues()
+               {
+                       return $$->%respToMyQueues
+               }
+               function getUseQuickGet()
+               {
+                       return $$->%useQuickGet
+               }
+               function getDisplayNoOccurrenceFound()
+               {
+                       return $$->%displayNoOccurrenceFound
+               }
+               function getMultipleResultsPerLine()
+               {
+                       return $$->%multipleResultsPerLine
+               }
+               function getFindFilter()
+               {
+                       return $$->%findFilter
+               }
+               function addRootFolder()
+               {
+                       $$->%rootFolders{$0->$triggerName()}=$0
+                       $$->%cache->$resetCache()
+               }
+               function removeRootFolder()
+               {
+                       $$->%rootFolders{$0}=""
+                       $$->%cache->$resetCache()
+               }
+               function isRootFolderEmpty()
+               {
+                       if($$->%rootFolders{}#==0) return $true
+                       else return $false
+               }
+               function createCache()
+               {
+                       $$->%cache=$new(NGLfserv::classes::cache,$$,cache,$$->%channelName)
+               }
+               function cache()
+               {
+                       return $$->%cache
+               }
        }
 }
 
index f3fa5ec9b6f29bfe2519629b8cad153f21f069c7..397d48410175d7dd8e612ca901c9891811f48858 100644 (file)
@@ -1,48 +1,48 @@
 alias(NGLfserv::classes::chanTriggerProperties)
 {
-       class(NGLfserv::classes::chanTriggerProperties,object)\r
-       {\r
-               function constructor()\r
-               {\r
-                       $$->%channelName=$0\r
-                       $$->%triggerType=0\r
-                       # 0 for ctcp, 1 for remote, 10 for both\r
-                       $$->%accessType=0\r
-                       # 0 for all, 1 for op, 2 for voice, 12 for both\r
-               }\r
-               function getChannelName()\r
-               {\r
-                       return $$->%channelName\r
-               }\r
-               function getTriggerType()\r
-               {\r
-                       return $$->%triggerType\r
-               }\r
-               function getAccessType()\r
-               {\r
-                       return $$->%accessType\r
-               }\r
-               function setTriggerType()\r
-               {\r
-                       if($0==2) $$->%triggerType = 10\r
-                       else $$->%triggerType = $0\r
-               }\r
-               function setAccessType()\r
-               {\r
-                       $$->%accessType = $0\r
-               }\r
-               function setAccessByPswd()\r
-               {\r
-                       $$->%Pswd=$0\r
-               }\r
-               function isPswdRestricted()\r
-               {\r
-                       if ($$->%Pswd) \r
-                               return $$->%Pswd\r
-                       else\r
-                               return $false\r
-               }\r
-               \r
+       class(NGLfserv::classes::chanTriggerProperties,object)
+       {
+               function constructor()
+               {
+                       $$->%channelName=$0
+                       $$->%triggerType=0
+                       # 0 for ctcp, 1 for remote, 10 for both
+                       $$->%accessType=0
+                       # 0 for all, 1 for op, 2 for voice, 12 for both
+               }
+               function getChannelName()
+               {
+                       return $$->%channelName
+               }
+               function getTriggerType()
+               {
+                       return $$->%triggerType
+               }
+               function getAccessType()
+               {
+                       return $$->%accessType
+               }
+               function setTriggerType()
+               {
+                       if($0==2) $$->%triggerType = 10
+                       else $$->%triggerType = $0
+               }
+               function setAccessType()
+               {
+                       $$->%accessType = $0
+               }
+               function setAccessByPswd()
+               {
+                       $$->%Pswd=$0
+               }
+               function isPswdRestricted()
+               {
+                       if ($$->%Pswd) 
+                               return $$->%Pswd
+                       else
+                               return $false
+               }
+               
        }
 }
 
index 04f61e57f07b059def1573b0373a063c932ad6ad..b327550ed38421829e149699394f296d7fea53ab 100644 (file)
@@ -48,26 +48,26 @@ alias(NGLfserv::config::loadSendAndQueues)
                                                        NGLfserv::corefunctions::ngldebug "Breakpoint 5"
                                                        NGLfserv::corefunctions::ngldebug "Starting send"$10
                                                        
-                                                       %fl_send = $new(object)\r
-                                                       %fl_send->%completepath = %NGLTempSends->$at($10)->%completepath\r
-                                                       %fl_send->%size = %NGLTempSends->$at($10)->%size\r
-                                                       %fl_send->%file = $file.extractfilename(%fl_send->%completepath)\r
-                                                       %fl_send->%retries = 0\r
-                                                       %fl_send->%nick = %NGLTempSends->$at($10)->%nick\r
-                                                       %fl_send->%initialNick = %fl_send->%nick\r
-                                                       %fl_send->%nickStatus = %NGLTempSends->$at($10)->%nickStatus\r
-                                                       %fl_send->%ircContext = %NGLTempSends->$at($10)->%ircContext\r
-                                                       %fl_send->%console = $console(%fl_send->%ircContext)\r
+                                                       %fl_send = $new(object)
+                                                       %fl_send->%completepath = %NGLTempSends->$at($10)->%completepath
+                                                       %fl_send->%size = %NGLTempSends->$at($10)->%size
+                                                       %fl_send->%file = $file.extractfilename(%fl_send->%completepath)
+                                                       %fl_send->%retries = 0
+                                                       %fl_send->%nick = %NGLTempSends->$at($10)->%nick
+                                                       %fl_send->%initialNick = %fl_send->%nick
+                                                       %fl_send->%nickStatus = %NGLTempSends->$at($10)->%nickStatus
+                                                       %fl_send->%ircContext = %NGLTempSends->$at($10)->%ircContext
+                                                       %fl_send->%console = $console(%fl_send->%ircContext)
                                                        %fl_send->%serverName = %NGLTempSends->$at($10)->%serverName
-                                                       %fl_send->%triggerName = %NGLTempSends->$at($10)->%triggerName\r
-       \r
-                                                       if($NGLfserv::corefunctions::dccStartSend(%fl_send->%console, %fl_send->%nick, %fl_send->%completepath)) {\r
-                                                               %Send->$append(%fl_send)\r
-                                                               if(!%Nick_nr_sends{%fl_send->%nick}) %Nick_nr_sends{%fl_send->%nick}=0\r
-                                                               %Nick_nr_sends{%fl_send->%nick}++\r
-                                                               if($objects.exists(%NGLmonitor)) {\r
-                                                                       %NGLmonitor->$showSends()\r
-                                                               }\r
+                                                       %fl_send->%triggerName = %NGLTempSends->$at($10)->%triggerName
+       
+                                                       if($NGLfserv::corefunctions::dccStartSend(%fl_send->%console, %fl_send->%nick, %fl_send->%completepath)) {
+                                                               %Send->$append(%fl_send)
+                                                               if(!%Nick_nr_sends{%fl_send->%nick}) %Nick_nr_sends{%fl_send->%nick}=0
+                                                               %Nick_nr_sends{%fl_send->%nick}++
+                                                               if($objects.exists(%NGLmonitor)) {
+                                                                       %NGLmonitor->$showSends()
+                                                               }
                                                        }
                                                }
                                                else {
@@ -84,24 +84,24 @@ alias(NGLfserv::config::loadSendAndQueues)
                                                if($1) {
                                                        NGLfserv::corefunctions::ngldebug "Queueing"$10
                                                        
-                                                       %fl_send = $new(object)\r
-                                                       %fl_send->%completepath = %NGLTempQueues->$at($10)->%completepath\r
-                                                       %fl_send->%size = %NGLTempQueues->$at($10)->%size\r
-                                                       %fl_send->%file = $file.extractfilename(%fl_send->%completepath)\r
-                                                       %fl_send->%retries = 0\r
-                                                       %fl_send->%nick = %NGLTempQueues->$at($10)->%nick\r
-                                                       %fl_send->%initialNick = %fl_send->%nick\r
-                                                       %fl_send->%nickStatus = %NGLTempQueues->$at($10)->%nickStatus\r
-                                                       %fl_send->%ircContext = %NGLTempQueues->$at($10)->%ircContext\r
-                                                       %fl_send->%console = $console(%fl_send->%ircContext)\r
+                                                       %fl_send = $new(object)
+                                                       %fl_send->%completepath = %NGLTempQueues->$at($10)->%completepath
+                                                       %fl_send->%size = %NGLTempQueues->$at($10)->%size
+                                                       %fl_send->%file = $file.extractfilename(%fl_send->%completepath)
+                                                       %fl_send->%retries = 0
+                                                       %fl_send->%nick = %NGLTempQueues->$at($10)->%nick
+                                                       %fl_send->%initialNick = %fl_send->%nick
+                                                       %fl_send->%nickStatus = %NGLTempQueues->$at($10)->%nickStatus
+                                                       %fl_send->%ircContext = %NGLTempQueues->$at($10)->%ircContext
+                                                       %fl_send->%console = $console(%fl_send->%ircContext)
                                                        %fl_send->%serverName = %NGLTempQueues->$at($10)->%serverName
-                                                       %fl_send->%triggerName = %NGLTempQueues->$at($10)->%triggerName\r
-       \r
-                                                       %Queues->$append(%fl_send)\r
-                                                       if(!%Nick_nr_queues{%fl_send->%nick}) %Nick_nr_queues{%fl_send->%nick}=0\r
-                                                       %Nick_nr_queues{%fl_send->%nick}++\r
-                                                       if($objects.exists(%NGLmonitor)) {\r
-                                                               %NGLmonitor->$showQueues()\r
+                                                       %fl_send->%triggerName = %NGLTempQueues->$at($10)->%triggerName
+       
+                                                       %Queues->$append(%fl_send)
+                                                       if(!%Nick_nr_queues{%fl_send->%nick}) %Nick_nr_queues{%fl_send->%nick}=0
+                                                       %Nick_nr_queues{%fl_send->%nick}++
+                                                       if($objects.exists(%NGLmonitor)) {
+                                                               %NGLmonitor->$showQueues()
                                                        }
                                                }
                                                else {
index d2b6008a7230a115e219bfac5611b582de66020e..d31f4056c127cf2407ee1b976932deac9e077b29 100644 (file)
@@ -1,6 +1,6 @@
 alias(NGLfserv::corefunctions::say)
 {
-       if ($objects.exists(%Virtualshell)) %Virtualshell->$append("$1-")\r
+       if ($objects.exists(%Virtualshell)) %Virtualshell->$append("$1-")
        else say -r=$0 $1-
 }
 
index e4985653721b2a57f29d16ca18f73cdb050a472e..f69c7b47757f42eb75a57182bc1e2506a62cde30 100644 (file)
@@ -1,13 +1,13 @@
 alias(NGLfserv::uninstall::uninstallclasses)
 {
-       %temp=$str.grep("NGLfserv",$file.ls($file.localdir(classes/),f))\r
-       %temp=$str.replace(%temp,"",".kvs")\r
-       %classes[]=$str.split(",",$str.replace(%temp,"::","--"),n)\r
-       \r
-       for (%i=0;%i<$length(%classes[]);%i++;) {\r
-               if ($classDefined("%classes[%i]")){\r
-                        objects.killclass %classes[%i]\r
-               }\r
+       %temp=$str.grep("NGLfserv",$file.ls($file.localdir(classes/),f))
+       %temp=$str.replace(%temp,"",".kvs")
+       %classes[]=$str.split(",",$str.replace(%temp,"::","--"),n)
+       
+       for (%i=0;%i<$length(%classes[]);%i++;) {
+               if ($classDefined("%classes[%i]")){
+                        objects.killclass %classes[%i]
+               }
        }
 }
 
index 42da959ba5d65bf35a8ec47d0ab10aa0f80be7db..3bad3c85282987cc07f4c02dece9a71c692477ca 100644 (file)
@@ -1,61 +1,61 @@
-# A helper class for installing files and generating an uninstallation alias on the fly\r
-\r
-class(installer,object)\r
-{\r
-       constructor()\r
-       {\r
-               $this->%iNumFiles = 0\r
-       }\r
-       \r
-       copyFiles($0 = source dir,$1 = file regexp,$2 = target dir)\r
-       {\r
-               if($0 == "")\r
-               {\r
-                       echo "[Installer] SCRIPT BUG: The second argument to installer_copyfiles must be a source directory"\r
-                       halt\r
-               }\r
-       \r
-               if($1 == "")\r
-               {\r
-                       echo "[Installer] SCRIPT BUG: The third argument to installer_copyfiles must be a file name or file regexp"\r
-                       halt\r
-               }\r
-       \r
-               if($2 == "")\r
-               {\r
-                       echo "[Installer] SCRIPT BUG: The second argument to installer_copyfiles must be a destination directory"\r
-                       halt\r
-               }\r
-       \r
-               if($file.exists($0))\r
-               {\r
-                       %files[] = $file.ls($0,f,$1)\r
-                       if(%files[]#)\r
-                       {\r
-                               file.mkdir $2\r
-                               foreach(%file,%files[])\r
-                               {\r
-                                       $this->%lFiles[$this->%iNumFiles] = $str.replace($file.fixpath("$2/%file"),"\\\\","\\")\r
-                                       $this->%iNumFiles++;\r
-                                       file.copy -o "$0/%file" "$2/%file"\r
-                               }\r
-                       }\r
-               }\r
-       }\r
-       \r
-       generateUninstallAlias()\r
-       {\r
-               %alias=$0\r
-               %c  = "alias ( %alias )"\r
-               %c .= "{$lf"\r
-               if($this->%iNumFiles > 0)\r
-               {\r
-                       foreach(%file,$this->%lFiles[])\r
-                       {\r
-                               %c .= " file.remove \"%file\"$lf";\r
-                       }\r
-               }\r
-               %c .= "}"\r
-               eval %c\r
-       }\r
-};\r
+# A helper class for installing files and generating an uninstallation alias on the fly
+
+class(installer,object)
+{
+       constructor()
+       {
+               $this->%iNumFiles = 0
+       }
+       
+       copyFiles($0 = source dir,$1 = file regexp,$2 = target dir)
+       {
+               if($0 == "")
+               {
+                       echo "[Installer] SCRIPT BUG: The second argument to installer_copyfiles must be a source directory"
+                       halt
+               }
+       
+               if($1 == "")
+               {
+                       echo "[Installer] SCRIPT BUG: The third argument to installer_copyfiles must be a file name or file regexp"
+                       halt
+               }
+       
+               if($2 == "")
+               {
+                       echo "[Installer] SCRIPT BUG: The second argument to installer_copyfiles must be a destination directory"
+                       halt
+               }
+       
+               if($file.exists($0))
+               {
+                       %files[] = $file.ls($0,f,$1)
+                       if(%files[]#)
+                       {
+                               file.mkdir $2
+                               foreach(%file,%files[])
+                               {
+                                       $this->%lFiles[$this->%iNumFiles] = $str.replace($file.fixpath("$2/%file"),"\\\\","\\")
+                                       $this->%iNumFiles++;
+                                       file.copy -o "$0/%file" "$2/%file"
+                               }
+                       }
+               }
+       }
+       
+       generateUninstallAlias()
+       {
+               %alias=$0
+               %c  = "alias ( %alias )"
+               %c .= "{$lf"
+               if($this->%iNumFiles > 0)
+               {
+                       foreach(%file,$this->%lFiles[])
+                       {
+                               %c .= " file.remove \"%file\"$lf";
+                       }
+               }
+               %c .= "}"
+               eval %c
+       }
+};
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 68a43415cd2201207cf8b820e7b2003c40cd1be2..4d5c2a429384b4736842940611708f50d91f3ef7 100644 (file)
-# SOME DESCRIPTIVE TITLE.\r
-# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER\r
-# This file is distributed under the same license as the PACKAGE package.\r
-# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.\r
-# \r
-#, fuzzy\r
-msgid ""\r
-msgstr ""\r
-"Project-Id-Version: ChanStats 1.1.1\n"\r
-"Report-Msgid-Bugs-To: gspeed@gmx.net\n"\r
-"POT-Creation-Date: 2005-07-15 19:08+0200\n"\r
-"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"\r
-"Last-Translator: Remy van Noorden (Neur0) <neur0@xs4all.nl>\n"\r
-"Language-Team: dutch <nl@li.org>\n"\r
-"MIME-Version: 1.0\n"\r
-"Content-Type: text/plain; charset=UTF-8\n"\r
-"Content-Transfer-Encoding: 8bit\n"\r
-\r
-#: ../install.kvs:5\r
-msgid "Channel Statistics"\r
-msgstr "Kanaal Statistieken"\r
-\r
-#: ../install.kvs:5\r
-msgid "Shows Statistics for a joined channel."\r
-msgstr "Toon Statistieken voor een actief kanaal"\r
-\r
-#: ../install.kvs:70\r
-msgid "Chanstats Config"\r
-msgstr "Configuratie Kanaalstatistieken"\r
-\r
-#: ../install.kvs:83\r
-msgid "cleanup options"\r
-msgstr "Schoonmaak Opties"\r
-\r
-#: ../install.kvs:90\r
-msgid "remove channels from the regchan-module after :"\r
-msgstr "Verwijder kanalen uit de regchan-module na :"\r
-\r
-#: ../install.kvs:108\r
-msgid "days without ChanStats."\r
-msgstr "Dagen zonder Kanaalstatistieken"\r
-\r
-#: ../install.kvs:118\r
-msgid "display options"\r
-msgstr "Toon opties"\r
-\r
-#: ../install.kvs:126\r
-msgid "display user-percentages"\r
-msgstr "Toon gebruikers-percentages"\r
-\r
-#: ../install.kvs:143\r
-msgid "enable percentage-bars, drawn with char :"\r
-msgstr "Activeer percentage-balken, weergegeven met teken :"\r
-\r
-#: ../install.kvs:163\r
-#, fuzzy\r
-msgid "enable developments"\r
-msgstr "Activeer ontwikkelingen"\r
-\r
-#: ../install.kvs:173\r
-msgid "display user-peak"\r
-msgstr "Toon gebruikers-piek"\r
-\r
-#: ../install.kvs:180\r
-msgid "display last visit"\r
-msgstr "Toon laaste bezoek"\r
-\r
-#: ../install.kvs:192\r
-msgid "notification options"\r
-msgstr "Schoonmaak Opties"\r
-\r
-#: ../install.kvs:200\r
-msgid "show new user-peaks"\r
-msgstr "Toon nieuwe gebruikers-piek"\r
-\r
-#: ../install.kvs:207\r
-msgid "show removed channels by cleanup [console-window]"\r
-msgstr "Toon verwijderde kanalen door schoonmaak [console-window]"\r
-\r
-#: ../install.kvs:220\r
-msgid "OK"\r
-msgstr "OK"\r
-\r
-#: ../install.kvs:229\r
-msgid "Apply"\r
-msgstr "Toepassen"\r
-\r
-#: ../install.kvs:238\r
-msgid "Cancel"\r
-msgstr "Afbreken"\r
-\r
-#: ../install.kvs:468\r
-msgid "channel-data for"\r
-msgstr "Kanaal-info voor"\r
-\r
-#: ../install.kvs:468\r
-msgid "has been removed from regchan-module."\r
-msgstr "is verwijderd van de regchan-module."\r
-\r
-#: ../install.kvs:531\r
-msgid "channels have been removed from the regchan-module."\r
-msgstr "kanalen zijn verwijderd uit de regchan module."\r
-\r
-#: ../install.kvs:591\r
-msgid "New user peak for channel"\r
-msgstr "Nieuwe gebruikers-piek voor kanaal"\r
-\r
-#: ../install.kvs:591 ../install.kvs:804 ../install.kvs:826\r
-msgid "user(s)"\r
-msgstr "Gebruiker(s)"\r
-\r
-#: ../install.kvs:766\r
-msgid "usage: /chanstats <option>"\r
-msgstr "Gebruik: /chanstats <opties>"\r
-\r
-#: ../install.kvs:768\r
-msgid "possible options:"\r
-msgstr "Mogelijke opties:"\r
-\r
-#: ../install.kvs:769\r
-msgid "configure ChanStats-script"\r
-msgstr "Configureer Chanstats-script"\r
-\r
-#: ../install.kvs:770\r
-msgid "displays usercounts,peak-data and time of last visit"\r
-msgstr "Toon gebruikersaantal,piek-data en tijd van laatste bezoek"\r
-\r
-#: ../install.kvs:771\r
-msgid "resets channel-data in the regchan-module"\r
-msgstr "Verwijdert kanaal-info uit de regchan-module"\r
-\r
-#: ../install.kvs:772\r
-msgid "you were just reading the results ;)"\r
-msgstr "Je leest net het resultaat ;)"\r
-\r
-#: ../install.kvs:810\r
-msgid "OP(s)"\r
-msgstr "OP(s)"\r
-\r
-#: ../install.kvs:813\r
-msgid "half-OP(s)"\r
-msgstr "half-OP(s)"\r
-\r
-#: ../install.kvs:816\r
-msgid "voice(s)"\r
-msgstr "voice(s)"\r
-\r
-#: ../install.kvs:819\r
-msgid "peon(s)"\r
-msgstr "peon(s)"\r
-\r
-#: ../install.kvs:826\r
-msgid "user peak"\r
-msgstr "Gebruikers-piek"\r
-\r
-#: ../install.kvs:832\r
-msgid "last visit"\r
-msgstr "Laatste bezoek"\r
-\r
-#: ../install.kvs:836\r
-msgid "ERROR"\r
-msgstr "FOUT"\r
-\r
-#: ../install.kvs:836\r
-msgid "chanstats are only available in channel windows"\r
-msgstr "Statistieken zijn alleen beschikbaar in een actief kanaal"\r
-\r
-#: ../install.kvs:875\r
-msgid "installation of the chanstats script was succesful,"\r
-msgstr "Installatie van het Chanstats Script is gelukt"\r
-\r
-#: ../install.kvs:876\r
-msgid "configure ChanStats by using '/chanstats config'."\r
-msgstr "Configureer Chanstats door te gebruiken: 'chanstats config'."\r
-\r
-#: ../install.kvs:877\r
-msgid "perform a '/chanstats help' to see possible actions."\r
-msgstr "Gebruik '/chanstats help' om mogelijke acties weer te geven."\r
-\r
-#: ../install.kvs:878\r
-msgid ""\r
-"you can always uninstall ChanStats by using 'Manage Addons ...' from the "\r
-"settings menu"\r
-msgstr ""\r
-"Je kunt Chanstats altijd de-installeren door 'Manage Addons ...' te "\r
-"gebruiken onder "\r
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+# 
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: ChanStats 1.1.1\n"
+"Report-Msgid-Bugs-To: gspeed@gmx.net\n"
+"POT-Creation-Date: 2005-07-15 19:08+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Remy van Noorden (Neur0) <neur0@xs4all.nl>\n"
+"Language-Team: dutch <nl@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: ../install.kvs:5
+msgid "Channel Statistics"
+msgstr "Kanaal Statistieken"
+
+#: ../install.kvs:5
+msgid "Shows Statistics for a joined channel."
+msgstr "Toon Statistieken voor een actief kanaal"
+
+#: ../install.kvs:70
+msgid "Chanstats Config"
+msgstr "Configuratie Kanaalstatistieken"
+
+#: ../install.kvs:83
+msgid "cleanup options"
+msgstr "Schoonmaak Opties"
+
+#: ../install.kvs:90
+msgid "remove channels from the regchan-module after :"
+msgstr "Verwijder kanalen uit de regchan-module na :"
+
+#: ../install.kvs:108
+msgid "days without ChanStats."
+msgstr "Dagen zonder Kanaalstatistieken"
+
+#: ../install.kvs:118
+msgid "display options"
+msgstr "Toon opties"
+
+#: ../install.kvs:126
+msgid "display user-percentages"
+msgstr "Toon gebruikers-percentages"
+
+#: ../install.kvs:143
+msgid "enable percentage-bars, drawn with char :"
+msgstr "Activeer percentage-balken, weergegeven met teken :"
+
+#: ../install.kvs:163
+#, fuzzy
+msgid "enable developments"
+msgstr "Activeer ontwikkelingen"
+
+#: ../install.kvs:173
+msgid "display user-peak"
+msgstr "Toon gebruikers-piek"
+
+#: ../install.kvs:180
+msgid "display last visit"
+msgstr "Toon laaste bezoek"
+
+#: ../install.kvs:192
+msgid "notification options"
+msgstr "Schoonmaak Opties"
+
+#: ../install.kvs:200
+msgid "show new user-peaks"
+msgstr "Toon nieuwe gebruikers-piek"
+
+#: ../install.kvs:207
+msgid "show removed channels by cleanup [console-window]"
+msgstr "Toon verwijderde kanalen door schoonmaak [console-window]"
+
+#: ../install.kvs:220
+msgid "OK"
+msgstr "OK"
+
+#: ../install.kvs:229
+msgid "Apply"
+msgstr "Toepassen"
+
+#: ../install.kvs:238
+msgid "Cancel"
+msgstr "Afbreken"
+
+#: ../install.kvs:468
+msgid "channel-data for"
+msgstr "Kanaal-info voor"
+
+#: ../install.kvs:468
+msgid "has been removed from regchan-module."
+msgstr "is verwijderd van de regchan-module."
+
+#: ../install.kvs:531
+msgid "channels have been removed from the regchan-module."
+msgstr "kanalen zijn verwijderd uit de regchan module."
+
+#: ../install.kvs:591
+msgid "New user peak for channel"
+msgstr "Nieuwe gebruikers-piek voor kanaal"
+
+#: ../install.kvs:591 ../install.kvs:804 ../install.kvs:826
+msgid "user(s)"
+msgstr "Gebruiker(s)"
+
+#: ../install.kvs:766
+msgid "usage: /chanstats <option>"
+msgstr "Gebruik: /chanstats <opties>"
+
+#: ../install.kvs:768
+msgid "possible options:"
+msgstr "Mogelijke opties:"
+
+#: ../install.kvs:769
+msgid "configure ChanStats-script"
+msgstr "Configureer Chanstats-script"
+
+#: ../install.kvs:770
+msgid "displays usercounts,peak-data and time of last visit"
+msgstr "Toon gebruikersaantal,piek-data en tijd van laatste bezoek"
+
+#: ../install.kvs:771
+msgid "resets channel-data in the regchan-module"
+msgstr "Verwijdert kanaal-info uit de regchan-module"
+
+#: ../install.kvs:772
+msgid "you were just reading the results ;)"
+msgstr "Je leest net het resultaat ;)"
+
+#: ../install.kvs:810
+msgid "OP(s)"
+msgstr "OP(s)"
+
+#: ../install.kvs:813
+msgid "half-OP(s)"
+msgstr "half-OP(s)"
+
+#: ../install.kvs:816
+msgid "voice(s)"
+msgstr "voice(s)"
+
+#: ../install.kvs:819
+msgid "peon(s)"
+msgstr "peon(s)"
+
+#: ../install.kvs:826
+msgid "user peak"
+msgstr "Gebruikers-piek"
+
+#: ../install.kvs:832
+msgid "last visit"
+msgstr "Laatste bezoek"
+
+#: ../install.kvs:836
+msgid "ERROR"
+msgstr "FOUT"
+
+#: ../install.kvs:836
+msgid "chanstats are only available in channel windows"
+msgstr "Statistieken zijn alleen beschikbaar in een actief kanaal"
+
+#: ../install.kvs:875
+msgid "installation of the chanstats script was succesful,"
+msgstr "Installatie van het Chanstats Script is gelukt"
+
+#: ../install.kvs:876
+msgid "configure ChanStats by using '/chanstats config'."
+msgstr "Configureer Chanstats door te gebruiken: 'chanstats config'."
+
+#: ../install.kvs:877
+msgid "perform a '/chanstats help' to see possible actions."
+msgstr "Gebruik '/chanstats help' om mogelijke acties weer te geven."
+
+#: ../install.kvs:878
+msgid ""
+"you can always uninstall ChanStats by using 'Manage Addons ...' from the "
+"settings menu"
+msgstr ""
+"Je kunt Chanstats altijd de-installeren door 'Manage Addons ...' te "
+"gebruiken onder "
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/ezbounce/INSTALL b/ezbounce/INSTALL
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/ezbounce/README b/ezbounce/README
deleted file mode 100644 (file)
index e69de29..0000000
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
diff --git a/quiz/INSTALL b/quiz/INSTALL
deleted file mode 100644 (file)
index e69de29..0000000
diff --git a/quiz/README b/quiz/README
deleted file mode 100644 (file)
index e69de29..0000000
old mode 100755 (executable)
new mode 100644 (file)
index 8cda5fc..ac0eca6
@@ -1,37 +1,37 @@
-[Computer]\r
-Count=4\r
-n0Q=Qual e' il nome del "calcolatore" all'interno della CPU ?\r
-n0A=ALU\r
-n0D=1\r
-\r
-n1Q=Chi e' il maggior concorrente di Intel ?\r
-n1A=AMD\r
-n1D=1\r
-\r
-n2Q=Chi e' il maggior concorrente di Windows ?\r
-n2A=linux\r
-n2D=1\r
-\r
-n3Q=Chi e' il primo autore del kernel linux ?\r
-n3A=Linus Torvalds\r
-n3D=1\r
-\r
-[Musica]\r
-Count=1\r
-n0Q=Come si chiama il leader degli Aerosmith ?\r
-n0A=Steve Tyler\r
-n0D=1\r
-\r
-n1Q=Un famoso compositore...\r
-n1A=Wolfgang Amadeus Mozart\r
-n1D=2\r
-\r
-[Astronomia]\r
-Count=1\r
-n0Q=Qual e' il pianeta piu' grande del Sistema Solare ?\r
-n0A=Giove\r
-n0D=1\r
-\r
-n1Q=Qual e' il pianeta piu' vicino al Sole ?\r
-n1A=Mercurio\r
-n1D=1\r
+[Computer]
+Count=4
+n0Q=Qual e' il nome del "calcolatore" all'interno della CPU ?
+n0A=ALU
+n0D=1
+
+n1Q=Chi e' il maggior concorrente di Intel ?
+n1A=AMD
+n1D=1
+
+n2Q=Chi e' il maggior concorrente di Windows ?
+n2A=linux
+n2D=1
+
+n3Q=Chi e' il primo autore del kernel linux ?
+n3A=Linus Torvalds
+n3D=1
+
+[Musica]
+Count=1
+n0Q=Come si chiama il leader degli Aerosmith ?
+n0A=Steve Tyler
+n0D=1
+
+n1Q=Un famoso compositore...
+n1A=Wolfgang Amadeus Mozart
+n1D=2
+
+[Astronomia]
+Count=1
+n0Q=Qual e' il pianeta piu' grande del Sistema Solare ?
+n0A=Giove
+n0D=1
+
+n1Q=Qual e' il pianeta piu' vicino al Sole ?
+n1A=Mercurio
+n1D=1
old mode 100755 (executable)
new mode 100644 (file)
old mode 100755 (executable)
new mode 100644 (file)
index 605520d10ba5546e45a06a263e976845fe595c66..15bdf10ca1b6b789e7419e610430dd4f855cd02e 100644 (file)
-# Hack for the xgettext: this code will never be executed, but will be added to the translation file\r
-if(0)\r
-{\r
-       #Year,Genre,Length,Frequency,Bitrate\r
-       $tr("Year",twinsmediaplayer)\r
-       $tr("Genre",twinsmediaplayer)\r
-       $tr("Length",twinsmediaplayer)\r
-       $tr("Frequency",twinsmediaplayer)\r
-       $tr("Bitrate",twinsmediaplayer)\r
-       $tr("Freq",twinsmediaplayer)\r
-       $tr("unknown",twinsmediaplayer)\r
-       $tr("stopped",twinsmediaplayer)\r
-       $tr("playing",twinsmediaplayer)\r
-       $tr("paused",twinsmediaplayer)\r
-}\r
-\r
-class(twins::mediaplayer::window,dockwindow)\r
-{\r
-\r
-       createToolButton($0 = $image)\r
-        {\r
-               %tb = $new(toolbutton,@%m_hContainer)\r
-                %tb->$setImage($0)\r
-                %tb->$setUsesBigPixmap($false)\r
-                %tb->$setUsesTextLabel($false)\r
-                %tb->$setAutoRaise($true)\r
-                %tb->$setMaximumWidth(24)\r
-                %tb->$setMaximumHeight(24)\r
-                return %tb\r
-        }\r
-\r
-       constructor()\r
-       {\r
-\r
-               twins::mediaplayer::core::config::load\r
-               %TwinsMediaPlayer{laststartmode} = "on"\r
-               twins::mediaplayer::core::config::save\r
-\r
-               %G_hTwinsMediaPlayer{window} = $$\r
-               $$->$setCaption($str.printf($tr("Twins MediaPlayer-?s",twinsmediaplayer),$addon.version(twinsmediaplayer)))\r
-\r
-               @$setAllowedDockAreas("lrfm")\r
-               @$setResizeEnabled($true)\r
-\r
-               @%m_hContainer = $new(widget,$this)\r
-               %l = $new(layout,@%m_hContainer)\r
-\r
-               // Information\r
-               @%m_hTextBrowser = $new(textbrowser,@%m_hContainer)\r
-               %l->$addMultiCellWidget(@%m_hTextBrowser,0,0,0,6)\r
-\r
-\r
-               // ** newline **\r
-\r
-\r
-               // Back\r
-               @%m_hBack = $$->$createToolButton("twins/16x16/twins_player_back.png")\r
-               @%m_hBack->$settooltip($tr("Previous track","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hBack,1,0)\r
-               objects.connect @%m_hBack clicked $$ previous\r
-\r
-               // Rewind\r
-               @%m_hRew = $$->$createToolButton("twins/16x16/twins_player_rewind.png")\r
-               @%m_hRew->$settooltip($tr("Rewind","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hRew,1,1)\r
-               objects.connect @%m_hRew clicked $$ rew\r
-\r
-               // Stop\r
-               @%m_hStop = $$->$createToolButton("twins/16x16/twins_player_stop.png")\r
-               @%m_hStop->$settooltip($tr("Stop","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hStop,1,2)\r
-               objects.connect @%m_hStop clicked $$ stop\r
-\r
-               // Pause\r
-               @%m_hPause = $$->$createToolButton("twins/16x16/twins_player_pause.png")\r
-               @%m_hPause->$settooltip($tr("Pause","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hPause,1,3)\r
-               objects.connect @%m_hPause clicked $$ pause\r
-\r
-               // Play\r
-               @%m_hPlay = $$->$createToolButton("twins/16x16/twins_player_play.png")\r
-               @%m_hPlay->$settooltip($tr("Play","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hPlay,1,4)\r
-               objects.connect @%m_hPlay clicked $$ play\r
-\r
-               // Fast forward\r
-               @%m_hFwd = $$->$createToolButton("twins/16x16/twins_player_fastforward.png")\r
-               @%m_hFwd->$settooltip($tr("Fast forward","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hFwd,1,5)\r
-               objects.connect @%m_hFwd clicked $$ fwd\r
-\r
-               // Next\r
-               @%m_hNext = $$->$createToolButton("twins/16x16/twins_player_next.png")\r
-               @%m_hNext->$settooltip($tr("Next track","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hNext,1,6)\r
-               objects.connect @%m_hNext clicked $$ next\r
-\r
-\r
-               // ** newline **\r
-\r
-\r
-               // Time slider\r
-               @%m_hTime = $new(slider,@%m_hContainer)\r
-               @%m_hTime->%step=4\r
-               @%m_hTime->$setpagestep(@%m_hTime->%step)\r
-               @%m_hTime->$settracking(0)\r
-               @%m_hTime->$setorientation("Horizontal")\r
-               @%m_hTime->$setvalue($($mediaplayer.position / 1000))\r
-               %l->$addmulticellWidget(@%m_hTime,2,2,0,1)\r
-\r
-               // Time label\r
-               @%m_hTimeLabel = $new(label,@%m_hContainer)\r
-               @%m_hTimeLabel->$setfont(8,courrier,fixedpitch)\r
-               @%m_hTimeLabel->$setalignment(Right)\r
-               @%m_hTimeLabel->$setframestyle(Panel,Sunken)\r
-               @%m_hTimeLabel->$setmaximumheight(18)\r
-               %l->$addmulticellWidget(@%m_hTimeLabel,2,2,2,3)\r
-\r
-               // Shuffle\r
-               if($mediaplayer.getshuffle)\r
-                       %pix = "twins/16x16/twins_player_random_on.png"\r
-               else\r
-                       %pix = "twins/16x16/twins_player_random_off.png"\r
-               @%m_hShuffle = $$->$createToolButton(%pix)\r
-               @%m_hShuffle->$settooltip($tr("Shuffle","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hShuffle,2,4)\r
-               objects.connect @%m_hShuffle clicked $$ shuffle\r
-\r
-               // Repeat\r
-               if($mediaplayer.getrepeat)\r
-                       %pix = "twins/16x16/twins_player_repeat_on.png"\r
-               else\r
-                       %pix = "twins/16x16/twins_player_repeat_off.png"\r
-               @%m_hRepeat = $$->$createToolButton(%pix)\r
-               @%m_hRepeat->$settooltip($tr("Repeat current track","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hRepeat,2,5)\r
-               objects.connect @%m_hRepeat clicked $$ repeat\r
-\r
-               // Advertise\r
-               @%m_hAdv = $$->$createToolButton("twins/16x16/twins_player_say.png")\r
-               @%m_hAdv->$settooltip($tr("Advertise the current track on a channel or in a query","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hadv,2,6)\r
-               objects.connect @%m_hAdv clicked $$ advertise\r
-\r
-\r
-               // ** Newline **\r
-\r
-\r
-               // Configure\r
-               @%m_hConfig = $$->$createToolButton("twins/16x16/twins_player_configure.png")\r
-               @%m_hConfig->$settooltip($tr("Configure the media player","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hConfig,3,0)\r
-               objects.connect @%m_hConfig clicked $$ configure\r
-\r
-               // Volume slider\r
-               @%m_hVol = $new(slider,@%m_hContainer)\r
-               @%m_hVol->$settooltip($tr("Volume control","twinsmediaplayer"))\r
-               @%m_hVol->$setorientation("Horizontal")\r
-               @%m_hVol->$setminvalue(0)\r
-               @%m_hVol->$setmaxvalue(100)\r
-               @%m_hVol->%step=5\r
-               @%m_hVol->$setpagestep(@%m_hVol->%step)\r
-               @%m_hVol->$settracking(1)\r
-               @%m_hVol->$setTickInterval(10)\r
-               @%m_hVol->$setvalue($($mediaplayer.getvol * 100 / 255))\r
-               %l->$addmulticellWidget(@%m_hVol,3,3,1,2)\r
-               objects.connect @%m_hVol valueChanged $$ setVol\r
-\r
-               // Volume label\r
-               @%m_hVolLabel = $new(label,@%m_hContainer)\r
-               @%m_hVolLabel->$setfont(8,courrier,fixedpitch)\r
-               @%m_hVolLabel->$setalignment(Right)\r
-               @%m_hVolLabel->$settooltip($tr("Current volume","twinsmediaplayer"))\r
-//             @%m_hVolLabel->$setframestyle(Panel,Sunken)\r
-               @%m_hVolLabel->$setmaximumheight(18)\r
-               %l->$addWidget(@%m_hVolLabel,3,3)\r
-\r
-               // Volume icon\r
-               %hVol = $$->$createToolButton("twins/16x16/twins_player_volume.png")\r
-               %hVol->$settooltip($tr("Volume","twinsmediaplayer"))\r
-               %l->$addWidget(%hVol,3,4)\r
-\r
-               // Add to playlist\r
-               @%m_hPL = $$->$createToolButton("twins/16x16/twins_player_playlist.png")\r
-               @%m_hPL->$settooltip($tr("Open url or add files to playlist","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hPL,3,5)\r
-               objects.connect @%m_hPL clicked $$ playMrl\r
-\r
-               // Offer\r
-               @%m_hOffer = $$->$createToolButton("twins/16x16/twins_player_sayandshare.png")\r
-               @%m_hOffer->$settooltip($tr("Advertise and <i>offer</i> the current track on a channel or in a query","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hOffer,3,6)\r
-               objects.connect @%m_hOffer clicked $$ offer\r
-\r
-\r
-               // ** Newline **\r
-\r
-\r
-               // Close\r
-               @%m_hClose = $$->$createToolButton("twins/16x16/twins_player_close.png")\r
-               @%m_hClose->$settooltip($tr("Close the media player","twinsmediaplayer"))\r
-               %l->$addWidget(@%m_hClose,4,0)\r
-               objects.connect @%m_hClose clicked $$ close\r
-\r
-               // Show player\r
-               %show = @$createToolButton("twins/16x16/twins_player_show.png")\r
-               %show->$settooltip($tr("Show the player","twinsmediaplayer"))\r
-               %l->$addWidget(%show,4,1)\r
-               objects.connect %show clicked $$ showPlayer\r
-\r
-               // Hide player\r
-               %hide = @$createToolButton("twins/16x16/twins_player_hide.png")\r
-               %hide->$settooltip($tr("Hide the player","twinsmediaplayer"))\r
-               %l->$addWidget(%hide,4,2)\r
-               objects.connect %hide clicked $$ hidePlayer\r
-\r
-               // Status\r
-               @%m_hStatus = $new(label,@%m_hContainer)\r
-//             @%m_hStatus->$setfont(8,courrier,fixedpitch)\r
-               @%m_hVolLabel->$setalignment(Right)\r
-               %l->$addmulticellwidget(@%m_hStatus,4,4,3,6)\r
-\r
-\r
-               @$addWidget(@%m_hContainer)\r
-\r
-               @$displaystatus\r
-               @$checkbuttons()\r
-\r
-               @$timerEvent()\r
-               @$starttimer($(2000))\r
-\r
-       }\r
-\r
-       showPlayer()\r
-       {\r
-               mediaplayer.show -q\r
-       }\r
-\r
-       hidePlayer()\r
-       {\r
-               mediaplayer.hide -q\r
-       }\r
-\r
-       timerEvent()\r
-       {\r
-               // Update status\r
-               @$displaystatus()\r
-\r
-               // Update volume\r
-               @$updateVol(1)\r
-\r
-               // Update time position\r
-               @$updateTime\r
-\r
-               // Check button status\r
-               @$checkbuttons()\r
-\r
-               // Display information in main window and update time slider length\r
-               @$updateWindow(0)\r
-       }\r
-\r
-       updateVol($1 = do not send to player)\r
-       {\r
-               %iVol = $($mediaplayer.getvol * 100 / 255)\r
-               if(%iVol<0 || %iVol>100){\r
-                       @%m_hVol->$setValue(50)\r
-                       @%m_hVolLabel->$settext("---\%")\r
-               } else {\r
-                       if($math.abs($(%iVol-@%m_hVol->$value))>=@%m_hVol->%step)\r
-                               @%m_hVol->$setValue(%iVol)\r
-                       if(%iVol<10)\r
-                               %iVol="  %iVol"\r
-                       elseif(%iVol<100)\r
-                               %iVol=" %iVol"\r
-                       @%m_hVolLabel->$settext("%iVol\%")\r
-               }\r
-       }\r
-\r
-       setVol()\r
-       {\r
-               if($mediaplayer.status != "unknown"){\r
-                       mediaplayer.setvol -q $(@%m_hVol->$value * 255 / 100)\r
-                       @$updateVol()\r
-               }\r
-       }\r
-\r
-       updateWindow($0 = force update?)\r
-       {\r
-               if(!$0)\r
-               {\r
-                       // * shunt normal file\r
-                       if( $mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl)\r
-                               return\r
-                       // * shunt flux\r
-                       elseif( !$mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl && \\r
-                               @%m_hOldPlay == $mediaplayer.nowplaying ) return\r
-               }\r
-               @%m_hOldSource = $mediaplayer.mrl\r
-               @%m_hOldPlay = $mediaplayer.nowplaying\r
-               // * ok do it if playing\r
-               if($str.contains(" unknown stopped "," $mediaplayer.status "))\r
-               {\r
-                       %h = "<html><title>$0</title>"\r
-                       %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"\r
-                       %h .= $tr("No track being played",twinsmediaplayer)\r
-                       %h .= "</body></html>"\r
-                       @%m_hTextBrowser->$setText(%h)\r
-                       @%m_hOldSource = ""\r
-                       @%m_hOldPlay = ""\r
-               } else {\r
-                       %info = @$getinfo\r
-                       @$display(%info{title},%info{artist},%info{album},@$getTech(%info,html))\r
-                       @%m_hTime->$setmaxvalue($($mediaplayer.length / 1000))\r
-                       @%m_hTime->$settickinterval($(@%m_hTime->$maxvalue / 4))\r
-               }\r
-       }\r
-\r
-       updateTime($0 = time)\r
-       {\r
-               if(!@%m_hTime->$maxvalue || $str.contains(" unknown stopped "," $mediaplayer.status "))\r
-               {\r
-                       @%m_hTimeLabel->$settext("--:--:--")\r
-                       @%m_hTime->$setvalue(0)\r
-                       return\r
-               }\r
-               if($isset($0))\r
-                       %iTime = $0\r
-               else\r
-                       %iTime = $mediaplayer.position\r
-               @%m_hTime->$setvalue($(%iTime / 1000))\r
-               @%m_hTimeLabel->$settext(@$formatTime(%iTime))\r
-       }\r
-\r
-       rew()\r
-       {\r
-               if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){\r
-                       %iPos = $($mediaplayer.position - 5000)\r
-                       if(%iPos < 0) %iPos = 0\r
-                       mediaplayer.jumpto -q %iPos\r
-                       @$updateTime(%iPos)\r
-               }\r
-       }\r
-\r
-       fwd()\r
-       {\r
-               if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){\r
-                       %iPos = $($mediaplayer.position + 5000)\r
-                       if(%iPos > $mediaplayer.length) %iPos = $mediaplayer.length\r
-                       mediaplayer.jumpto -q %iPos\r
-                       @$updateTime(%iPos)\r
-               }\r
-       }\r
-\r
-       formatTime($0 = time in ms)\r
-       {\r
-               if($str.isunsignednumber($0))\r
-               {\r
-                       %lh = $($0 / 3600000)\r
-                       %lm = $(($0 % 3600000) / 60000)\r
-                       %ls = $(($0 % 60000) / 1000)\r
-                       if(%lh > 0)%r .= %lh"h"\r
-                       if(%lm < 10)%r .= "0"%lm"m"\r
-                       else %r .= %lm"m"\r
-                       if(%ls < 10)%r .= "0"%ls\s\r
-                       else %r .= %ls\s\r
-                       return %r\r
-               }\r
-       }\r
-\r
-       playMrl()\r
-       {\r
-               if(!$objects.exists(%G_hTwinsMediaPlayer{playmrl}))\r
-                       %G_hTwinsMediaPlayer{playmrl} = $new(twins::mediaplayer::mrldialog,$$)\r
-               %G_hTwinsMediaPlayer{playmrl}->$show\r
-       }\r
-\r
-       offer()\r
-       {\r
-               @$advertise(1)\r
-       }\r
-\r
-       advertise($0 = offer?)\r
-       {\r
-               %w = $active\r
-               %info = @$getinfo\r
-               if($isset(%info{artist})) %s << "%info{artist} -"\r
-               %s << %info{title}\r
-               if(%TwinsMediaPlayer{showalbum}&&%info{album}) %s << " (%info{album})"\r
-               if($0)\r
-               {\r
-                       %file = $mediaplayer.localfile\r
-                       if(!%file) %share=$mediaplayer.mrl\r
-                       else\r
-                       {\r
-                               if(!$isset(%TwinsMediaPlayer.sharecount))\r
-                                       %TwinsMediaPlayer.sharecount=1\r
-                               %nowplaying=$mediaplayer.nowplaying\r
-                               for(%i=0;%i<%TwinsMediaPlayer{maxoffernamelength};%i++)\r
-                               {\r
-                                       if(%i==$str.length(%nowplaying))break\r
-                                       %c=$str.mid(%nowplaying,%i,1)\r
-                                       if($str.contains("()[]  ",%c))%c="_"\r
-                                       %name .= %c\r
-                               }\r
-                               %name .= _%TwinsMediaPlayer.sharecount\r
-                               %TwinsMediaPlayer.sharecount++\r
-                               sharedfile.add -t=$(%TwinsMediaPlayer{sharetimeout} * 60) -n=%name %file\r
-                               %size = $file.size(%file)\r
-                               %onemeg = $(1024 * 1024)\r
-                               if(%size > %onemeg)\r
-                               {\r
-                                       %mb = $(%size / %onemeg)\r
-                                       %rest = $((%size % %onemeg) / 10240)\r
-                                       %size = %mb"."$(%rest / 10)$(%rest % 10)"Mb"\r
-                               } else {\r
-                                       %size = %size"bytes"\r
-                               }\r
-\r
-                               %share = "$b/ctcp $me xdcc get %name$b (%size)"\r
-                       }\r
-                       %s .= @$gettech(%info,linear,%share)\r
-               } else %s .= @$gettech(%info,linear)\r
-               me -r=%w %TwinsMediaPlayer{announce} %s\r
-       }\r
-\r
-       getInfo()\r
-       {\r
-               %r{artist} = $mediaplayer.artist\r
-               %r{title} = $mediaplayer.title\r
-               if(%r{artist} == "" || %r{title} == "")\r
-               {\r
-                       %r{artist} =\r
-                       %r{title} = $mediaplayer.nowplaying\r
-               }\r
-               %r{album} = $mediaplayer.album\r
-               if($str.equal(%r{album},"Other"))%r{album} =\r
-               %length = $mediaplayer.length\r
-               if(%length) %r{length} = @$formatTime(%length)\r
-               %r{year} = $mediaplayer.year\r
-               if(%r{year}=="0")%r{year}=\r
-               %bitrate = $mediaplayer.bitrate\r
-               if($str.isunsignednumber(%bitrate)) %r{bitrate} = "%bitrate Kbit/s"\r
-               %freq = $mediaplayer.samplerate\r
-               if($str.isunsignednumber(%freq)) %r{frequency} = "$(%freq / 1000) kHz"\r
-               %r{file} = $mediaplayer.localfile\r
-               %r{genre} = $mediaplayer.genre\r
-               if($str.containsnocase(" other unknown "," %r{genre} "))%r{genre}=\r
-\r
-               return %r\r
-       }\r
-\r
-\r
-       display($0 = title and big header, $1 = top header,$2 = bottom header,$3 = technical informations)\r
-       {\r
-               %h = "<html><title>$0</title>"\r
-//             %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\" text=\""%TwinsMediaPlayer{color:fg:window}"\">"\r
-               %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"\r
-               %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"\r
-               if($1)%h .=  "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:artist}"\"><font color=\""%TwinsMediaPlayer{color:fg:artist}"\" style=\"font-size:10pt;\">"<b>$1</b>"</font></td></tr>"\r
-               %h .=  "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:title}"\"><font color=\""%TwinsMediaPlayer{color:fg:title}"\" style=\"font-size:12pt;\"><b>"<i>$0</i>"</b></font></td></tr>"\r
-               if($2)%h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:album}"\"><font color=\""%TwinsMediaPlayer{color:fg:album}"\" style=\"font-size:9pt;\">"$2"</font></td></tr>"\r
-               if($3)%h .= $3\r
-               %h .= "</table>"\r
-               %h .= "</body></html>"\r
-\r
-               @%m_hTextBrowser->$setText(%h)\r
-       }\r
-\r
-       getTech($0 = hash of info,$1 = "html" or "linear",$2 = string to insert at the end)\r
-       {\r
-               %lTags = $array(Year,Genre,Length,Frequency,Bitrate)\r
-               foreach(%tag,year,genre,length,freq,bitrate)\r
-               if($isset($0{%tag}))\r
-               {\r
-                       if($1 == "html")\r
-                       {\r
-                               %tag = $str.upcase($str.left(%tag,1))$str.right(%tag,$($str.len(%tag)-1))\r
-                               %h .= "<tr><th><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">%tag:</font></th>"\r
-                               %h .= "<td><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">$0{%tag}</font></td></tr>"\r
-                       } elseif(%TwinsMediaPlayer{show%tag})%hh <+ $str.replace($0{%tag},""," ")\r
-               }\r
-               if($1 == "linear")\r
-               {\r
-                       if($2)%hh <+ $2\r
-                       if($isset(%hh))%h = " ["$str.join(%TwinsMediaPlayer{separator},%hh)"]"\r
-               }\r
-               return %h\r
-       }\r
-\r
-       displayStatus()\r
-       {\r
-               @%m_hStatus->$settext($tr("Status:",twinsmediaplayer)" $tr($mediaplayer.status,twinsmediaplayer)")\r
-       }\r
-\r
-       play()\r
-       {\r
-               mediaplayer.play\r
-       }\r
-\r
-       stop()\r
-       {\r
-               mediaplayer.stop\r
-       }\r
-\r
-       pause()\r
-       {\r
-               mediaplayer.pause\r
-       }\r
-\r
-       previous()\r
-       {\r
-               mediaplayer.prev\r
-       }\r
-\r
-       next()\r
-       {\r
-               mediaplayer.next\r
-       }\r
-\r
-       repeat()\r
-       {\r
-               mediaplayer.setRepeat $(1-$mediaplayer.getrepeat)\r
-               @$checkButtons\r
-       }\r
-\r
-       shuffle()\r
-       {\r
-               mediaplayer.setShuffle $(1-$mediaplayer.getshuffle)\r
-               @$checkButtons\r
-       }\r
-\r
-       checkButtons()\r
-       {\r
-               %status = $mediaplayer.status\r
-               %bUnknown = $(%status == "unknown")\r
-               %bStopped = $(%status == "stopped")\r
-               %bPlaying = $(%status == "playing")\r
-               %bPaused = $(%status == "paused")\r
-               %bAdv = $str.contains(" query channel "," $window.type($active) ")\r
-               %bLength = $mediaplayer.length\r
-               // play: not playing\r
-               // next & previous: always\r
-               // stop: not stopped\r
-               // pause: playing\r
-               // advertise: playing & (channel or query)\r
-               @%m_hPlay->$setenabled($(!%bPlaying))\r
-               @%m_hPause->$setenabled(%bPlaying)\r
-               @%m_hStop->$setenabled($(!%bStopped))\r
-               @%m_hOffer->$setenabled($((%bPlaying || %bPaused) && %bAdv))\r
-               @%m_hAdv->$setenabled($((%bPlaying || %bPaused) && %bAdv))\r
-               @%m_hRew->$setenabled($(%bLength && (%bPlaying || %bPaused)))\r
-               @%m_hFwd->$setenabled($(%bLength && (%bPlaying || %bPaused)))\r
-               if($mediaplayer.getshuffle)\r
-                       %pix = "twins/16x16/twins_player_random_on.png"\r
-               else\r
-                       %pix = "twins/16x16/twins_player_random_off.png"\r
-               @%m_hShuffle->$setImage(%pix)\r
-               if($mediaplayer.getrepeat)\r
-                       %pix = "twins/16x16/twins_player_repeat_on.png"\r
-               else\r
-                       %pix = "twins/16x16/twins_player_repeat_off.png"\r
-               @%m_hRepeat->$setImage(%pix)\r
-       }\r
-\r
-       configure()\r
-       {\r
-               twins::mediaplayer::configure\r
-       }\r
-\r
-       close()\r
-       {\r
-               if(!%TwinsMediaPlayer{confirmbeforequit})\r
-               {\r
-                       @$quit()\r
-                       return\r
-               }\r
-               if(!$objects.exists(%G_hTwinsMediaPlayer{quit}))\r
-                       %G_hTwinsMediaPlayer{quit} = $new(twins::mediaplayer::confirmbeforequit,$$)\r
-               %G_hTwinsMediaPlayer{quit}->$show\r
-               objects.connect %G_hTwinsMediaPlayer{quit} quit $$ quit\r
-       }\r
-       quit()\r
-       {\r
-               %TwinsMediaPlayer{laststartmode} = "off"\r
-               twins::mediaplayer::core::config::save\r
-               delete $$\r
-       }\r
-       destructor()\r
-       {\r
-               %G_hTwinsMediaPlayer{window}=\r
-\r
-       }\r
-}\r
-\r
-// Play an mrl\r
-class(twins::mediaplayer::mrldialog,dialog)\r
-{\r
-       constructor()\r
-       {\r
-\r
-               %l = $new(layout,$$)\r
-               %l->$setspacing(10)\r
-               %l->$setmargin(20)\r
-\r
-               %title = $new(label,$$)\r
-               %title->$settext(<center><b><h3>$tr("Choose a file or an Mrl to play","twinsmediaplayer")</h3></b></center><br>)\r
-               %l->$addmulticellwidget(%title,0,0,0,1)\r
-\r
-               %tracks = $new(button,$$)\r
-               %tracks->$settext($tr("Choose a file ","twinsmediaplayer"))\r
-               %l->$addmulticellwidget(%tracks,1,1,0,1)\r
-               objects.connect %tracks clicked $$ chooseFile\r
-\r
-               %lmrl = $new(label,$$)\r
-               %lmrl->$settext($tr("Play an mrl (ex.: http://..., or dvd://...):","twinsmediaplayer"))\r
-               @%m_hMrl=$new(lineedit,$$)\r
-               %vmrl=$new(button,$$)\r
-               %vmrl->$settext($tr("Ok","twinsmediaplayer"))\r
-               %l->$addmulticellwidget(%lmrl,2,2,0,1)\r
-               %l->$addwidget(@%m_hMrl,3,0)\r
-               %l->$addwidget(%vmrl,3,1)\r
-               objects.connect %vmrl clicked $$ playMrl\r
-               if ($int($version(s))<20070107){\r
-                       @%m_hMrl->$setenabled($str.equal($system.ostype,windows))\r
-                       %vmrl->$setenabled($str.equal($system.ostype,windows))\r
-               }\r
-\r
-               %close = $new(button,$$)\r
-               %close->$settext($tr(close))\r
-               %l->$addmulticellwidget(%close,5,5,0,1)\r
-               objects.connect %close clicked $$ close\r
-\r
-       }\r
-       playMrl()\r
-       {\r
-               if(!$isset(@%m_hMrl->$text))\r
-                       dialog.message($tr("Play Mrl","twinsmediaplayer"),$tr("Your Mrl is empty!","twinsmediaplayer"),warning){;}\r
-               else mediaplayer.playmrl @%m_hMrl->$text\r
-       }\r
-       chooseFile()\r
-       {\r
-               dialog.file (open,$tr("Add File",twinsmediaplayer))\r
-               {\r
-                       if($isset($0))mediaplayer.playmrl "file://$0"\r
-               }\r
-       }\r
-       close()\r
-       {\r
-               delete $$\r
-       }\r
-}\r
-\r
-// Confirm before quit\r
-class(twins::mediaplayer::confirmbeforequit,dialog)\r
-{\r
-       constructor()\r
-       {\r
-               %G_hTwinsMediaPlayer{quit} = $$\r
-               $$->$setcaption($tr("Confirm Quit",twinsmediaplayer))\r
-\r
-               %l = $new(layout,$$)\r
-               %l->$setmargin(20)\r
-               %l->$setspacing(20)\r
-\r
-               %label = $new(label,$$)\r
-               %label->$settext($tr("Do you really want to close the Twins media Player?",twinsmediaplayer))\r
-               %l->$addmulticellwidget(%label,0,0,0,1)\r
-\r
-               @%m_hRemember = $new(checkbox,$$)\r
-               @%m_hRemember->$settext($tr("Remember this choice?",twinsmediaplayer))\r
-               %l->$addmulticellwidget(@%m_hRemember,1,1,0,1)\r
-\r
-               %yes = $new(button,$$)\r
-               %yes->$settext($tr(Yes))\r
-               objects.connect %yes clicked $$ yes\r
-               %l->$addwidget(%yes,2,0)\r
-\r
-               %no = $new(button,$$)\r
-               %no->$settext($tr(no))\r
-               objects.connect %no clicked $$ no\r
-               %l->$addwidget(%no,2,1)\r
-       }\r
-       destructor()\r
-       {\r
-               %G_hTwinsMediaPlayer{quit} =\r
-       }\r
-       yes()\r
-       {\r
-               if(@%m_hRemember->$ischecked())\r
-               {\r
-                       %TwinsMediaPlayer{confirmbeforequit} = 0\r
-                       twins::mediaplayer::core::config::save\r
-               }\r
-               @$emit(quit)\r
-               delete $$\r
-       }\r
-       no()\r
-       {\r
-               if(@%m_hRemember->$ischecked())\r
-               {\r
-                       %TwinsMediaPlayer{confirmbeforequit} = 1\r
-                       twins::mediaplayer::core::config::save\r
-               }\r
-               delete $$\r
-       }\r
-}\r
-\r
-\r
-\r
-// Configuration\r
-class(twins::mediaplayer::config,dialog)\r
-{\r
-       constructor()\r
-       {\r
-               twins::mediaplayer::core::config::load\r
-\r
-               %G_hTwinsMediaPlayer{config} = $$\r
-               $$->$setcaption($tr("Twins Media Player Configuration",twinsmediaplayer))\r
-               %ll = $new(layout,$$)\r
-               %ll->$setmargin(20)\r
-               %ll->$setspacing(20)\r
-               @%m_hTabs = $new(tabwidget,$$)\r
-               %ll->$addmulticellwidget(@%m_hTabs,0,0,0,2)\r
-               %ll->$setrowstretch(0,10)\r
-\r
-               //////////// First page: advertising\r
-               %hTab{advert} = $new(widget,@%m_hTabs)\r
-               %l{advert} = $new(layout,%hTab{advert})\r
-               %l{advert}->$setmargin(10)\r
-               %l{advert}->$setspacing(20)\r
-               @%m_hTabs->$addtab(%hTab{advert},$tr("Advertising",twinsmediaplayer),"twins/16x16/twins_player_sayandshare.png")\r
-\r
-               // Selection of technical information\r
-               %techTitle = $new(label,%hTab{advert})\r
-               %techTitle->$settext($tr("Choose the technical information you want to advertise",twinsmediaplayer))\r
-               %l{advert}->$addmulticellwidget(%techTitle,0,0,0,2)\r
-               %ic = 0\r
-               %ir = 1\r
-               @%m_aTags = $array(Album,Genre,Year,Length,Bitrate,Freq)\r
-               foreach(%tag,@%m_aTags)\r
-               {\r
-                       @%m_hTag{%tag} = $new(checkbox,%hTab{advert})\r
-                       @%m_hTag{%tag}->$setchecked(%TwinsMediaPlayer{show%tag})\r
-                       @%m_hTag{%tag}->$settext($tr(%tag,twinsmediaplayer))\r
-                       objects.connect @%m_hTag{%tag} toggled $$ updateSample\r
-\r
-                       %l{advert}->$addwidget(@%m_hTag{%tag},%ir,%ic)\r
-                       %ic++\r
-                       if(%ic>2)\r
-                       {\r
-                               %ic = 0\r
-                               %ir++\r
-                       }\r
-               }\r
-\r
-               // Announcement string\r
-               %lAnnounce = $new(label,%hTab{advert})\r
-               %lAnnounce->$settext($tr("Announcement string",twinsmediaplayer))\r
-               @%m_hAnnounce = $new(lineedit,%hTab{advert})\r
-               @%m_hAnnounce->$settext(%TwinsMediaPlayer{announce})\r
-               %l{advert}->$addmulticellwidget(%lAnnounce,%ir,%ir,0,1)\r
-               %l{advert}->$addwidget(@%m_hAnnounce,%ir,2)\r
-               objects.connect @%m_hAnnounce textchanged $$ updateSample\r
-               %ir++\r
-\r
-               // Separator of technical information\r
-               %lSep = $new(label,%hTab{advert})\r
-               %lSep->$settext($tr("Separator string between tecnhical information",twinsmediaplayer))\r
-               %l{advert}->$addmulticellwidget(%lSep,%ir,%ir,0,1)\r
-               @%m_hSep = $new(lineedit,%hTab{advert})\r
-               @%m_hSep->$settext(%TwinsMediaPlayer{separator})\r
-               objects.connect @%m_hSep textchanged $$ updateSample\r
-               %l{advert}->$addwidget(@%m_hSep,%ir,2)\r
-               %ir++\r
-\r
-               // Sample\r
-               @%m_hSample = $new(label,%hTab{advert})\r
-               @%m_hSample->$setframestyle(Panel,Sunken)\r
-               @%m_hSample->$setbackgroundcolor(ffffff)\r
-               @%m_hSample->$setforegroundcolor(ff00ff)\r
-               %l{advert}->$addmulticellwidget(@%m_hSample,%ir,%ir,0,2)\r
-               @$updateSample()\r
-               %ir++\r
-\r
-               // Share timeout\r
-               %lShareTimeout = $new(label,%hTab{advert})\r
-               %lShareTimeout->$settext($tr("Timeout of file offers",twinsmediaplayer))\r
-               @%m_hShareTimeout = $new(spinbox,%hTab{advert})\r
-               @%m_hShareTimeout->$setminvalue(1)\r
-               @%m_hShareTimeout->$setmaxvalue(60)\r
-               @%m_hShareTimeout->$setsuffix(mn)\r
-               @%m_hShareTimeout->$setvalue(%TwinsMediaPlayer{sharetimeout})\r
-               %l{advert}->$addmulticellwidget(%lShareTimeout,%ir,%ir,0,1)\r
-               %l{advert}->$addwidget(@%m_hShareTimeout,%ir,2)\r
-               %ir++\r
-\r
-               // Max length of offered file names\r
-               %lFileNameLength = $new(label,%hTab{advert})\r
-               %lFileNameLength->$settext($tr("Max length of offered file names",twinsmediaplayer))\r
-               @%m_hFileNameLength = $new(spinbox,%hTab{advert})\r
-               @%m_hFileNameLength->$setminvalue(1)\r
-               @%m_hFileNameLength->$setmaxvalue(300)\r
-               @%m_hFileNameLength->$setvalue(%TwinsMediaPlayer{maxoffernamelength})\r
-               %l{advert}->$addmulticellwidget(%lFileNameLength,%ir,%ir,0,1)\r
-               %l{advert}->$addwidget(@%m_hFileNameLength,%ir,2)\r
-\r
-\r
-               //////////// Second page: look\r
-               @%m_hTab{look} = $new(widget,@%m_hTabs)\r
-               %l{look} = $new(layout,@%m_hTab{look})\r
-               %l{look}->$setmargin(10)\r
-               %l{look}->$setspacing(5)\r
-               @%m_hTabs->$addtab(@%m_hTab{look},$tr("Look",twinsmediaplayer),149)\r
-\r
-               // Colors\r
-               %g = @$addColorBox(window,$tr("Window",twinsmediaplayer))\r
-               %l{look}->$addwidget(%g,0,0)\r
-               %g = @$addColorBox(artist,$tr("Artist",twinsmediaplayer))\r
-               %l{look}->$addwidget(%g,1,0)\r
-               %g = @$addColorBox(title,$tr("Title",twinsmediaplayer))\r
-               %l{look}->$addwidget(%g,2,0)\r
-               %g = @$addColorBox(album,$tr("Album",twinsmediaplayer))\r
-               %l{look}->$addwidget(%g,2,1)\r
-\r
-               // Sample\r
-               @%m_hWindowSample = $new(textbrowser,@%m_hTab{look})\r
-               %l{look}->$addmulticellwidget(@%m_hWindowSample,0,1,1,1)\r
-               @$updateWindowSample()\r
-\r
-\r
-               //////////// Third page: the player\r
-               %hTab{player} = $new(widget,@%m_hTabs)\r
-               %l{player} = $new(layout,%hTab{player})\r
-               %l{player}->$setmargin(10)\r
-               %l{player}->$setspacing(10)\r
-               @%m_hTabs->$addtab(%hTab{player},$tr("Player",twinsmediaplayer),167)\r
-\r
-               // Choose\r
-               switch($str.lowcase($system.osname)){\r
-                       case(linux)@%m_aPlayers = $array(amarok,xmms,juk)\r
-                       case(windows)@%m_aPlayers = $array(winamp)\r
-                       default:@%m_aPlayers = $array(amarok,xmms,juk,winamp)\r
-               }\r
-               %lChoose = $new(label,%hTab{player})\r
-               %lChoose->$settext($tr("Choose your player",twinsmediaplayer))\r
-               @%m_hChoose = $new(combobox,%hTab{player})\r
-               foreach(%player,@%m_aPlayers)@%m_hChoose->$insertitem(%player)\r
-               %okChosen = $new(button,%hTab{player})\r
-               %okChosen->$settext($tr(Ok))\r
-               objects.connect %okChosen clicked $$ chosen\r
-               @$updatePlayer()\r
-\r
-               // Detect\r
-               %detect = $new(button, %hTab{player})\r
-               %detect->$settext($tr("Auto-detect",twinsmediaplayer))\r
-               objects.connect %detect  clicked $$ detect\r
-               @%m_hDetect = $new(label,%hTab{player})\r
-               @%m_hDetect->$setframestyle(Box,Sunken)\r
-\r
-               // Layout\r
-               %l{player}->$addwidget(%lChoose,0,0)\r
-               %l{player}->$addwidget(@%m_hChoose,1,0)\r
-               %l{player}->$addwidget(%okChosen,2,0)\r
-               %l{player}->$addwidget(%detect,1,1)\r
-               %l{player}->$addwidget(@%m_hDetect,2,1)\r
-               %l{player}->$setrowstretch(1,5)\r
-               %l{player}->$setrowstretch(2,5)\r
-\r
-\r
-               /////////// Last page: Start and Quit\r
-               %hTab{sq} = $new(widget,@%m_hTabs)\r
-               %l{sq} = $new(layout,%hTab{sq})\r
-               %l{sq}->$setmargin(10)\r
-               %l{sq}->$setspacing(10)\r
-               @%m_hTabs->$addtab(%hTab{sq},$tr("Start && Quit",twinsmediaplayer),145)\r
-\r
-               // Restart Group\r
-               %hStart = $new(groupbox,%hTab{sq})\r
-               %hStart->$settitle($tr("Start mode",twinsmediaplayer))\r
-               %lStart = $new(layout,%hStart)\r
-               %lStart->$setmargin(20)\r
-               %lStart->$setspacing(10)\r
-               %l{sq}->$addwidget(%hStart,0,0)\r
-               // Setup\r
-               @%m_szStartMode = %TwinsMediaPlayer{startmode}\r
-               foreach(%state,on,off,remember)\r
-               {\r
-                       @%m_hStart{%state} = $new(checkbox,%hStart)\r
-                       @%m_hStart{%state}->$setchecked($(%TwinsMediaPlayer{startmode}==%state))\r
-                       objects.connect @%m_hStart{%state} toggled $$ toggleStart%state\r
-               }\r
-               // Text\r
-               @%m_hStart{on}->$settext($tr("Always start the media player with KVIrc",twinsmediaplayer))\r
-               @%m_hStart{off}->$settext($tr("Let the user to manually start the media player",twinsmediaplayer))\r
-               @%m_hStart{remember}->$settext($tr("Remember the media player state of the last KVIrc session",twinsmediaplayer))\r
-               // Layout\r
-               %lStart->$addwidget(@%m_hStart{on},0,0)\r
-               %lStart->$addwidget(@%m_hStart{off},1,0)\r
-               %lStart->$addwidget(@%m_hStart{remember},2,0)\r
-\r
-               // Confirm before quit\r
-               @%m_hConfirm = $new(checkbox,%hTab{sq})\r
-               @%m_hConfirm->$settext($tr("Confirm before quit",twinsmediaplayer))\r
-               @%m_hConfirm->$setchecked(%TwinsMediaPlayer{confirmbeforequit})\r
-               %l{sq}->$addwidget(@%m_hConfirm,1,0)\r
-\r
-\r
-\r
-               // Ok\r
-               %ok = $new(button,$$)\r
-               %ok->$settext($tr(Ok))\r
-               objects.connect %ok clicked $$ ok\r
-               %ll->$addwidget(%ok,1,0)\r
-\r
-\r
-               // Apply\r
-               %apply = $new(button,$$)\r
-               %apply->$settext($tr(Apply))\r
-               objects.connect %apply clicked $$ apply\r
-               %ll->$addwidget(%apply,1,1)\r
-\r
-\r
-               // Close\r
-               %close = $new(button,$$)\r
-               %close->$settext($tr(Close))\r
-               objects.connect %close clicked $$ close\r
-               %ll->$addwidget(%close,1,2)\r
-\r
-       }\r
-\r
-       addColorBox($0 = name,$1 = label)\r
-       {\r
-               %g = $new(groupbox,@%m_hTab{look})\r
-               %g->$settitle($1)\r
-               %l = $new(layout,%g)\r
-               %l->$setspacing(5)\r
-               %l->$setmargin(15)\r
-\r
-               %labelfg = $new(label,%g)\r
-               %labelfg->$settext($tr("Foreground",twinsmediaplayer))\r
-\r
-               @%m_hColors{fg:$0} = $new(lineedit,%g)\r
-               @%m_hColors{fg:$0}->$settext(%TwinsMediaPlayer{color:fg:$0})\r
-               @%m_hColors{fg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))\r
-               objects.connect @%m_hColors{fg:$0} textchanged $$ updateWindowSample\r
-\r
-               %labelbg = $new(label,%g)\r
-               %labelbg->$settext($tr("Background",twinsmediaplayer))\r
-\r
-               @%m_hColors{bg:$0} = $new(lineedit,%g)\r
-               @%m_hColors{bg:$0}->$settext(%TwinsMediaPlayer{color:bg:$0})\r
-               @%m_hColors{bg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))\r
-               objects.connect @%m_hColors{bg:$0} textchanged $$ updateWindowSample\r
-\r
-               %l->$addwidget(%labelfg,0,0)\r
-               %l->$addwidget(@%m_hColors{fg:$0},0,1)\r
-               %l->$addwidget(%labelbg,1,0)\r
-               %l->$addwidget(@%m_hColors{bg:$0},1,1)\r
-\r
-               return %g\r
-       }\r
-\r
-       updateWindowSample()\r
-       {\r
-               %h = "<body bgcolor=\""@%m_hColors{bg:window}->$text()"\">"\r
-               %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"\r
-               %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:artist}->$text()"\">"\r
-               %h .= " <font color=\""@%m_hColors{fg:artist}->$text()"\" style=\"font-size:10pt;\">"<b>Radiohead</b>"</font></td></tr>"\r
-               %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:title}->$text()"\">"\r
-               %h .= " <font color=\""@%m_hColors{fg:title}->$text()"\" style=\"font-size:12pt;\"><b>"<i>Pyramid Song</i>"</b></font></td></tr>"\r
-               %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:album}->$text()"\">"\r
-               %h .= " <font color=\""@%m_hColors{fg:album}->$text()"\" style=\"font-size:9pt;\">"Amnesiac"</font></td></tr>"\r
-               %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Genre:",twinsmediaplayer)"</font></th>"\r
-               %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">Brit Pop</font></td></tr>"\r
-               %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Length:",twinsmediaplayer)"</font></th>"\r
-               %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">04m49s</font></td></tr>"\r
-               %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Bitrate:",twinsmediaplayer)"</font></th>"\r
-               %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">128 Kbit/s</font></td></tr>"\r
-               %h .= "</table></font></body></html>"\r
-\r
-               @%m_hWindowSample->$setText(%h)\r
-\r
-       }\r
-\r
-       updateSample()\r
-       {\r
-               if($ic&&$isset($me))%nick=$me\r
-               else %nick=My_Nick\r
-               %s = "* %nick "@%m_hAnnounce->$text()" Radiohead - Pyramid song"\r
-               if(@%m_hTag{album}->$ischecked)%s << "(Amnesiac)"\r
-               if(@%m_hTag{genre}->$ischecked) %t <+ Rock\r
-               if(@%m_hTag{year}->$ischecked) %t <+ 2001\r
-               if(@%m_hTag{length}->$ischecked) %t <+ "04m49s"\r
-               if(@%m_hTag{bitrate}->$ischecked) %t <+ "128Kbit/s"\r
-               if(@%m_hTag{freq}->$ischecked) %t <+ "44kHz"\r
-               if($isset(%t)) %s << "["$str.join(@%m_hSep->$text,%t)"]"\r
-               %s = $str.replace(%s,"&lt;","<")\r
-               %s = $str.replace(%s,"&gt;",">")\r
-               @%m_hSample->$settext("<font size=-1>%s</font>")\r
-       }\r
-\r
-       detect()\r
-       {\r
-               mediaplayer.detect\r
-               %result = $mediaplayer.player\r
-               if($str.isempty(%result))%result = $tr("none",twinsmediaplayer)\r
-               @%m_hDetect->$settext($tr("Found:",twinsmediaplayer) %result)\r
-               @$updatePlayer()\r
-       }\r
-\r
-       updatePlayer()\r
-       {\r
-               if(!$isset($mediaplayer.player))return\r
-               %i=0\r
-               foreach(%player,@%m_aPlayers)\r
-               {\r
-                       if($str.equal($mediaplayer.player,@%m_hChoose->$textat(%i)))\r
-                       {\r
-                               @%m_hChoose->$setcurrentitem(%i)\r
-                               return\r
-                       }\r
-                       %i++\r
-               }\r
-       }\r
-\r
-       chosen()\r
-       {\r
-               mediaplayer.setPlayer @%m_hChoose->$current()\r
-       }\r
-\r
-       toggleStartOn()\r
-       {\r
-               @$toggleStart(on)\r
-       }\r
-\r
-       toggleStartOff()\r
-       {\r
-               @$toggleStart(off)\r
-       }\r
-\r
-       toggleStartRemember()\r
-       {\r
-               @$toggleStart(remember)\r
-       }\r
-       toggleStart($0 = state type)\r
-       {\r
-               if($0 == @%m_szStartMode)\r
-               {\r
-                       @%m_hStart{$0}->$setchecked(1)\r
-               } elseif(@%m_hStart{$0}->$ischecked)\r
-               {\r
-                               %old = @%m_szStartMode\r
-                               @%m_szStartMode = $0\r
-                               @%m_hStart{%old}->$setchecked(0)\r
-               }\r
-       }\r
-       ok()\r
-       {\r
-               @$apply()\r
-               @$close()\r
-       }\r
-\r
-       apply()\r
-       {\r
-               %TwinsMediaPlayer{sharetimeout} = @%m_hShareTimeout->$value()\r
-               %TwinsMediaPlayer{confirmbeforequit} = @%m_hConfirm->$ischecked()\r
-               %TwinsMediaPlayer{separator} = @%m_hSep->$text()\r
-               %TwinsMediaPlayer{announce} = @%m_hAnnounce->$text()\r
-\r
-               foreach(%tag,@%m_aTags)\r
-                       %TwinsMediaPlayer{show%tag} = @%m_hTag{%tag}->$ischecked()\r
-\r
-               foreach(%tag,window,artist,title,album)\r
-               foreach(%bg,fg,bg)\r
-               %TwinsMediaPlayer{color:%bg:%tag} = @%m_hColors{%bg:%tag}->$text()\r
-\r
-               if($isset(@%m_hChoose->$current()))\r
-                       mediaplayer.setPlayer @%m_hChoose->$current()\r
-\r
-               foreach(%state,on,off,remember)\r
-               if(@%m_hStart{%state}->$ischecked())\r
-               {\r
-                       %TwinsMediaPlayer{startmode} = %state\r
-                       break\r
-               }\r
-\r
-               twins::mediaplayer::core::config::save\r
-\r
-               // Update the player look now\r
-               if($objects.exists(%G_hTwinsMediaPlayer{window}))\r
-                       %G_hTwinsMediaPlayer{window}->$updateWindow(1)\r
-       }\r
-\r
-       close()\r
-       {\r
-               delete $$\r
-       }\r
-\r
-       destructor()\r
-       {\r
-               %G_hTwinsMediaPlayer{config} =\r
-       }\r
-}\r
-\r
-\r
-/*\r
-twins::admin::reguninstall --class=$array(twins::mediaplayer::window,\\r
-       twins::mediaplayer::confirmbeforequit,\\r
-       twins::mediaplayer::config,twins::mediaplayer::mrldialog)\r
-*/\r
-\r
-\r
-\r
-\r
-\r
-\r
-\r
+# Hack for the xgettext: this code will never be executed, but will be added to the translation file
+if(0)
+{
+       #Year,Genre,Length,Frequency,Bitrate
+       $tr("Year",twinsmediaplayer)
+       $tr("Genre",twinsmediaplayer)
+       $tr("Length",twinsmediaplayer)
+       $tr("Frequency",twinsmediaplayer)
+       $tr("Bitrate",twinsmediaplayer)
+       $tr("Freq",twinsmediaplayer)
+       $tr("unknown",twinsmediaplayer)
+       $tr("stopped",twinsmediaplayer)
+       $tr("playing",twinsmediaplayer)
+       $tr("paused",twinsmediaplayer)
+}
+
+class(twins::mediaplayer::window,dockwindow)
+{
+
+       createToolButton($0 = $image)
+        {
+               %tb = $new(toolbutton,@%m_hContainer)
+                %tb->$setImage($0)
+                %tb->$setUsesBigPixmap($false)
+                %tb->$setUsesTextLabel($false)
+                %tb->$setAutoRaise($true)
+                %tb->$setMaximumWidth(24)
+                %tb->$setMaximumHeight(24)
+                return %tb
+        }
+
+       constructor()
+       {
+
+               twins::mediaplayer::core::config::load
+               %TwinsMediaPlayer{laststartmode} = "on"
+               twins::mediaplayer::core::config::save
+
+               %G_hTwinsMediaPlayer{window} = $$
+               $$->$setCaption($str.printf($tr("Twins MediaPlayer-?s",twinsmediaplayer),$addon.version(twinsmediaplayer)))
+
+               @$setAllowedDockAreas("lrfm")
+               @$setResizeEnabled($true)
+
+               @%m_hContainer = $new(widget,$this)
+               %l = $new(layout,@%m_hContainer)
+
+               // Information
+               @%m_hTextBrowser = $new(textbrowser,@%m_hContainer)
+               %l->$addMultiCellWidget(@%m_hTextBrowser,0,0,0,6)
+
+
+               // ** newline **
+
+
+               // Back
+               @%m_hBack = $$->$createToolButton("twins/16x16/twins_player_back.png")
+               @%m_hBack->$settooltip($tr("Previous track","twinsmediaplayer"))
+               %l->$addWidget(@%m_hBack,1,0)
+               objects.connect @%m_hBack clicked $$ previous
+
+               // Rewind
+               @%m_hRew = $$->$createToolButton("twins/16x16/twins_player_rewind.png")
+               @%m_hRew->$settooltip($tr("Rewind","twinsmediaplayer"))
+               %l->$addWidget(@%m_hRew,1,1)
+               objects.connect @%m_hRew clicked $$ rew
+
+               // Stop
+               @%m_hStop = $$->$createToolButton("twins/16x16/twins_player_stop.png")
+               @%m_hStop->$settooltip($tr("Stop","twinsmediaplayer"))
+               %l->$addWidget(@%m_hStop,1,2)
+               objects.connect @%m_hStop clicked $$ stop
+
+               // Pause
+               @%m_hPause = $$->$createToolButton("twins/16x16/twins_player_pause.png")
+               @%m_hPause->$settooltip($tr("Pause","twinsmediaplayer"))
+               %l->$addWidget(@%m_hPause,1,3)
+               objects.connect @%m_hPause clicked $$ pause
+
+               // Play
+               @%m_hPlay = $$->$createToolButton("twins/16x16/twins_player_play.png")
+               @%m_hPlay->$settooltip($tr("Play","twinsmediaplayer"))
+               %l->$addWidget(@%m_hPlay,1,4)
+               objects.connect @%m_hPlay clicked $$ play
+
+               // Fast forward
+               @%m_hFwd = $$->$createToolButton("twins/16x16/twins_player_fastforward.png")
+               @%m_hFwd->$settooltip($tr("Fast forward","twinsmediaplayer"))
+               %l->$addWidget(@%m_hFwd,1,5)
+               objects.connect @%m_hFwd clicked $$ fwd
+
+               // Next
+               @%m_hNext = $$->$createToolButton("twins/16x16/twins_player_next.png")
+               @%m_hNext->$settooltip($tr("Next track","twinsmediaplayer"))
+               %l->$addWidget(@%m_hNext,1,6)
+               objects.connect @%m_hNext clicked $$ next
+
+
+               // ** newline **
+
+
+               // Time slider
+               @%m_hTime = $new(slider,@%m_hContainer)
+               @%m_hTime->%step=4
+               @%m_hTime->$setpagestep(@%m_hTime->%step)
+               @%m_hTime->$settracking(0)
+               @%m_hTime->$setorientation("Horizontal")
+               @%m_hTime->$setvalue($($mediaplayer.position / 1000))
+               %l->$addmulticellWidget(@%m_hTime,2,2,0,1)
+
+               // Time label
+               @%m_hTimeLabel = $new(label,@%m_hContainer)
+               @%m_hTimeLabel->$setfont(8,courrier,fixedpitch)
+               @%m_hTimeLabel->$setalignment(Right)
+               @%m_hTimeLabel->$setframestyle(Panel,Sunken)
+               @%m_hTimeLabel->$setmaximumheight(18)
+               %l->$addmulticellWidget(@%m_hTimeLabel,2,2,2,3)
+
+               // Shuffle
+               if($mediaplayer.getshuffle)
+                       %pix = "twins/16x16/twins_player_random_on.png"
+               else
+                       %pix = "twins/16x16/twins_player_random_off.png"
+               @%m_hShuffle = $$->$createToolButton(%pix)
+               @%m_hShuffle->$settooltip($tr("Shuffle","twinsmediaplayer"))
+               %l->$addWidget(@%m_hShuffle,2,4)
+               objects.connect @%m_hShuffle clicked $$ shuffle
+
+               // Repeat
+               if($mediaplayer.getrepeat)
+                       %pix = "twins/16x16/twins_player_repeat_on.png"
+               else
+                       %pix = "twins/16x16/twins_player_repeat_off.png"
+               @%m_hRepeat = $$->$createToolButton(%pix)
+               @%m_hRepeat->$settooltip($tr("Repeat current track","twinsmediaplayer"))
+               %l->$addWidget(@%m_hRepeat,2,5)
+               objects.connect @%m_hRepeat clicked $$ repeat
+
+               // Advertise
+               @%m_hAdv = $$->$createToolButton("twins/16x16/twins_player_say.png")
+               @%m_hAdv->$settooltip($tr("Advertise the current track on a channel or in a query","twinsmediaplayer"))
+               %l->$addWidget(@%m_hadv,2,6)
+               objects.connect @%m_hAdv clicked $$ advertise
+
+
+               // ** Newline **
+
+
+               // Configure
+               @%m_hConfig = $$->$createToolButton("twins/16x16/twins_player_configure.png")
+               @%m_hConfig->$settooltip($tr("Configure the media player","twinsmediaplayer"))
+               %l->$addWidget(@%m_hConfig,3,0)
+               objects.connect @%m_hConfig clicked $$ configure
+
+               // Volume slider
+               @%m_hVol = $new(slider,@%m_hContainer)
+               @%m_hVol->$settooltip($tr("Volume control","twinsmediaplayer"))
+               @%m_hVol->$setorientation("Horizontal")
+               @%m_hVol->$setminvalue(0)
+               @%m_hVol->$setmaxvalue(100)
+               @%m_hVol->%step=5
+               @%m_hVol->$setpagestep(@%m_hVol->%step)
+               @%m_hVol->$settracking(1)
+               @%m_hVol->$setTickInterval(10)
+               @%m_hVol->$setvalue($($mediaplayer.getvol * 100 / 255))
+               %l->$addmulticellWidget(@%m_hVol,3,3,1,2)
+               objects.connect @%m_hVol valueChanged $$ setVol
+
+               // Volume label
+               @%m_hVolLabel = $new(label,@%m_hContainer)
+               @%m_hVolLabel->$setfont(8,courrier,fixedpitch)
+               @%m_hVolLabel->$setalignment(Right)
+               @%m_hVolLabel->$settooltip($tr("Current volume","twinsmediaplayer"))
+//             @%m_hVolLabel->$setframestyle(Panel,Sunken)
+               @%m_hVolLabel->$setmaximumheight(18)
+               %l->$addWidget(@%m_hVolLabel,3,3)
+
+               // Volume icon
+               %hVol = $$->$createToolButton("twins/16x16/twins_player_volume.png")
+               %hVol->$settooltip($tr("Volume","twinsmediaplayer"))
+               %l->$addWidget(%hVol,3,4)
+
+               // Add to playlist
+               @%m_hPL = $$->$createToolButton("twins/16x16/twins_player_playlist.png")
+               @%m_hPL->$settooltip($tr("Open url or add files to playlist","twinsmediaplayer"))
+               %l->$addWidget(@%m_hPL,3,5)
+               objects.connect @%m_hPL clicked $$ playMrl
+
+               // Offer
+               @%m_hOffer = $$->$createToolButton("twins/16x16/twins_player_sayandshare.png")
+               @%m_hOffer->$settooltip($tr("Advertise and <i>offer</i> the current track on a channel or in a query","twinsmediaplayer"))
+               %l->$addWidget(@%m_hOffer,3,6)
+               objects.connect @%m_hOffer clicked $$ offer
+
+
+               // ** Newline **
+
+
+               // Close
+               @%m_hClose = $$->$createToolButton("twins/16x16/twins_player_close.png")
+               @%m_hClose->$settooltip($tr("Close the media player","twinsmediaplayer"))
+               %l->$addWidget(@%m_hClose,4,0)
+               objects.connect @%m_hClose clicked $$ close
+
+               // Show player
+               %show = @$createToolButton("twins/16x16/twins_player_show.png")
+               %show->$settooltip($tr("Show the player","twinsmediaplayer"))
+               %l->$addWidget(%show,4,1)
+               objects.connect %show clicked $$ showPlayer
+
+               // Hide player
+               %hide = @$createToolButton("twins/16x16/twins_player_hide.png")
+               %hide->$settooltip($tr("Hide the player","twinsmediaplayer"))
+               %l->$addWidget(%hide,4,2)
+               objects.connect %hide clicked $$ hidePlayer
+
+               // Status
+               @%m_hStatus = $new(label,@%m_hContainer)
+//             @%m_hStatus->$setfont(8,courrier,fixedpitch)
+               @%m_hVolLabel->$setalignment(Right)
+               %l->$addmulticellwidget(@%m_hStatus,4,4,3,6)
+
+
+               @$addWidget(@%m_hContainer)
+
+               @$displaystatus
+               @$checkbuttons()
+
+               @$timerEvent()
+               @$starttimer($(2000))
+
+       }
+
+       showPlayer()
+       {
+               mediaplayer.show -q
+       }
+
+       hidePlayer()
+       {
+               mediaplayer.hide -q
+       }
+
+       timerEvent()
+       {
+               // Update status
+               @$displaystatus()
+
+               // Update volume
+               @$updateVol(1)
+
+               // Update time position
+               @$updateTime
+
+               // Check button status
+               @$checkbuttons()
+
+               // Display information in main window and update time slider length
+               @$updateWindow(0)
+       }
+
+       updateVol($1 = do not send to player)
+       {
+               %iVol = $($mediaplayer.getvol * 100 / 255)
+               if(%iVol<0 || %iVol>100){
+                       @%m_hVol->$setValue(50)
+                       @%m_hVolLabel->$settext("---\%")
+               } else {
+                       if($math.abs($(%iVol-@%m_hVol->$value))>=@%m_hVol->%step)
+                               @%m_hVol->$setValue(%iVol)
+                       if(%iVol<10)
+                               %iVol="  %iVol"
+                       elseif(%iVol<100)
+                               %iVol=" %iVol"
+                       @%m_hVolLabel->$settext("%iVol\%")
+               }
+       }
+
+       setVol()
+       {
+               if($mediaplayer.status != "unknown"){
+                       mediaplayer.setvol -q $(@%m_hVol->$value * 255 / 100)
+                       @$updateVol()
+               }
+       }
+
+       updateWindow($0 = force update?)
+       {
+               if(!$0)
+               {
+                       // * shunt normal file
+                       if( $mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl)
+                               return
+                       // * shunt flux
+                       elseif( !$mediaplayer.localfile && @%m_hOldSource == $mediaplayer.mrl && \
+                               @%m_hOldPlay == $mediaplayer.nowplaying ) return
+               }
+               @%m_hOldSource = $mediaplayer.mrl
+               @%m_hOldPlay = $mediaplayer.nowplaying
+               // * ok do it if playing
+               if($str.contains(" unknown stopped "," $mediaplayer.status "))
+               {
+                       %h = "<html><title>$0</title>"
+                       %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"
+                       %h .= $tr("No track being played",twinsmediaplayer)
+                       %h .= "</body></html>"
+                       @%m_hTextBrowser->$setText(%h)
+                       @%m_hOldSource = ""
+                       @%m_hOldPlay = ""
+               } else {
+                       %info = @$getinfo
+                       @$display(%info{title},%info{artist},%info{album},@$getTech(%info,html))
+                       @%m_hTime->$setmaxvalue($($mediaplayer.length / 1000))
+                       @%m_hTime->$settickinterval($(@%m_hTime->$maxvalue / 4))
+               }
+       }
+
+       updateTime($0 = time)
+       {
+               if(!@%m_hTime->$maxvalue || $str.contains(" unknown stopped "," $mediaplayer.status "))
+               {
+                       @%m_hTimeLabel->$settext("--:--:--")
+                       @%m_hTime->$setvalue(0)
+                       return
+               }
+               if($isset($0))
+                       %iTime = $0
+               else
+                       %iTime = $mediaplayer.position
+               @%m_hTime->$setvalue($(%iTime / 1000))
+               @%m_hTimeLabel->$settext(@$formatTime(%iTime))
+       }
+
+       rew()
+       {
+               if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){
+                       %iPos = $($mediaplayer.position - 5000)
+                       if(%iPos < 0) %iPos = 0
+                       mediaplayer.jumpto -q %iPos
+                       @$updateTime(%iPos)
+               }
+       }
+
+       fwd()
+       {
+               if(!$str.contains(" unknown stopped "," $mediaplayer.status ")){
+                       %iPos = $($mediaplayer.position + 5000)
+                       if(%iPos > $mediaplayer.length) %iPos = $mediaplayer.length
+                       mediaplayer.jumpto -q %iPos
+                       @$updateTime(%iPos)
+               }
+       }
+
+       formatTime($0 = time in ms)
+       {
+               if($str.isunsignednumber($0))
+               {
+                       %lh = $($0 / 3600000)
+                       %lm = $(($0 % 3600000) / 60000)
+                       %ls = $(($0 % 60000) / 1000)
+                       if(%lh > 0)%r .= %lh"h"
+                       if(%lm < 10)%r .= "0"%lm"m"
+                       else %r .= %lm"m"
+                       if(%ls < 10)%r .= "0"%ls\s
+                       else %r .= %ls\s
+                       return %r
+               }
+       }
+
+       playMrl()
+       {
+               if(!$objects.exists(%G_hTwinsMediaPlayer{playmrl}))
+                       %G_hTwinsMediaPlayer{playmrl} = $new(twins::mediaplayer::mrldialog,$$)
+               %G_hTwinsMediaPlayer{playmrl}->$show
+       }
+
+       offer()
+       {
+               @$advertise(1)
+       }
+
+       advertise($0 = offer?)
+       {
+               %w = $active
+               %info = @$getinfo
+               if($isset(%info{artist})) %s << "%info{artist} -"
+               %s << %info{title}
+               if(%TwinsMediaPlayer{showalbum}&&%info{album}) %s << " (%info{album})"
+               if($0)
+               {
+                       %file = $mediaplayer.localfile
+                       if(!%file) %share=$mediaplayer.mrl
+                       else
+                       {
+                               if(!$isset(%TwinsMediaPlayer.sharecount))
+                                       %TwinsMediaPlayer.sharecount=1
+                               %nowplaying=$mediaplayer.nowplaying
+                               for(%i=0;%i<%TwinsMediaPlayer{maxoffernamelength};%i++)
+                               {
+                                       if(%i==$str.length(%nowplaying))break
+                                       %c=$str.mid(%nowplaying,%i,1)
+                                       if($str.contains("()[]  ",%c))%c="_"
+                                       %name .= %c
+                               }
+                               %name .= _%TwinsMediaPlayer.sharecount
+                               %TwinsMediaPlayer.sharecount++
+                               sharedfile.add -t=$(%TwinsMediaPlayer{sharetimeout} * 60) -n=%name %file
+                               %size = $file.size(%file)
+                               %onemeg = $(1024 * 1024)
+                               if(%size > %onemeg)
+                               {
+                                       %mb = $(%size / %onemeg)
+                                       %rest = $((%size % %onemeg) / 10240)
+                                       %size = %mb"."$(%rest / 10)$(%rest % 10)"Mb"
+                               } else {
+                                       %size = %size"bytes"
+                               }
+
+                               %share = "$b/ctcp $me xdcc get %name$b (%size)"
+                       }
+                       %s .= @$gettech(%info,linear,%share)
+               } else %s .= @$gettech(%info,linear)
+               me -r=%w %TwinsMediaPlayer{announce} %s
+       }
+
+       getInfo()
+       {
+               %r{artist} = $mediaplayer.artist
+               %r{title} = $mediaplayer.title
+               if(%r{artist} == "" || %r{title} == "")
+               {
+                       %r{artist} =
+                       %r{title} = $mediaplayer.nowplaying
+               }
+               %r{album} = $mediaplayer.album
+               if($str.equal(%r{album},"Other"))%r{album} =
+               %length = $mediaplayer.length
+               if(%length) %r{length} = @$formatTime(%length)
+               %r{year} = $mediaplayer.year
+               if(%r{year}=="0")%r{year}=
+               %bitrate = $mediaplayer.bitrate
+               if($str.isunsignednumber(%bitrate)) %r{bitrate} = "%bitrate Kbit/s"
+               %freq = $mediaplayer.samplerate
+               if($str.isunsignednumber(%freq)) %r{frequency} = "$(%freq / 1000) kHz"
+               %r{file} = $mediaplayer.localfile
+               %r{genre} = $mediaplayer.genre
+               if($str.containsnocase(" other unknown "," %r{genre} "))%r{genre}=
+
+               return %r
+       }
+
+
+       display($0 = title and big header, $1 = top header,$2 = bottom header,$3 = technical informations)
+       {
+               %h = "<html><title>$0</title>"
+//             %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\" text=\""%TwinsMediaPlayer{color:fg:window}"\">"
+               %h .= "<body bgcolor=\""%TwinsMediaPlayer{color:bg:window}"\">"
+               %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"
+               if($1)%h .=  "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:artist}"\"><font color=\""%TwinsMediaPlayer{color:fg:artist}"\" style=\"font-size:10pt;\">"<b>$1</b>"</font></td></tr>"
+               %h .=  "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:title}"\"><font color=\""%TwinsMediaPlayer{color:fg:title}"\" style=\"font-size:12pt;\"><b>"<i>$0</i>"</b></font></td></tr>"
+               if($2)%h .= "<tr><td colspan=2 bgcolor=\""%TwinsMediaPlayer{color:bg:album}"\"><font color=\""%TwinsMediaPlayer{color:fg:album}"\" style=\"font-size:9pt;\">"$2"</font></td></tr>"
+               if($3)%h .= $3
+               %h .= "</table>"
+               %h .= "</body></html>"
+
+               @%m_hTextBrowser->$setText(%h)
+       }
+
+       getTech($0 = hash of info,$1 = "html" or "linear",$2 = string to insert at the end)
+       {
+               %lTags = $array(Year,Genre,Length,Frequency,Bitrate)
+               foreach(%tag,year,genre,length,freq,bitrate)
+               if($isset($0{%tag}))
+               {
+                       if($1 == "html")
+                       {
+                               %tag = $str.upcase($str.left(%tag,1))$str.right(%tag,$($str.len(%tag)-1))
+                               %h .= "<tr><th><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">%tag:</font></th>"
+                               %h .= "<td><font color=\""%TwinsMediaPlayer{color:fg:window}"\" style=\"font-size:8pt;\">$0{%tag}</font></td></tr>"
+                       } elseif(%TwinsMediaPlayer{show%tag})%hh <+ $str.replace($0{%tag},""," ")
+               }
+               if($1 == "linear")
+               {
+                       if($2)%hh <+ $2
+                       if($isset(%hh))%h = " ["$str.join(%TwinsMediaPlayer{separator},%hh)"]"
+               }
+               return %h
+       }
+
+       displayStatus()
+       {
+               @%m_hStatus->$settext($tr("Status:",twinsmediaplayer)" $tr($mediaplayer.status,twinsmediaplayer)")
+       }
+
+       play()
+       {
+               mediaplayer.play
+       }
+
+       stop()
+       {
+               mediaplayer.stop
+       }
+
+       pause()
+       {
+               mediaplayer.pause
+       }
+
+       previous()
+       {
+               mediaplayer.prev
+       }
+
+       next()
+       {
+               mediaplayer.next
+       }
+
+       repeat()
+       {
+               mediaplayer.setRepeat $(1-$mediaplayer.getrepeat)
+               @$checkButtons
+       }
+
+       shuffle()
+       {
+               mediaplayer.setShuffle $(1-$mediaplayer.getshuffle)
+               @$checkButtons
+       }
+
+       checkButtons()
+       {
+               %status = $mediaplayer.status
+               %bUnknown = $(%status == "unknown")
+               %bStopped = $(%status == "stopped")
+               %bPlaying = $(%status == "playing")
+               %bPaused = $(%status == "paused")
+               %bAdv = $str.contains(" query channel "," $window.type($active) ")
+               %bLength = $mediaplayer.length
+               // play: not playing
+               // next & previous: always
+               // stop: not stopped
+               // pause: playing
+               // advertise: playing & (channel or query)
+               @%m_hPlay->$setenabled($(!%bPlaying))
+               @%m_hPause->$setenabled(%bPlaying)
+               @%m_hStop->$setenabled($(!%bStopped))
+               @%m_hOffer->$setenabled($((%bPlaying || %bPaused) && %bAdv))
+               @%m_hAdv->$setenabled($((%bPlaying || %bPaused) && %bAdv))
+               @%m_hRew->$setenabled($(%bLength && (%bPlaying || %bPaused)))
+               @%m_hFwd->$setenabled($(%bLength && (%bPlaying || %bPaused)))
+               if($mediaplayer.getshuffle)
+                       %pix = "twins/16x16/twins_player_random_on.png"
+               else
+                       %pix = "twins/16x16/twins_player_random_off.png"
+               @%m_hShuffle->$setImage(%pix)
+               if($mediaplayer.getrepeat)
+                       %pix = "twins/16x16/twins_player_repeat_on.png"
+               else
+                       %pix = "twins/16x16/twins_player_repeat_off.png"
+               @%m_hRepeat->$setImage(%pix)
+       }
+
+       configure()
+       {
+               twins::mediaplayer::configure
+       }
+
+       close()
+       {
+               if(!%TwinsMediaPlayer{confirmbeforequit})
+               {
+                       @$quit()
+                       return
+               }
+               if(!$objects.exists(%G_hTwinsMediaPlayer{quit}))
+                       %G_hTwinsMediaPlayer{quit} = $new(twins::mediaplayer::confirmbeforequit,$$)
+               %G_hTwinsMediaPlayer{quit}->$show
+               objects.connect %G_hTwinsMediaPlayer{quit} quit $$ quit
+       }
+       quit()
+       {
+               %TwinsMediaPlayer{laststartmode} = "off"
+               twins::mediaplayer::core::config::save
+               delete $$
+       }
+       destructor()
+       {
+               %G_hTwinsMediaPlayer{window}=
+
+       }
+}
+
+// Play an mrl
+class(twins::mediaplayer::mrldialog,dialog)
+{
+       constructor()
+       {
+
+               %l = $new(layout,$$)
+               %l->$setspacing(10)
+               %l->$setmargin(20)
+
+               %title = $new(label,$$)
+               %title->$settext(<center><b><h3>$tr("Choose a file or an Mrl to play","twinsmediaplayer")</h3></b></center><br>)
+               %l->$addmulticellwidget(%title,0,0,0,1)
+
+               %tracks = $new(button,$$)
+               %tracks->$settext($tr("Choose a file ","twinsmediaplayer"))
+               %l->$addmulticellwidget(%tracks,1,1,0,1)
+               objects.connect %tracks clicked $$ chooseFile
+
+               %lmrl = $new(label,$$)
+               %lmrl->$settext($tr("Play an mrl (ex.: http://..., or dvd://...):","twinsmediaplayer"))
+               @%m_hMrl=$new(lineedit,$$)
+               %vmrl=$new(button,$$)
+               %vmrl->$settext($tr("Ok","twinsmediaplayer"))
+               %l->$addmulticellwidget(%lmrl,2,2,0,1)
+               %l->$addwidget(@%m_hMrl,3,0)
+               %l->$addwidget(%vmrl,3,1)
+               objects.connect %vmrl clicked $$ playMrl
+               if ($int($version(s))<20070107){
+                       @%m_hMrl->$setenabled($str.equal($system.ostype,windows))
+                       %vmrl->$setenabled($str.equal($system.ostype,windows))
+               }
+
+               %close = $new(button,$$)
+               %close->$settext($tr(close))
+               %l->$addmulticellwidget(%close,5,5,0,1)
+               objects.connect %close clicked $$ close
+
+       }
+       playMrl()
+       {
+               if(!$isset(@%m_hMrl->$text))
+                       dialog.message($tr("Play Mrl","twinsmediaplayer"),$tr("Your Mrl is empty!","twinsmediaplayer"),warning){;}
+               else mediaplayer.playmrl @%m_hMrl->$text
+       }
+       chooseFile()
+       {
+               dialog.file (open,$tr("Add File",twinsmediaplayer))
+               {
+                       if($isset($0))mediaplayer.playmrl "file://$0"
+               }
+       }
+       close()
+       {
+               delete $$
+       }
+}
+
+// Confirm before quit
+class(twins::mediaplayer::confirmbeforequit,dialog)
+{
+       constructor()
+       {
+               %G_hTwinsMediaPlayer{quit} = $$
+               $$->$setcaption($tr("Confirm Quit",twinsmediaplayer))
+
+               %l = $new(layout,$$)
+               %l->$setmargin(20)
+               %l->$setspacing(20)
+
+               %label = $new(label,$$)
+               %label->$settext($tr("Do you really want to close the Twins media Player?",twinsmediaplayer))
+               %l->$addmulticellwidget(%label,0,0,0,1)
+
+               @%m_hRemember = $new(checkbox,$$)
+               @%m_hRemember->$settext($tr("Remember this choice?",twinsmediaplayer))
+               %l->$addmulticellwidget(@%m_hRemember,1,1,0,1)
+
+               %yes = $new(button,$$)
+               %yes->$settext($tr(Yes))
+               objects.connect %yes clicked $$ yes
+               %l->$addwidget(%yes,2,0)
+
+               %no = $new(button,$$)
+               %no->$settext($tr(no))
+               objects.connect %no clicked $$ no
+               %l->$addwidget(%no,2,1)
+       }
+       destructor()
+       {
+               %G_hTwinsMediaPlayer{quit} =
+       }
+       yes()
+       {
+               if(@%m_hRemember->$ischecked())
+               {
+                       %TwinsMediaPlayer{confirmbeforequit} = 0
+                       twins::mediaplayer::core::config::save
+               }
+               @$emit(quit)
+               delete $$
+       }
+       no()
+       {
+               if(@%m_hRemember->$ischecked())
+               {
+                       %TwinsMediaPlayer{confirmbeforequit} = 1
+                       twins::mediaplayer::core::config::save
+               }
+               delete $$
+       }
+}
+
+
+
+// Configuration
+class(twins::mediaplayer::config,dialog)
+{
+       constructor()
+       {
+               twins::mediaplayer::core::config::load
+
+               %G_hTwinsMediaPlayer{config} = $$
+               $$->$setcaption($tr("Twins Media Player Configuration",twinsmediaplayer))
+               %ll = $new(layout,$$)
+               %ll->$setmargin(20)
+               %ll->$setspacing(20)
+               @%m_hTabs = $new(tabwidget,$$)
+               %ll->$addmulticellwidget(@%m_hTabs,0,0,0,2)
+               %ll->$setrowstretch(0,10)
+
+               //////////// First page: advertising
+               %hTab{advert} = $new(widget,@%m_hTabs)
+               %l{advert} = $new(layout,%hTab{advert})
+               %l{advert}->$setmargin(10)
+               %l{advert}->$setspacing(20)
+               @%m_hTabs->$addtab(%hTab{advert},$tr("Advertising",twinsmediaplayer),"twins/16x16/twins_player_sayandshare.png")
+
+               // Selection of technical information
+               %techTitle = $new(label,%hTab{advert})
+               %techTitle->$settext($tr("Choose the technical information you want to advertise",twinsmediaplayer))
+               %l{advert}->$addmulticellwidget(%techTitle,0,0,0,2)
+               %ic = 0
+               %ir = 1
+               @%m_aTags = $array(Album,Genre,Year,Length,Bitrate,Freq)
+               foreach(%tag,@%m_aTags)
+               {
+                       @%m_hTag{%tag} = $new(checkbox,%hTab{advert})
+                       @%m_hTag{%tag}->$setchecked(%TwinsMediaPlayer{show%tag})
+                       @%m_hTag{%tag}->$settext($tr(%tag,twinsmediaplayer))
+                       objects.connect @%m_hTag{%tag} toggled $$ updateSample
+
+                       %l{advert}->$addwidget(@%m_hTag{%tag},%ir,%ic)
+                       %ic++
+                       if(%ic>2)
+                       {
+                               %ic = 0
+                               %ir++
+                       }
+               }
+
+               // Announcement string
+               %lAnnounce = $new(label,%hTab{advert})
+               %lAnnounce->$settext($tr("Announcement string",twinsmediaplayer))
+               @%m_hAnnounce = $new(lineedit,%hTab{advert})
+               @%m_hAnnounce->$settext(%TwinsMediaPlayer{announce})
+               %l{advert}->$addmulticellwidget(%lAnnounce,%ir,%ir,0,1)
+               %l{advert}->$addwidget(@%m_hAnnounce,%ir,2)
+               objects.connect @%m_hAnnounce textchanged $$ updateSample
+               %ir++
+
+               // Separator of technical information
+               %lSep = $new(label,%hTab{advert})
+               %lSep->$settext($tr("Separator string between tecnhical information",twinsmediaplayer))
+               %l{advert}->$addmulticellwidget(%lSep,%ir,%ir,0,1)
+               @%m_hSep = $new(lineedit,%hTab{advert})
+               @%m_hSep->$settext(%TwinsMediaPlayer{separator})
+               objects.connect @%m_hSep textchanged $$ updateSample
+               %l{advert}->$addwidget(@%m_hSep,%ir,2)
+               %ir++
+
+               // Sample
+               @%m_hSample = $new(label,%hTab{advert})
+               @%m_hSample->$setframestyle(Panel,Sunken)
+               @%m_hSample->$setbackgroundcolor(ffffff)
+               @%m_hSample->$setforegroundcolor(ff00ff)
+               %l{advert}->$addmulticellwidget(@%m_hSample,%ir,%ir,0,2)
+               @$updateSample()
+               %ir++
+
+               // Share timeout
+               %lShareTimeout = $new(label,%hTab{advert})
+               %lShareTimeout->$settext($tr("Timeout of file offers",twinsmediaplayer))
+               @%m_hShareTimeout = $new(spinbox,%hTab{advert})
+               @%m_hShareTimeout->$setminvalue(1)
+               @%m_hShareTimeout->$setmaxvalue(60)
+               @%m_hShareTimeout->$setsuffix(mn)
+               @%m_hShareTimeout->$setvalue(%TwinsMediaPlayer{sharetimeout})
+               %l{advert}->$addmulticellwidget(%lShareTimeout,%ir,%ir,0,1)
+               %l{advert}->$addwidget(@%m_hShareTimeout,%ir,2)
+               %ir++
+
+               // Max length of offered file names
+               %lFileNameLength = $new(label,%hTab{advert})
+               %lFileNameLength->$settext($tr("Max length of offered file names",twinsmediaplayer))
+               @%m_hFileNameLength = $new(spinbox,%hTab{advert})
+               @%m_hFileNameLength->$setminvalue(1)
+               @%m_hFileNameLength->$setmaxvalue(300)
+               @%m_hFileNameLength->$setvalue(%TwinsMediaPlayer{maxoffernamelength})
+               %l{advert}->$addmulticellwidget(%lFileNameLength,%ir,%ir,0,1)
+               %l{advert}->$addwidget(@%m_hFileNameLength,%ir,2)
+
+
+               //////////// Second page: look
+               @%m_hTab{look} = $new(widget,@%m_hTabs)
+               %l{look} = $new(layout,@%m_hTab{look})
+               %l{look}->$setmargin(10)
+               %l{look}->$setspacing(5)
+               @%m_hTabs->$addtab(@%m_hTab{look},$tr("Look",twinsmediaplayer),149)
+
+               // Colors
+               %g = @$addColorBox(window,$tr("Window",twinsmediaplayer))
+               %l{look}->$addwidget(%g,0,0)
+               %g = @$addColorBox(artist,$tr("Artist",twinsmediaplayer))
+               %l{look}->$addwidget(%g,1,0)
+               %g = @$addColorBox(title,$tr("Title",twinsmediaplayer))
+               %l{look}->$addwidget(%g,2,0)
+               %g = @$addColorBox(album,$tr("Album",twinsmediaplayer))
+               %l{look}->$addwidget(%g,2,1)
+
+               // Sample
+               @%m_hWindowSample = $new(textbrowser,@%m_hTab{look})
+               %l{look}->$addmulticellwidget(@%m_hWindowSample,0,1,1,1)
+               @$updateWindowSample()
+
+
+               //////////// Third page: the player
+               %hTab{player} = $new(widget,@%m_hTabs)
+               %l{player} = $new(layout,%hTab{player})
+               %l{player}->$setmargin(10)
+               %l{player}->$setspacing(10)
+               @%m_hTabs->$addtab(%hTab{player},$tr("Player",twinsmediaplayer),167)
+
+               // Choose
+               switch($str.lowcase($system.osname)){
+                       case(linux)@%m_aPlayers = $array(amarok,xmms,juk)
+                       case(windows)@%m_aPlayers = $array(winamp)
+                       default:@%m_aPlayers = $array(amarok,xmms,juk,winamp)
+               }
+               %lChoose = $new(label,%hTab{player})
+               %lChoose->$settext($tr("Choose your player",twinsmediaplayer))
+               @%m_hChoose = $new(combobox,%hTab{player})
+               foreach(%player,@%m_aPlayers)@%m_hChoose->$insertitem(%player)
+               %okChosen = $new(button,%hTab{player})
+               %okChosen->$settext($tr(Ok))
+               objects.connect %okChosen clicked $$ chosen
+               @$updatePlayer()
+
+               // Detect
+               %detect = $new(button, %hTab{player})
+               %detect->$settext($tr("Auto-detect",twinsmediaplayer))
+               objects.connect %detect  clicked $$ detect
+               @%m_hDetect = $new(label,%hTab{player})
+               @%m_hDetect->$setframestyle(Box,Sunken)
+
+               // Layout
+               %l{player}->$addwidget(%lChoose,0,0)
+               %l{player}->$addwidget(@%m_hChoose,1,0)
+               %l{player}->$addwidget(%okChosen,2,0)
+               %l{player}->$addwidget(%detect,1,1)
+               %l{player}->$addwidget(@%m_hDetect,2,1)
+               %l{player}->$setrowstretch(1,5)
+               %l{player}->$setrowstretch(2,5)
+
+
+               /////////// Last page: Start and Quit
+               %hTab{sq} = $new(widget,@%m_hTabs)
+               %l{sq} = $new(layout,%hTab{sq})
+               %l{sq}->$setmargin(10)
+               %l{sq}->$setspacing(10)
+               @%m_hTabs->$addtab(%hTab{sq},$tr("Start && Quit",twinsmediaplayer),145)
+
+               // Restart Group
+               %hStart = $new(groupbox,%hTab{sq})
+               %hStart->$settitle($tr("Start mode",twinsmediaplayer))
+               %lStart = $new(layout,%hStart)
+               %lStart->$setmargin(20)
+               %lStart->$setspacing(10)
+               %l{sq}->$addwidget(%hStart,0,0)
+               // Setup
+               @%m_szStartMode = %TwinsMediaPlayer{startmode}
+               foreach(%state,on,off,remember)
+               {
+                       @%m_hStart{%state} = $new(checkbox,%hStart)
+                       @%m_hStart{%state}->$setchecked($(%TwinsMediaPlayer{startmode}==%state))
+                       objects.connect @%m_hStart{%state} toggled $$ toggleStart%state
+               }
+               // Text
+               @%m_hStart{on}->$settext($tr("Always start the media player with KVIrc",twinsmediaplayer))
+               @%m_hStart{off}->$settext($tr("Let the user to manually start the media player",twinsmediaplayer))
+               @%m_hStart{remember}->$settext($tr("Remember the media player state of the last KVIrc session",twinsmediaplayer))
+               // Layout
+               %lStart->$addwidget(@%m_hStart{on},0,0)
+               %lStart->$addwidget(@%m_hStart{off},1,0)
+               %lStart->$addwidget(@%m_hStart{remember},2,0)
+
+               // Confirm before quit
+               @%m_hConfirm = $new(checkbox,%hTab{sq})
+               @%m_hConfirm->$settext($tr("Confirm before quit",twinsmediaplayer))
+               @%m_hConfirm->$setchecked(%TwinsMediaPlayer{confirmbeforequit})
+               %l{sq}->$addwidget(@%m_hConfirm,1,0)
+
+
+
+               // Ok
+               %ok = $new(button,$$)
+               %ok->$settext($tr(Ok))
+               objects.connect %ok clicked $$ ok
+               %ll->$addwidget(%ok,1,0)
+
+
+               // Apply
+               %apply = $new(button,$$)
+               %apply->$settext($tr(Apply))
+               objects.connect %apply clicked $$ apply
+               %ll->$addwidget(%apply,1,1)
+
+
+               // Close
+               %close = $new(button,$$)
+               %close->$settext($tr(Close))
+               objects.connect %close clicked $$ close
+               %ll->$addwidget(%close,1,2)
+
+       }
+
+       addColorBox($0 = name,$1 = label)
+       {
+               %g = $new(groupbox,@%m_hTab{look})
+               %g->$settitle($1)
+               %l = $new(layout,%g)
+               %l->$setspacing(5)
+               %l->$setmargin(15)
+
+               %labelfg = $new(label,%g)
+               %labelfg->$settext($tr("Foreground",twinsmediaplayer))
+
+               @%m_hColors{fg:$0} = $new(lineedit,%g)
+               @%m_hColors{fg:$0}->$settext(%TwinsMediaPlayer{color:fg:$0})
+               @%m_hColors{fg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))
+               objects.connect @%m_hColors{fg:$0} textchanged $$ updateWindowSample
+
+               %labelbg = $new(label,%g)
+               %labelbg->$settext($tr("Background",twinsmediaplayer))
+
+               @%m_hColors{bg:$0} = $new(lineedit,%g)
+               @%m_hColors{bg:$0}->$settext(%TwinsMediaPlayer{color:bg:$0})
+               @%m_hColors{bg:$0}->$settooltip($tr("Enter an html color code like <b>white</b> or <b>#ffffff</b>",twinsmediaplayer))
+               objects.connect @%m_hColors{bg:$0} textchanged $$ updateWindowSample
+
+               %l->$addwidget(%labelfg,0,0)
+               %l->$addwidget(@%m_hColors{fg:$0},0,1)
+               %l->$addwidget(%labelbg,1,0)
+               %l->$addwidget(@%m_hColors{bg:$0},1,1)
+
+               return %g
+       }
+
+       updateWindowSample()
+       {
+               %h = "<body bgcolor=\""@%m_hColors{bg:window}->$text()"\">"
+               %h .= "<table width=\"100%\" cellpadding=\"0\" cellspacing=\"1\" border=\"0\">"
+               %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:artist}->$text()"\">"
+               %h .= " <font color=\""@%m_hColors{fg:artist}->$text()"\" style=\"font-size:10pt;\">"<b>Radiohead</b>"</font></td></tr>"
+               %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:title}->$text()"\">"
+               %h .= " <font color=\""@%m_hColors{fg:title}->$text()"\" style=\"font-size:12pt;\"><b>"<i>Pyramid Song</i>"</b></font></td></tr>"
+               %h .= "<tr><td colspan=2 bgcolor=\""@%m_hColors{bg:album}->$text()"\">"
+               %h .= " <font color=\""@%m_hColors{fg:album}->$text()"\" style=\"font-size:9pt;\">"Amnesiac"</font></td></tr>"
+               %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Genre:",twinsmediaplayer)"</font></th>"
+               %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">Brit Pop</font></td></tr>"
+               %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Length:",twinsmediaplayer)"</font></th>"
+               %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">04m49s</font></td></tr>"
+               %h .= "<tr><th><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">"$tr("Bitrate:",twinsmediaplayer)"</font></th>"
+               %h .= " <td><font color=\""@%m_hColors{fg:window}->$text()"\" style=\"font-size:8pt;\">128 Kbit/s</font></td></tr>"
+               %h .= "</table></font></body></html>"
+
+               @%m_hWindowSample->$setText(%h)
+
+       }
+
+       updateSample()
+       {
+               if($ic&&$isset($me))%nick=$me
+               else %nick=My_Nick
+               %s = "* %nick "@%m_hAnnounce->$text()" Radiohead - Pyramid song"
+               if(@%m_hTag{album}->$ischecked)%s << "(Amnesiac)"
+               if(@%m_hTag{genre}->$ischecked) %t <+ Rock
+               if(@%m_hTag{year}->$ischecked) %t <+ 2001
+               if(@%m_hTag{length}->$ischecked) %t <+ "04m49s"
+               if(@%m_hTag{bitrate}->$ischecked) %t <+ "128Kbit/s"
+               if(@%m_hTag{freq}->$ischecked) %t <+ "44kHz"
+               if($isset(%t)) %s << "["$str.join(@%m_hSep->$text,%t)"]"
+               %s = $str.replace(%s,"&lt;","<")
+               %s = $str.replace(%s,"&gt;",">")
+               @%m_hSample->$settext("<font size=-1>%s</font>")
+       }
+
+       detect()
+       {
+               mediaplayer.detect
+               %result = $mediaplayer.player
+               if($str.isempty(%result))%result = $tr("none",twinsmediaplayer)
+               @%m_hDetect->$settext($tr("Found:",twinsmediaplayer) %result)
+               @$updatePlayer()
+       }
+
+       updatePlayer()
+       {
+               if(!$isset($mediaplayer.player))return
+               %i=0
+               foreach(%player,@%m_aPlayers)
+               {
+                       if($str.equal($mediaplayer.player,@%m_hChoose->$textat(%i)))
+                       {
+                               @%m_hChoose->$setcurrentitem(%i)
+                               return
+                       }
+                       %i++
+               }
+       }
+
+       chosen()
+       {
+               mediaplayer.setPlayer @%m_hChoose->$current()
+       }
+
+       toggleStartOn()
+       {
+               @$toggleStart(on)
+       }
+
+       toggleStartOff()
+       {
+               @$toggleStart(off)
+       }
+
+       toggleStartRemember()
+       {
+               @$toggleStart(remember)
+       }
+       toggleStart($0 = state type)
+       {
+               if($0 == @%m_szStartMode)
+               {
+                       @%m_hStart{$0}->$setchecked(1)
+               } elseif(@%m_hStart{$0}->$ischecked)
+               {
+                               %old = @%m_szStartMode
+                               @%m_szStartMode = $0
+                               @%m_hStart{%old}->$setchecked(0)
+               }
+       }
+       ok()
+       {
+               @$apply()
+               @$close()
+       }
+
+       apply()
+       {
+               %TwinsMediaPlayer{sharetimeout} = @%m_hShareTimeout->$value()
+               %TwinsMediaPlayer{confirmbeforequit} = @%m_hConfirm->$ischecked()
+               %TwinsMediaPlayer{separator} = @%m_hSep->$text()
+               %TwinsMediaPlayer{announce} = @%m_hAnnounce->$text()
+
+               foreach(%tag,@%m_aTags)
+                       %TwinsMediaPlayer{show%tag} = @%m_hTag{%tag}->$ischecked()
+
+               foreach(%tag,window,artist,title,album)
+               foreach(%bg,fg,bg)
+               %TwinsMediaPlayer{color:%bg:%tag} = @%m_hColors{%bg:%tag}->$text()
+
+               if($isset(@%m_hChoose->$current()))
+                       mediaplayer.setPlayer @%m_hChoose->$current()
+
+               foreach(%state,on,off,remember)
+               if(@%m_hStart{%state}->$ischecked())
+               {
+                       %TwinsMediaPlayer{startmode} = %state
+                       break
+               }
+
+               twins::mediaplayer::core::config::save
+
+               // Update the player look now
+               if($objects.exists(%G_hTwinsMediaPlayer{window}))
+                       %G_hTwinsMediaPlayer{window}->$updateWindow(1)
+       }
+
+       close()
+       {
+               delete $$
+       }
+
+       destructor()
+       {
+               %G_hTwinsMediaPlayer{config} =
+       }
+}
+
+
+/*
+twins::admin::reguninstall --class=$array(twins::mediaplayer::window,\
+       twins::mediaplayer::confirmbeforequit,\
+       twins::mediaplayer::config,twins::mediaplayer::mrldialog)
+*/
+
+
+
+
+
+
+