[Tkabber-dev] r496 - in trunk/plugins: . hidetabs hidetabs/msgs hidetabs/pixmaps

tkabber-svn at jabber.ru tkabber-svn at jabber.ru
Wed Oct 5 23:38:48 MSD 2011


Author: ancestor
Date: 2011-10-05 23:38:48 +0400 (Wed, 05 Oct 2011)
New Revision: 496

Added:
   trunk/plugins/hidetabs/
   trunk/plugins/hidetabs/README
   trunk/plugins/hidetabs/TODO
   trunk/plugins/hidetabs/hidetabs.tcl
   trunk/plugins/hidetabs/license.terms
   trunk/plugins/hidetabs/msgs/
   trunk/plugins/hidetabs/msgs/ru.msg
   trunk/plugins/hidetabs/pixmaps/
   trunk/plugins/hidetabs/pixmaps/none-type.gif
Log:
1) Added new plugin by rejjin <webrenji at gmail.com> - hidetabs.tcl, that allows to hide tabbar and navigate the tabs through popup window with those tabs.



Added: trunk/plugins/hidetabs/README
===================================================================
--- trunk/plugins/hidetabs/README	                        (rev 0)
+++ trunk/plugins/hidetabs/README	2011-10-05 19:38:48 UTC (rev 496)
@@ -0,0 +1,61 @@
+Hidetabs плагин для Tkabber.
+
+Автор: rejjin <webrenji at gmail.com>
+
+Отдельная благодарность ancestor'у
+за помощь в написании плагина.
+
+Введение.
+
+Суть плагина заключается в том, что обычные вкладки для конференций
+и остальных окон можно не использовать. Вместо них создаётся новое 
+окно, которое повторяет все эти вкладки. Если Вам это окно не по душе,
+то вы можете использовать новый пункт основного меню "Вкладки".
+Плагин прекрасно подходит для быстрой и эффективной навигации
+по окнам при использовании лишь одного устройства (клавиатура или
+мышь). Плагин так же добавляет новое уведомление в тулбар
+(это та посола с иконками, на которой расположены кнопки 
+"Добавить нового пользователя", "Обзор служб" и т.д.), которое 
+"сдвинуто" в самую правую часть. Если вы получаете сообщение,
+то эта уведомление обновляется, и показывает текст вида:
+"Непрочитанных сообщений - 2".
+
+
+Использование плагина.
+
+По-умолчанию плагин назначает следующие клавиши:
+    <F5>    --    Показать/скрыть основной таббар.
+	<Alt_Right>    --    Показать/скрыть окно с вкладками.
+	
+В окне с вкладками можно использовать следующие кнопки:
+    <Up>    --    Переместить выделение на одну позицию вверх.
+	<Down>    --    Переместить выделение на одну позицию вниз.
+	<Left>    --    Переместить выделение на одну позицию влево.
+	<Right>    --    Переместить выделение на одну позицию вправо.
+	<Enter> & ЛКМ    --    Открыть выделенную вкладку.
+	<Delete> & ПКМ   --    Закрыть выделенную вкладку.
+
+Для метки в тулбаре следующие:
+    ЛКМ    --    Переключиться на следующий чат с непрочитанными 
+сообщениями (если непрочитанных сообщений нет, то работает
+как ПКМ). 
+	ПКМ    --    Показать/скрыть окно с вкладками.
+	
+Примечание: вкладка, которая находится под курсором мыши
+не является активной.
+
+Настройка:
+::plugins::hidetabs::config(alpha)    Прозрачность окна с вкладками. 
+::plugins::hidetabs::config(side)    Построение вкладок в окне.
+::plugins::hidetabs::config(bwidth)    Ширина кнопки/вкладки.
+::plugins::hidetabs::config(bheight)    Высота кнопки/вкладки.
+::plugins::hidetabs::config(save_last_focus):    Запоминать последний
+выделенный таб.
+::plugins::hidetabs::config(move_window)    Возможность передвигать
+окно с вкладками.
+::plugins::hidetabs::config(topmost)    Отображать поверх всех окон.
+::plugins::hidetabs::config(show_unread    Показывать метку в тулбаре.
+::plugins::hidetabs::config(key_nb_toggle    Клавиша, отвечающая за 
+переключение таббара.
+::plugins::hidetabs::config(key_menu_toggle)    Клавиша, отвечающая за
+переключение окна с вкладками.
\ No newline at end of file

Added: trunk/plugins/hidetabs/TODO
===================================================================
--- trunk/plugins/hidetabs/TODO	                        (rev 0)
+++ trunk/plugins/hidetabs/TODO	2011-10-05 19:38:48 UTC (rev 496)
@@ -0,0 +1,4 @@
+1) Поддержка менеджером плагинов.
+  Есть рабочие процедуры hidetabs::load 
+  hidetabs::unload, но они не работают, 
+  есть их использовать в ::plugins::register.
\ No newline at end of file

Added: trunk/plugins/hidetabs/hidetabs.tcl
===================================================================
--- trunk/plugins/hidetabs/hidetabs.tcl	                        (rev 0)
+++ trunk/plugins/hidetabs/hidetabs.tcl	2011-10-05 19:38:48 UTC (rev 496)
@@ -0,0 +1,621 @@
+# Hidetabs plugin for Tkabber.
+#
+# Authors: 
+#    rejjin <xmpp:rejjin at jabber.dk>
+#    ancestor <xmpp:ancestor at jabber.org>
+
+namespace eval hidetabs {
+	variable self
+	variable config
+	
+	set cdir [file dirname [info script]]
+	
+	package require msgcat
+	::msgcat::mcload [file join $cdir msgs]
+	
+	namespace import ::msgcat::mc
+	
+	if { ! $::ifacetk::options(use_tabbar)} {
+		hook::add finload_hook {
+			tk_messageBox -message [mc "Plugin \"hidetabs\"\
+			can't load. Please enable tabs."] -title  [mc "Conflict"]
+		}
+		return
+	}
+	
+	set self(fr) .nb
+	set self(state) 1
+	set self(menu-fr) .menu_tabbar
+	
+	set config(nonecolor) ""
+	set config(unread_msg_color) ""
+	set config(personal_msg_color) ""
+	set config(auto_disable_label) 1
+	
+	set config(key_nb_toggle) "<Key-F5>"
+	set config(key_menu_toggle) "<KeyPress-Alt_R>"
+	
+	custom::defgroup Plugins [mc "Plugins options."] -group Tkabber	
+	custom::defgroup hidetabs [mc "Hidetabs plugin options."] -group Plugins	
+	
+	custom::defvar config(alpha) 90 \
+		[mc "Alpha value."] \
+		-group hidetabs -type integer
+		
+	custom::defvar config(side) square \
+		[mc "Window construction."] \
+		-type options -group hidetabs \
+		-values [list \
+			vertical [mc "Vertical"] \
+			horisontal [mc "Horisontal"] \
+			square [mc "Square"]]
+	
+	custom::defvar config(bwidth) 120 \
+		[mc "Button width."] \
+		-group hidetabs -type integer
+		
+	custom::defvar config(bheight) 15 \
+		[mc "Button height."] \
+		-group hidetabs -type integer
+
+	custom::defvar config(save_last_focus) 1 \
+		[mc "Save last focus on button."] \
+		-group hidetabs -type boolean
+
+	custom::defvar config(move_window) 0 \
+		[mc "Window moving."] \
+		-group hidetabs -type boolean
+
+	custom::defvar config(topmost) 1 \
+		[mc "Topmost window."] \
+		-group hidetabs -type boolean
+	
+	custom::defvar config(show_unread) 1 \
+		[mc "Show number of messages in toolbar."] \
+		-group hidetabs -type boolean \
+		-command [namespace current]::show_unread
+		
+	custom::defvar config(key_nb_toggle) "<Key-F5>" \
+		[mc "Key for toggle tabbar."] \
+		-group hidetabs -type string \
+		-command [list [namespace current]::change_bindkey $config(key_nb_toggle)]
+
+	custom::defvar config(key_menu_toggle) "<KeyPress-Alt_R>" \
+		[mc "Key for toggle tabs menu."] \
+		-group hidetabs -type string \
+		-command [list [namespace current]::change_bindkey $config(key_menu_toggle)]
+	
+	image create photo none-type \
+		-file [file join $cdir pixmaps none-type.gif]
+	
+
+	hook::add finload_hook [namespace current]::load
+	hook::add systray_menu_hook [namespace current]::systray_menu 20
+}
+
+proc hidetabs::systray_menu { m } {
+	menu $m.hidetabs -title [mc "Tabs"] -tearoff 0 \
+		-postcommand [list [namespace current]::pcm_menu $m.hidetabs]
+	$m add cascade -label [mc "Tabs"] -menu $m.hidetabs
+	$m add separator
+}
+
+proc hidetabs::load {} {
+	variable config
+	
+	set m [winfo parent [.mainframe getmenu tkabber]]
+	$m add cascade -label [mc "Tabs"] -menu $m.list
+	menu $m.list -postcommand [list [namespace current]::pcm_menu $m.list] \
+		-tearoff 0 -title [mc "Tabs"] 
+	
+	show_unread
+	
+	bind . $config(key_nb_toggle) [namespace current]::toggle_tabbar
+	bind . $config(key_menu_toggle) [list [namespace current]::menu_key 0 toggle]
+}
+
+# TODO: support plugin manager
+proc hidetabs::unload {} {
+	variable config
+	
+	set m [winfo parent [.mainframe getmenu tkabber]]
+	if { ![catch { $m index  [mc "Tabs"] }] } {
+		$m delete [$m index  [mc "Tabs"]]
+	}
+	catch {destroy $m.list}
+	
+	delete_unread
+	
+	bind . $config(key_nb_toggle) {}
+	bind . $config(key_menu_toggle) {}
+}
+
+proc hidetabs::delete_unread {} {
+	set w [.mainframe gettoolbar 0]
+	catch { destroy $w.unreadl }
+}
+
+proc hidetabs::show_unread { args } {
+	variable config
+	
+	set w [.mainframe gettoolbar 0]
+	
+	if { !$config(show_unread) } {
+		catch { destroy $w.unreadl }
+		return
+	}
+	
+	if { [winfo exist $w.unreadl] } {
+	destroy $w.unreadl
+	}
+	
+	label $w.unreadl
+	pack $w.unreadl -side right -padx 3
+	
+	if { $config(nonecolor) == "" } {
+	set config(nonecolor) [$w.unreadl cget -foreground]
+	}
+	
+	bind $w.unreadl <1> [list [namespace current]::next_unread $w.unreadl]
+	bind $w.unreadl <3> [list [namespace current]::menu_key 0 toggle]
+	
+	unread_label_loop $w.unreadl
+}
+
+proc hidetabs::next_unread { m } {
+	if { [string equal [$m cget -text] [mc "Messages: %s" n/a]] } {
+		menu_key 0 toggle
+		return
+	}
+	
+	foreach chatid [::chat::opened] {
+		if {$::ifacetk::personal_msg($chatid) > 0} {
+		::chat::activate $chatid
+		return
+		}
+	}
+	foreach chatid [::chat::opened] {
+		if {$::ifacetk::number_msg($chatid) > 0} {
+			::chat::activate $chatid
+			return
+		}
+	}
+}
+
+proc hidetabs::unread_label_loop { w } {
+	variable config
+	
+	if { ![winfo exist $w] } {
+	return
+	}
+	
+	set unreaded 0
+	set color $config(nonecolor)
+	set pmsgs 0
+	
+	foreach chatid [::chat::opened] {
+		incr unreaded $::ifacetk::number_msg($chatid)
+		if {$::ifacetk::personal_msg($chatid) > 0} {
+			incr pmsgs
+		}
+	}
+	
+	set ss 0
+	if { $unreaded == 0 } {
+	set ss 1
+	}
+	
+	if {$unreaded > 0 && $config(unread_msg_color) != ""} {
+		set color $config(unread_msg_color)
+	} elseif { $unreaded > 0 } {
+		set color blue
+	}
+	
+	if {$pmsgs > 0 && $config(personal_msg_color) != ""} {
+		set color $config(personal_msg_color)
+	} elseif { $pmsgs > 0 } {
+		set color red
+	}
+	
+	if { [string equal $unreaded "0"] } {
+		set unreaded n/a
+	}
+	
+	set title [mc "Messages: %s" $unreaded]
+	$w configure -text $title -foreground $color -state normal
+	
+	if { $ss && $config(auto_disable_label) } {
+		$w configure -state disabled
+	}
+	
+	after idle "after 500 [list [namespace current]::unread_label_loop $w]"
+}
+
+proc hidetabs::change_bindkey {old_key ns key c} {
+	variable config
+
+	catch {bind . $old_key {}}
+	
+	if { [string length $config($key)] == 0 } {
+		return
+	}
+	
+	switch -- $key {
+		key_menu_toggle {
+			bind . $config(key_menu_toggle) \
+				[list [namespace current]::menu_key 0 toggle]
+		}
+		key_nb_toggle {
+			bind . $config(key_nb_toggle) \
+				[namespace current]::toggle_tabbar
+		}
+	}
+}
+
+proc hidetabs::pcm_menu { m } {
+	$m delete 0 end
+	
+	foreach ind [get_tabs_data] {
+		lassign $ind tab color tabtitle number_msg personal_msg cmd icon c_tab
+
+		if {$number_msg > 0} { append tabtitle " ($number_msg)" }
+		
+		if {[string equal $tab $c_tab]} { set tabtitle "\[ $tabtitle \]" }
+		
+		$m add command -label $tabtitle -command $cmd \
+			-image $icon -compound left -foreground $color
+	}
+}
+
+
+proc hidetabs::toggle_tabbar { args } {
+	variable self
+	
+	if { $self(state) } { 
+	grid forget $self(fr) 
+	} else { 
+	ifacetk::configure_tabs
+	}
+	
+	set self(state) [expr { ! $self(state) }]
+}
+
+proc hidetabs::aset {t var val} {
+	set $var -1
+	after $t [list set $var $val]
+}
+
+proc hidetabs::menu_key { t {toggle ""} } {
+	variable S
+	variable self
+	variable p_fm
+	
+	if { [info exist S] && $S == -1 } { return }
+	set full_s [namespace current]::S
+	
+	if { [string length $toggle] > 0 } {
+		if {[info exist S] && $S} {
+			close_menu
+			aset 300 $full_s 0
+			array unset p_fm
+		} else {
+			show_menu
+			aset 100 $full_s 1
+		}
+		return
+	}
+	
+	switch $t {
+		p {
+			show_menu
+			aset 100 $full_s 1
+		}
+		r {
+			close_menu
+			aset 300 $full_s 0
+			array unset p_fm
+		}
+	}
+}
+
+proc hidetabs::show_menu { {r 0} } {
+	variable self
+	variable config
+	variable p_fm
+	variable t_current
+	
+	set process 1
+	
+	if { ![info exist self(in_r)] || !$self(in_r) } {
+		if { $r } {
+			return
+		}
+	}
+	
+	set self(in_r) 1
+	
+	if { ![winfo exist $self(menu-fr)]} {
+		set process 0
+		
+		toplevel $self(menu-fr)
+		wm state $self(menu-fr) withdraw
+		
+		bind $self(menu-fr) <Key-Return> [list [namespace current]::invoke_tab %W]
+		
+		bind $self(menu-fr) <Key-Up> [list [namespace current]::focus_ch up]
+		bind $self(menu-fr) <Key-Down> [list [namespace current]::focus_ch down]
+		bind $self(menu-fr) <Key-Left> [list [namespace current]::focus_ch left]
+		bind $self(menu-fr) <Key-Right> [list [namespace current]::focus_ch right]
+		
+		bind $self(menu-fr) $config(key_menu_toggle) \
+			[list [namespace current]::menu_key r]
+		
+		if { ! $config(move_window)} { 
+			set oldc [bind . <1>]
+			bind . <1> [list [namespace current]::menu_key r]
+			bind . <1> [list +bind . <1> $oldc]
+		}
+		
+		foreach {option value} [wm attributes $self(menu-fr)] {
+			if { [string equal $option -topmost] } {
+				wm attributes $self(menu-fr) -topmost $config(topmost)
+			}
+		}
+		
+		set alpha [expr $config(alpha) / 100.0]
+		if {$alpha <= 1.0} {
+			foreach {option value} [wm attributes $self(menu-fr)] {
+				if {[string equal $option -alpha]} {
+					wm attributes $self(menu-fr) -alpha $alpha
+				}
+			}
+		}
+		
+		wm title $self(menu-fr) [::msgcat::mc "Tabs"]
+		
+		if { ! $config(move_window)} {
+			catch {wm overrideredirect $self(menu-fr) 1}
+		}
+		
+		wm resizable $self(menu-fr) 0 0
+		
+		wm protocol $self(menu-fr) WM_DELETE_WINDOW \
+			[list [namespace current]::menu_key r]
+	}
+	
+	foreach ind [get_tabs_data] {
+		lassign $ind tab color tabtitle number_msg personal_msg cmd icon c_tab
+
+		if {$number_msg > 0} { append tabtitle " ($number_msg)" }
+		
+		if { ! [winfo exist $self(menu-fr).$tab]} {			
+			button $self(menu-fr).$tab -command [list [namespace current]::ncmd_btn $cmd] \
+				-foreground black -width $config(bwidth) -anchor w -height $config(bheight) \
+				-overrelief sunken
+			bind $self(menu-fr).$tab <3> [list [namespace current]::close $tab]
+			bind $self(menu-fr).$tab <Key-Delete> [list [namespace current]::close $tab]
+		}
+		
+		if {[string equal $tab $c_tab]} { set tabtitle "\[ $tabtitle \]" }
+		
+		$self(menu-fr).$tab configure -text $tabtitle -image $icon \
+			-compound left -foreground $color
+	}
+	
+	set slv [winfo children $self(menu-fr)]
+	if { [llength $slv] <= 1 } {
+	return [close_menu]
+	}
+	
+	if { ![info exist t_current] || ![winfo exist $t_current]} {
+	set t_current [lindex $slv 0]
+	} 	
+
+	if { ! $process} {
+		set nb [llength $slv]
+		set tm [lindex $slv 0]
+		grid $tm
+		update idletasks
+		set bw [winfo width $tm]
+		set bh [winfo height $tm]
+		grid forget $tm
+		
+		if {$nb <= 0} { return }
+		
+		set it 0
+		if { [string equal $config(side) "square"] } {
+			set r [expr {round(sqrt($nb))}]
+			for {set i 0} {$i < $nb} {incr i $r} {
+				incr it
+				for {set x 0} {$x < $r} {incr x} {
+					set p [lindex $slv [expr $i + $x]]
+					if { ! [winfo exist $p]} {continue}
+					set c [expr {$i / $r}]
+					grid $p -column $c -row $x -sticky news
+					set "p_fm($c $x)" $p
+				}
+			}
+		} elseif { [string equal $config(side) "vertical"] } {
+			set scv [winfo screenheight .]
+			set part [expr {($scv / 100) * 70}]
+			set part [expr {$bh * ($part / $bh)}]
+			set r 0; set c 0; set lmy 0; set k 1
+			foreach p $slv {
+				if {$lmy >= [expr {$part * $k}]} {incr c; incr k; set r 0}
+				grid $p -column $c -row $r -sticky news -pady 1
+				update idletasks
+				set "p_fm($c $r)" $p
+				incr r; incr lmy [winfo height $p]
+			}
+		} elseif { [string equal $config(side) "horisontal"] } {
+			set scv [winfo screenwidth .]
+			set part [expr {($scv / 100) * 70}]
+			set part [expr {$bw * ($part / $bw)}]
+			set r 0; set c 0; set lmy 0; set k 1
+			foreach p $slv {
+				if {$lmy >= [expr {$part * $k}]} {incr r; incr k; set c 0}
+				grid $p -column $c -row $r -sticky news -padx 1 -pady 1
+				update idletasks
+				set "p_fm($c $r)" $p
+				incr c; incr lmy [winfo width $p]
+			}
+		}
+		BWidget::place $self(menu-fr) 0 0 center
+	}
+	
+	if { [string equal [focus] $self(menu-fr)] || !$process } {
+	focus -force $t_current
+	}
+	
+	wm state $self(menu-fr) normal
+	
+	after idle "after 500 [list [namespace current]::show_menu 1]"
+}
+
+proc hidetabs::focus_ch {to} {
+	variable self
+	variable t_current
+	variable p_fm
+	
+	if { ! [info exist t_current] } { return }
+	
+	set wk ""
+	foreach key [array names p_fm] {
+		if { [string equal $t_current $p_fm($key)] } {
+			set wk $key
+		}
+	}
+	
+	if { [string length $wk] == 0 } {return}
+	lassign $wk c r
+	
+	switch -- $to {
+		up {
+			set n [expr {$r - 1}]
+			if { [info exist "p_fm($c $n)"] } {
+				focus -force "$p_fm($c $n)"
+				set t_current "$p_fm($c $n)"
+			} else {
+				set max 0
+				foreach k [array names p_fm] {
+					lassign $k nextc nextr
+					if { $nextc == $c && $nextr > $max } {
+						set max $nextr
+					}
+				}
+				focus -force "$p_fm($c $max)"
+				set t_current "$p_fm($c $max)"
+			}		
+		}
+		down {
+			set n [expr {$r + 1}]
+			if { [info exist "p_fm($c $n)"] } {
+				focus -force "$p_fm($c $n)"
+				set t_current "$p_fm($c $n)"
+			} else {
+				focus -force "$p_fm($c 0)"
+				set t_current "$p_fm($c 0)"
+			}		
+		}
+		left {
+			set n [expr {$c - 1}]
+			if { [info exist "p_fm($n $r)"] } {
+				focus -force "$p_fm($n $r)"
+				set t_current "$p_fm($n $r)"
+			} else {
+				set max 0
+				foreach k [array names p_fm] {
+					lassign $k nextc nextr
+					if { $nextr == $r && $nextc > $max } {
+						set max $nextc
+					}
+				}
+				focus -force "$p_fm($max $r)"
+				set t_current "$p_fm($max $r)"
+			}
+		}
+		right {
+			set n [expr {$c + 1}]
+			if { [info exist "p_fm($n $r)"] } {
+				focus -force "$p_fm($n $r)"
+				set t_current "$p_fm($n $r)"
+			} else {
+				focus -force "$p_fm(0 $r)"
+				set t_current "$p_fm(0 $r)"
+			}
+		}
+	}
+}
+
+proc hidetabs::get_tabs_data {} {
+	variable self
+	
+	set result {}
+	
+	foreach tab [.nb pages] {
+		set cw [pack slaves [.nb getframe $tab]]
+		set chatid [::chat::winid_to_chatid $cw]
+		set icon none-type
+		set number_msg 0; set personal_msg 0
+		
+		if { [string length $chatid] > 0 } {
+			set number_msg $::ifacetk::number_msg($chatid)
+			set personal_msg $::ifacetk::personal_msg($chatid)
+			set tabtitle $chat::chats(tabtitlename,$chatid)
+			if { [chat::is_groupchat $chatid] ||  [chat::is_chat $chatid] } {
+				set icon [::ifacetk::roster::get_jid_icon \
+					[::chat::get_xlib $chatid] [::chat::get_jid $chatid]]
+			}
+		} else {
+			set tabtitle [lindex [ButtonBar::itemcget $self(fr) $tab -text] 0]
+		}
+		
+		lappend result [list $tab [ButtonBar::itemcget $self(fr) $tab -foreground] \
+				$tabtitle $number_msg $personal_msg \
+				"[ButtonBar::itemcget $self(fr) $tab -command];[namespace current]::restore" \
+				$icon [$self(fr) raise]]
+	}
+	
+	return $result
+}
+
+proc hidetabs::restore {} {
+	catch {ifacetk::systray::restore}
+}
+
+proc hidetabs::ncmd_btn {code} {
+	uplevel #0 $code
+	menu_key 0 toggle
+}
+
+proc hidetabs::invoke_tab {w} {
+	$w invoke
+}
+		
+proc hidetabs::close_menu {} {
+	variable self 
+	variable config
+	variable t_current
+	
+	if { [winfo exist $self(menu-fr)] } {
+	destroy $self(menu-fr)
+	}
+	
+	set self(in_r) 0  ;# reload window
+	if { !$config(save_last_focus) } {
+	catch {unset t_current}
+	}
+	
+	focus -force [focus -lastfor .]
+}
+
+proc hidetabs::close { tb } {
+	variable self
+	if {[.nb raise] != ""} {
+		eval destroy [pack slaves [$self(fr) getframe $tb]]
+		$self(fr) delete $tb 1
+		ifacetk::tab_move $self(fr) 0
+	}
+	close_menu
+	show_menu
+}

Added: trunk/plugins/hidetabs/license.terms
===================================================================
--- trunk/plugins/hidetabs/license.terms	                        (rev 0)
+++ trunk/plugins/hidetabs/license.terms	2011-10-05 19:38:48 UTC (rev 496)
@@ -0,0 +1,19 @@
+Copyright (c) 2011 Rejjin <webrenji at gmail.com>
+
+Permission is hereby granted, free of charge, to any person obtaining a
+copy of this software and associated documentation files (the "Software"),
+to deal in the Software without restriction, including without limitation
+the rights to use, copy, modify, merge, publish, distribute, sublicense,
+and/or sell copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included
+in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
+THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+DEALINGS IN THE SOFTWARE.

Added: trunk/plugins/hidetabs/msgs/ru.msg
===================================================================
--- trunk/plugins/hidetabs/msgs/ru.msg	                        (rev 0)
+++ trunk/plugins/hidetabs/msgs/ru.msg	2011-10-05 19:38:48 UTC (rev 496)
@@ -0,0 +1,18 @@
+::msgcat::mcset ru "Plugin \"hidetabs\" can't load. Please enable tabs." "Плагин \"hidetabs\" не загружен. Включите поддержку вкладок."
+::msgcat::mcset ru "Conflict" "Сбой"
+::msgcat::mcset ru "Hidetabs plugin options." "Настройка плагина \"hidetabs\""
+::msgcat::mcset ru "Alpha value." "Значение прозрачности."
+::msgcat::mcset ru "Window construction." "Конструкция окна (вкладок)."
+::msgcat::mcset ru "Vertical" "Вертикально"
+::msgcat::mcset ru "Horisontal" "Горизонтально"
+::msgcat::mcset ru "Square" "В форме квадрата"
+::msgcat::mcset ru "Button width." "Ширина таба."
+::msgcat::mcset ru  "Button height." "Высота таба."
+::msgcat::mcset ru "Window moving." "Возможность передвигать окно."
+::msgcat::mcset ru "Topmost window." "Поверх всех окон."
+::msgcat::mcset ru "Show number of messages in toolbar." "Показывать число непрочитанных сообщений в тулбаре."
+::msgcat::mcset ru  "Key for toggle tabbar." "Клавиша / комбинация для переключения таббара."
+::msgcat::mcset ru "Key for toggle tabs menu." "Клавиша / комбинация для переключения окна."
+::msgcat::mcset ru "Tabs" "Вкладки"
+::msgcat::mcset ru "Messages: %s" "Сообщений: %s"
+::msgcat::mcset ru "Save last focus on button." "Запоминать последний выделенный таб."
\ No newline at end of file

Added: trunk/plugins/hidetabs/pixmaps/none-type.gif
===================================================================
(Binary files differ)


Property changes on: trunk/plugins/hidetabs/pixmaps/none-type.gif
___________________________________________________________________
Added: svn:mime-type
   + application/octet-stream



More information about the Tkabber-dev mailing list