changeset 2806:9e06acde819e

branch merge
author Andrew O. Shadoura <bugzilla@tut.by>
date Sat, 12 Jul 2008 03:39:55 +0300
parents 2d3594eaa18a (current diff) 11fb1503ee4b (diff)
children f06ec6936b7e
files
diffstat 23 files changed, 1695 insertions(+), 2382 deletions(-) [+]
line wrap: on
line diff
--- a/po/ja.po	Sat Jul 12 03:39:25 2008 +0300
+++ b/po/ja.po	Sat Jul 12 03:39:55 2008 +0300
@@ -14,7 +14,7 @@
 "Project-Id-Version: audacious-plugins HEAD\n"
 "Report-Msgid-Bugs-To: http://bugzilla.atheme.org/\n"
 "POT-Creation-Date: 2008-06-21 08:27+0300\n"
-"PO-Revision-Date: 2008-03-31 15:01+0900\n"
+"PO-Revision-Date: 2008-07-08 13:10+0900\n"
 "Last-Translator: dai <d+po@vdr.jp>\n"
 "Language-Team: Japanese <ja@li.org>\n"
 "MIME-Version: 1.0\n"
@@ -1483,7 +1483,7 @@
 
 #: src/amidi-plug/i_fileinfo.c:349
 msgid "  (invalid UTF-8)"
-msgstr "  (無効な UTF-8)"
+msgstr "  (不正な UTF-8)"
 
 #: src/amidi-plug/i_utils.c:43
 msgid "AMIDI-Plug - about"
@@ -2027,9 +2027,9 @@
 "\n"
 "No CD inserted, or inserted CD is not an audio CD.\n"
 msgstr ""
-"<b><big>演奏可能な CD が見つかりません.</big></b>\n"
-"\n"
-"CD が挿入されていないか, オーディオ CD ではありません.\n"
+"<b><big>演奏できる CD が見つかりませんでした.</big></b>\n"
+"\n"
+"CD が挿入されていないか, 挿入された CD はオーディオ CD ではありません.\n"
 
 #: src/cdaudio-ng/configure.c:155
 msgid "CD Audio Plugin Configuration"
@@ -2060,9 +2060,8 @@
 msgstr "サーバ: "
 
 #: src/cdaudio-ng/configure.c:205
-#, fuzzy
 msgid "Path: "
-msgstr "パターン: "
+msgstr "パス: "
 
 #: src/cdaudio-ng/configure.c:208
 msgid "Port: "
@@ -2154,9 +2153,8 @@
 "Shay Green <hotpop.com@blargg> によります."
 
 #: src/crystalizer/crystalizer.c:90
-#, fuzzy
 msgid "Configure Crystalizer"
-msgstr "エクストラステレオの設定"
+msgstr "Crystalizer の設定"
 
 #: src/crystalizer/crystalizer.c:92 src/stereo_plugin/stereo.c:94
 msgid "Effect intensity:"
@@ -2799,7 +2797,7 @@
 #: src/filewriter/mp3.c:982 src/filewriter/vorbis.c:274
 #: src/modplug/gui/interface.cxx:319 src/modplug/gui/modplug.glade:507
 msgid "Quality"
-msgstr "品質"
+msgstr "音質"
 
 #: src/filewriter/mp3.c:994
 msgid "Enable VBR/ABR"
@@ -2959,7 +2957,7 @@
 
 #: src/hotkey/gui.c:69 src/skins/ui_manager.c:177 src/skins/ui_manager.c:178
 msgid "Play"
-msgstr "演奏開始"
+msgstr "演奏"
 
 #: src/hotkey/gui.c:70
 msgid "Pause/Resume"
@@ -2967,7 +2965,7 @@
 
 #: src/hotkey/gui.c:71 src/skins/ui_manager.c:183 src/skins/ui_manager.c:184
 msgid "Stop"
-msgstr "演奏停止"
+msgstr "停止"
 
 #: src/hotkey/gui.c:72
 msgid "Next Track"
@@ -2995,7 +2993,7 @@
 
 #: src/hotkey/gui.c:78 src/skins/ui_manager.c:422 src/skins/ui_manager.c:423
 msgid "Jump to File"
-msgstr "指定ファイルへ移動"
+msgstr "指定したファイルへ移動"
 
 #: src/hotkey/gui.c:79
 msgid "Toggle Player Windows"
@@ -4524,6 +4522,15 @@
 "\n"
 "<b>subsong-num, subsong-id</b>"
 msgstr ""
+"<u>SID 特有のタプルフィールド:</u>\n"
+"\n"
+"<b>sid-format</b>\t\t- 特有のファイルフォーマット\n"
+"<b>sid-model</b>\t\t- 6581 か 8580\n"
+"<b>sid-speed</b>\t\t- タイミングか速さ: PAL/NTSC/etc.\n"
+"\n"
+"<u>他の \"特別な\" フィールド:</u>\n"
+"\n"
+"<b>subsong-num, subsong-id</b>"
 
 #: src/sid/xmms-sid.glade:2581 src/sid/xs_interface.c:1097
 msgid "Song title format:"
@@ -4692,140 +4699,138 @@
 
 #: src/skins/plugin.c:128
 msgid "About Skinned GUI"
-msgstr ""
+msgstr "スキン GUI について"
 
 #: src/skins/plugin.c:129
 msgid ""
 "Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
 "\n"
 msgstr ""
+"Copyright (c) 2008, by Tomasz Moń <desowin@gmail.com>\n"
+"\n"
 
 #: src/skins/skins_cfg.c:329
-#, fuzzy
 msgid "<b>_Fonts</b>"
-msgstr "<b>動作:</b>"
+msgstr "<b>フォント(_F)</b>"
 
 #: src/skins/skins_cfg.c:330
-#, fuzzy
 msgid "_Player:"
-msgstr "演奏時間:"
+msgstr "プレイヤ(_P):"
 
 #: src/skins/skins_cfg.c:330
 msgid "Select main player window font:"
-msgstr ""
+msgstr "メインウィンドウで使用するフォントの選択"
 
 #: src/skins/skins_cfg.c:331
-#, fuzzy
 msgid "_Playlist:"
-msgstr "プレイリストの選択"
+msgstr "プレイリスト(_P):"
 
 #: src/skins/skins_cfg.c:331
-#, fuzzy
 msgid "Select playlist font:"
-msgstr "プレイリストの選択"
+msgstr "プレイリストで使用するフォントの選択"
 
 #: src/skins/skins_cfg.c:332
-#, fuzzy
 msgid "Use Bitmap fonts if available"
-msgstr "有効ならば CDDB を使う"
+msgstr "可能ならばビットマップフォントを使用"
 
 #: src/skins/skins_cfg.c:332
 msgid ""
 "Use bitmap fonts if they are available. Bitmap fonts do not support Unicode "
 "strings."
 msgstr ""
+"可能ならばビットマップフォントを使用します. ビットマップフォントは Unicode 文"
+"字列をサポートしていません."
 
 #: src/skins/skins_cfg.c:333
-#, fuzzy
 msgid "<b>_Miscellaneous</b>"
-msgstr "<b>サービス</b>"
+msgstr "<b>その他(_M)</b>"
 
 #: src/skins/skins_cfg.c:334
 msgid "Show track numbers in playlist"
-msgstr ""
+msgstr "プレイリストにトラック番号を表示する"
 
 #: src/skins/skins_cfg.c:336
 msgid "Show separators in playlist"
-msgstr ""
+msgstr "プレイリストの区切り線を表示する"
 
 #: src/skins/skins_cfg.c:338
 msgid "Show window manager decoration"
-msgstr ""
+msgstr "ウィンドウマネージャ装飾を表示する"
 
 #: src/skins/skins_cfg.c:339
 msgid "This enables the window manager to show decorations for windows."
-msgstr ""
+msgstr "ウィンドウマネージャによるウィンドウ装飾を有効にします."
 
 #: src/skins/skins_cfg.c:340
 msgid "Use two-way text scroller"
-msgstr ""
+msgstr "双方向テキストスクロールを使う"
 
 #: src/skins/skins_cfg.c:341
 msgid ""
 "If selected, the file information text in the main window will scroll back "
 "and forth. If not selected, the text will only scroll in one direction."
 msgstr ""
+"これを使うと,メインウィンドウのファイル情報テキストが前後にスクロールしま"
+"す.そうでなければ,テキストは一方向のみにスクロールします."
 
 #: src/skins/skins_cfg.c:342
 msgid "Disable inline gtk theme"
-msgstr ""
+msgstr "インライン GTK テーマを無効にする"
 
 #: src/skins/skins_cfg.c:343
 msgid "Allow loading incomplete skins"
-msgstr ""
+msgstr "不完全なスキンの読み込みを許可する"
 
 #: src/skins/skins_cfg.c:344
 msgid ""
 "If selected, audacious won't refuse loading broken skins. Use only if your "
 "favourite skin doesn't work"
 msgstr ""
+"これを使うと,audacious は壊れたスキンの読み込みを拒絶しません.お気に入りの"
+"スキンが動かないときだけ使用してください."
 
 #: src/skins/skins_cfg.c:410
 msgid "Color Adjustment"
-msgstr ""
+msgstr "色補正"
 
 #: src/skins/skins_cfg.c:417
 msgid ""
 "Audacious allows you to alter the color balance of the skinned UI. The "
 "sliders below will allow you to do this."
-msgstr ""
+msgstr "以下のスライダを用いてスキン UI の色合いの変更ができます."
 
 #: src/skins/skins_cfg.c:427
-#, fuzzy
 msgid "Blue"
-msgstr "ブルース"
+msgstr "青"
 
 #: src/skins/skins_cfg.c:434
 msgid "Green"
-msgstr ""
+msgstr "緑"
 
 #: src/skins/skins_cfg.c:441
 msgid "Red"
-msgstr ""
+msgstr "赤"
 
 #: src/skins/skins_cfg.c:571
-#, fuzzy
 msgid "Audacious Skinned GUI Configuration"
-msgstr "Audacious OSD - 設定"
+msgstr "Audacious スキン GUI 設定"
 
 #: src/skins/skins_cfg.c:596
-#, fuzzy
 msgid "<b>_Skin</b>"
-msgstr "<b>動作:</b>"
+msgstr "<b>スキン(_S)</b>"
 
 #: src/skins/ui_equalizer.c:494
-#, fuzzy
 msgid "Audacious Equalizer"
-msgstr "ウィンドウ->イコライザー"
+msgstr "Audacious イコライザ"
 
 #: src/skins/ui_equalizer.c:794
-#, fuzzy, c-format
+#, c-format
 msgid "Error importing Winamp EQF file '%s'"
-msgstr "pixmap ファイルの読み込みエラー: %s"
+msgstr "Winamp EQF ファイル '%s' のインポートエラー"
 
 #: src/skins/ui_equalizer.c:1172
 msgid "Presets"
-msgstr ""
+msgstr "プリセット"
 
 #: src/skins/ui_main.c:392
 #, c-format
@@ -4833,57 +4838,49 @@
 msgstr "%s - Audacious"
 
 #: src/skins/ui_main.c:394 src/skins/ui_main.c:2397
-#, fuzzy
 msgid "Audacious"
-msgstr "%s - Audacious"
+msgstr "Audacious"
 
 #: src/skins/ui_main.c:641
-#, fuzzy
 msgid "VBR"
-msgstr "VBR/ABR"
+msgstr "VBR"
 
 #: src/skins/ui_main.c:659 src/skins/ui_main.c:663
-#, fuzzy
 msgid "stereo"
 msgstr "ステレオ"
 
 #: src/skins/ui_main.c:659 src/skins/ui_main.c:663
-#, fuzzy
 msgid "mono"
 msgstr "モノラル"
 
 #: src/skins/ui_main.c:957
 msgid "Can't jump to time when no track is being played.\n"
-msgstr ""
+msgstr "再生されるトラックがない時間へは移動できません.\n"
 
 #: src/skins/ui_main.c:972 src/skins/ui_manager.c:425
 #: src/skins/ui_manager.c:426
-#, fuzzy
 msgid "Jump to Time"
-msgstr "指定ファイルへ移動"
+msgstr "指定した時間へ移動"
 
 #: src/skins/ui_main.c:993
-#, fuzzy
 msgid "minutes:seconds"
-msgstr "分"
+msgstr "分:秒"
 
 #: src/skins/ui_main.c:1003
-#, fuzzy
 msgid "Track length:"
-msgstr "トラックのゲイン:"
+msgstr "トラックの合計時間:"
 
 #: src/skins/ui_main.c:1149
 msgid "Audacious - visibility warning"
-msgstr ""
+msgstr "Audacious - 可視警告"
 
 #: src/skins/ui_main.c:1152
-#, fuzzy
 msgid "Show main player window"
-msgstr "ネットワークウィンドウの表示"
+msgstr "メインウィンドウを表示する"
 
 #: src/skins/ui_main.c:1153
 msgid "Ignore"
-msgstr ""
+msgstr "無視"
 
 #: src/skins/ui_main.c:1159
 msgid ""
@@ -4892,14 +4889,18 @@
 "otherwise, you'll have to control it remotely via audtool or enabled plugins "
 "(such as the statusicon plugin)."
 msgstr ""
+"Audacious はすべてのウィンドウが隠された状態で開始されました.\n"
+"再度プレイヤウィンドウを表示するか,そのまま Audacious を操作するためには,"
+"audtool を用いるか statusicon のようなプラグインを有効にすることで遠隔操作し"
+"てください."
 
 #: src/skins/ui_main.c:1165
 msgid "Always ignore, show/hide is controlled remotely"
-msgstr ""
+msgstr "常に無視し,表示する/隠す は遠隔操作する"
 
 #: src/skins/ui_main.c:1210
 msgid "Audacious - broken GTK engine usage warning"
-msgstr ""
+msgstr "Audacious - 壊れた GTK エンジンの使用警告"
 
 #: src/skins/ui_main.c:1218
 #, c-format
@@ -4914,69 +4915,75 @@
 "\n"
 "To use these features, please consider using a different GTK theme engine."
 msgstr ""
+"<big><b>壊れた GTK エンジンが使われています</b></big>\n"
+"\n"
+"Audacious は GTK エンジンが使われていることを検出しました.\n"
+"\n"
+"テーマエンジン <i>%s</i> は最近のスキンで用いられている特徴と非互換です.非互"
+"換な特徴はこのセッションでは無効にされました.\n"
+"\n"
+"これらの特徴を用いるには, 他の GTK テーマエンジンを使うことを考慮してくださ"
+"い."
 
 #: src/skins/ui_main.c:1229
 msgid "Do not display this warning again"
-msgstr ""
+msgstr "次回からこの警告を表示しない"
 
 #: src/skins/ui_main.c:1253
 msgid "Enter location to play:"
-msgstr ""
+msgstr "演奏する位置の入力:"
 
 #: src/skins/ui_main.c:1497
 #, c-format
 msgid "Seek to: %d:%-2.2d/%d:%-2.2d (%d%%)"
-msgstr ""
+msgstr "移動先: %d:%-2.2d/%d:%-2.2d (%d%%)"
 
 #: src/skins/ui_main.c:1527
-#, fuzzy, c-format
+#, c-format
 msgid "Volume: %d%%"
-msgstr "音量: (%)"
+msgstr "音量: %d%%"
 
 #: src/skins/ui_main.c:1555
 #, c-format
 msgid "Balance: %d%% left"
-msgstr ""
+msgstr "バランス: %d%% 左"
 
 #: src/skins/ui_main.c:1559
 msgid "Balance: center"
-msgstr ""
+msgstr "バランス: 中央"
 
 #: src/skins/ui_main.c:1563
 #, c-format
 msgid "Balance: %d%% right"
-msgstr ""
+msgstr "バランス: %d%% 右"
 
 #: src/skins/ui_main.c:1881
-#, fuzzy
 msgid "Options Menu"
-msgstr "オプション"
+msgstr "オプションメニュー"
 
 #: src/skins/ui_main.c:1885
 msgid "Disable 'Always On Top'"
-msgstr ""
+msgstr "「常に最前面に配置」無効"
 
 #: src/skins/ui_main.c:1887
 msgid "Enable 'Always On Top'"
-msgstr ""
+msgstr "「常に最前面に配置」有効"
 
 #: src/skins/ui_main.c:1890
-#, fuzzy
 msgid "File Info Box"
-msgstr "ファイル情報"
+msgstr "ファイル情報ボックス"
 
 #: src/skins/ui_main.c:1894
 msgid "Disable 'GUI Scaling'"
-msgstr ""
+msgstr "「GUI スケーリング」無効"
 
 #: src/skins/ui_main.c:1896
-#, fuzzy
 msgid "Enable 'GUI Scaling'"
-msgstr "オーディオリサンプリングを有効にする"
+msgstr "「GUI スケーリング」有効"
 
 #: src/skins/ui_main.c:1899
 msgid "Visualization Menu"
-msgstr ""
+msgstr "視覚化メニュー"
 
 #: src/skins/ui_main.c:1946
 msgid ""
@@ -4987,65 +4994,68 @@
 "2. No other programs is blocking the soundcard.\n"
 "3. Your soundcard is configured properly.\n"
 msgstr ""
+"<b><big>オーディオデバイスを開けませんでした.</big></b>\n"
+"\n"
+"以下をチェックして下さい:\n"
+"1. 現在選択している出力プラグインが正しいか.\n"
+"2. お使いのサウンドカードをブロックしているアプリが他に存在しないか.\n"
+"3. お使いのサウンドカードが正しく設定されているか.\n"
 
 #: src/skins/ui_manager.c:53 src/skins/ui_manager.c:54
 msgid "Autoscroll Songname"
-msgstr ""
+msgstr "曲名の自動スクロール"
 
 #: src/skins/ui_manager.c:56 src/skins/ui_manager.c:57
 msgid "Stop after Current Song"
-msgstr ""
+msgstr "現在の曲の後に停止する"
 
 #: src/skins/ui_manager.c:59 src/skins/ui_manager.c:60
-#, fuzzy
 msgid "Peaks"
-msgstr "プランク"
+msgstr "ピーク"
 
 #: src/skins/ui_manager.c:62 src/skins/ui_manager.c:63
-#, fuzzy
 msgid "Repeat"
-msgstr "ビート"
+msgstr "リピート"
 
 #: src/skins/ui_manager.c:65 src/skins/ui_manager.c:66
 msgid "Shuffle"
-msgstr ""
+msgstr "シャッフル"
 
 #: src/skins/ui_manager.c:68 src/skins/ui_manager.c:69
 msgid "No Playlist Advance"
-msgstr ""
+msgstr "次の曲に進まない"
 
 #: src/skins/ui_manager.c:71 src/skins/ui_manager.c:72
 msgid "Show Player"
-msgstr ""
+msgstr "プレイヤを表示する"
 
 #: src/skins/ui_manager.c:74 src/skins/ui_manager.c:75
 msgid "Show Playlist Editor"
-msgstr ""
+msgstr "プレイリストエディタを表示する"
 
 #: src/skins/ui_manager.c:77 src/skins/ui_manager.c:78
-#, fuzzy
 msgid "Show Equalizer"
-msgstr "ウィンドウ->イコライザー"
+msgstr "イコライザを表示する"
 
 #: src/skins/ui_manager.c:80 src/skins/ui_manager.c:81
 msgid "Always on Top"
-msgstr ""
+msgstr "常に最前面に配置する"
 
 #: src/skins/ui_manager.c:83 src/skins/ui_manager.c:84
 msgid "Put on All Workspaces"
-msgstr ""
+msgstr "全ワークスペースに配置する"
 
 #: src/skins/ui_manager.c:86 src/skins/ui_manager.c:87
 msgid "Roll up Player"
-msgstr ""
+msgstr "プレイヤを巻き上げる"
 
 #: src/skins/ui_manager.c:89 src/skins/ui_manager.c:90
 msgid "Roll up Playlist Editor"
-msgstr ""
+msgstr "プレイリストエディタを巻き上げる"
 
 #: src/skins/ui_manager.c:92 src/skins/ui_manager.c:93
 msgid "Roll up Equalizer"
-msgstr ""
+msgstr "イコライザを巻き上げる"
 
 #: src/skins/ui_manager.c:95 src/sndstretch/sndstretch_xmms.c:375
 msgid "Scale"
@@ -5053,537 +5063,489 @@
 
 #: src/skins/ui_manager.c:96
 msgid "DoubleSize"
-msgstr ""
+msgstr "ダブルサイズ"
 
 #: src/skins/ui_manager.c:98 src/skins/ui_manager.c:99
 msgid "Easy Move"
-msgstr ""
+msgstr "簡単移動"
 
 #: src/skins/ui_manager.c:107
-#, fuzzy
 msgid "Analyzer"
-msgstr "スペクトラムアナライザ"
+msgstr "アナライザ"
 
 #: src/skins/ui_manager.c:108
-#, fuzzy
 msgid "Scope"
-msgstr "演奏停止"
+msgstr "スコープ"
 
 #: src/skins/ui_manager.c:109
 msgid "Voiceprint"
-msgstr ""
+msgstr "声紋"
 
 #: src/skins/ui_manager.c:110
 msgid "Off"
-msgstr ""
+msgstr "オフ"
 
 #: src/skins/ui_manager.c:114 src/skins/ui_manager.c:131
 #: src/skins/ui_manager.c:137
-#, fuzzy
 msgid "Normal"
-msgstr "フォーマット"
+msgstr "標準"
 
 #: src/skins/ui_manager.c:115 src/skins/ui_manager.c:132
-#, fuzzy
 msgid "Fire"
-msgstr "サティア"
+msgstr "ファイア"
 
 #: src/skins/ui_manager.c:116
 msgid "Vertical Lines"
-msgstr ""
+msgstr "垂直ライン"
 
 #: src/skins/ui_manager.c:120
-#, fuzzy
 msgid "Lines"
-msgstr "分"
+msgstr "ライン"
 
 #: src/skins/ui_manager.c:121
-#, fuzzy
 msgid "Bars"
-msgstr "ベース"
+msgstr "バー"
 
 #: src/skins/ui_manager.c:125
-#, fuzzy
 msgid "Dot Scope"
-msgstr "ループしない"
+msgstr "ドット"
 
 #: src/skins/ui_manager.c:126
 msgid "Line Scope"
-msgstr ""
+msgstr "ライン"
 
 #: src/skins/ui_manager.c:127
 msgid "Solid Scope"
-msgstr ""
+msgstr "ソリッド"
 
 #: src/skins/ui_manager.c:133
 msgid "Ice"
-msgstr ""
+msgstr "アイス"
 
 #: src/skins/ui_manager.c:138
 msgid "Smooth"
-msgstr ""
+msgstr "スムーズ"
 
 #: src/skins/ui_manager.c:142
 msgid "Full (~50 fps)"
-msgstr ""
+msgstr "1:1 (〜50 fps)"
 
 #: src/skins/ui_manager.c:143
 msgid "Half (~25 fps)"
-msgstr ""
+msgstr "1:2 (〜25 fps)"
 
 #: src/skins/ui_manager.c:144
 msgid "Quarter (~13 fps)"
-msgstr ""
+msgstr "1:4 (〜13 fps)"
 
 #: src/skins/ui_manager.c:145
 msgid "Eighth (~6 fps)"
-msgstr ""
+msgstr "1:8 (〜6 fps)"
 
 #: src/skins/ui_manager.c:149 src/skins/ui_manager.c:157
-#, fuzzy
 msgid "Slowest"
-msgstr "ショーチューン"
+msgstr "最も遅い"
 
 #: src/skins/ui_manager.c:150 src/skins/ui_manager.c:158
-#, fuzzy
 msgid "Slow"
-msgstr "低"
+msgstr "遅い"
 
 #: src/skins/ui_manager.c:151 src/skins/ui_manager.c:159
-#, fuzzy
 msgid "Medium"
 msgstr "中"
 
 #: src/skins/ui_manager.c:152 src/skins/ui_manager.c:160
-#, fuzzy
 msgid "Fast"
-msgstr "フォーマット"
+msgstr "早い"
 
 #: src/skins/ui_manager.c:153 src/skins/ui_manager.c:161
 msgid "Fastest"
-msgstr ""
+msgstr "最も早い"
 
 #: src/skins/ui_manager.c:165
 msgid "Time Elapsed"
-msgstr ""
+msgstr "経過時間を表示する"
 
 #: src/skins/ui_manager.c:166
 msgid "Time Remaining"
-msgstr ""
+msgstr "残り時間を表示する"
 
 #: src/skins/ui_manager.c:180 src/skins/ui_manager.c:181
-#, fuzzy
 msgid "Pause"
-msgstr "演奏停止"
+msgstr "一時停止"
 
 #: src/skins/ui_manager.c:186 src/skins/ui_manager.c:187
-#, fuzzy
 msgid "Previous"
-msgstr "前のトラック"
+msgstr "前の曲"
 
 #: src/skins/ui_manager.c:189 src/skins/ui_manager.c:190
-#, fuzzy
 msgid "Next"
-msgstr "文字"
+msgstr "次の曲"
 
 #: src/skins/ui_manager.c:195
-#, fuzzy
 msgid "Visualization"
-msgstr "組織:"
+msgstr "視覚化"
 
 #: src/skins/ui_manager.c:196
 msgid "Visualization Mode"
-msgstr ""
+msgstr "視覚化モード"
 
 #: src/skins/ui_manager.c:197
 msgid "Analyzer Mode"
-msgstr ""
+msgstr "アナライザモード"
 
 #: src/skins/ui_manager.c:198
 msgid "Scope Mode"
-msgstr ""
+msgstr "スコープモード"
 
 #: src/skins/ui_manager.c:199
 msgid "Voiceprint Mode"
-msgstr ""
+msgstr "声紋モード"
 
 #: src/skins/ui_manager.c:200
 msgid "WindowShade VU Mode"
-msgstr ""
+msgstr "WindowShade VU モード"
 
 #: src/skins/ui_manager.c:201
 msgid "Refresh Rate"
-msgstr ""
+msgstr "リフレッシュレート"
 
 #: src/skins/ui_manager.c:202
 msgid "Analyzer Falloff"
-msgstr ""
+msgstr "アナライザ フォールオフ"
 
 #: src/skins/ui_manager.c:203
 msgid "Peaks Falloff"
-msgstr ""
+msgstr "ピーク フォールオフ"
 
 #: src/skins/ui_manager.c:208
-#, fuzzy
 msgid "Playlist"
-msgstr "プレイリストの選択"
+msgstr "プレイリスト"
 
 #: src/skins/ui_manager.c:210 src/skins/ui_manager.c:211
-#, fuzzy
 msgid "New Playlist"
-msgstr "プレイリストの選択"
+msgstr "新しいプレイリスト"
 
 #: src/skins/ui_manager.c:213 src/skins/ui_manager.c:214
-#, fuzzy
 msgid "Select Next Playlist"
-msgstr "プレイリストの選択"
+msgstr "次のプレイリストを選択"
 
 #: src/skins/ui_manager.c:216 src/skins/ui_manager.c:217
-#, fuzzy
 msgid "Select Previous Playlist"
-msgstr "プレイリストの選択"
+msgstr "前のプレイリストを選択"
 
 #: src/skins/ui_manager.c:219 src/skins/ui_manager.c:220
-#, fuzzy
 msgid "Delete Playlist"
-msgstr "プレイリストの選択"
+msgstr "プレイリストの削除"
 
 #: src/skins/ui_manager.c:222
-#, fuzzy
 msgid "Load List"
-msgstr "読み込み"
+msgstr "プレイリストの読み込み"
 
 #: src/skins/ui_manager.c:223
 msgid "Loads a playlist file into the selected playlist."
-msgstr ""
+msgstr "選択したプレイリストにプレイリストファイルを読み込みます."
 
 #: src/skins/ui_manager.c:225
-#, fuzzy
 msgid "Save List"
-msgstr "保存"
+msgstr "プレイリストの保存"
 
 #: src/skins/ui_manager.c:226
-#, fuzzy
 msgid "Saves the selected playlist."
-msgstr "プレイリストの選択"
+msgstr "選択したプレイリストを保存します."
 
 #: src/skins/ui_manager.c:228
-#, fuzzy
 msgid "Save Default List"
-msgstr "デフォルト (%s)"
+msgstr "デフォルトのプレイリストの保存"
 
 #: src/skins/ui_manager.c:229
 msgid "Saves the selected playlist to the default location."
-msgstr ""
+msgstr "選択したプレイリストをデフォルト位置に保存します."
 
 #: src/skins/ui_manager.c:232
 msgid "Refresh List"
-msgstr ""
+msgstr "プレイリストの更新"
 
 #: src/skins/ui_manager.c:233
 msgid "Refreshes metadata associated with a playlist entry."
-msgstr ""
+msgstr "プレイリストのエントリに関連付けられたメタデータを更新します."
 
 #: src/skins/ui_manager.c:236
 msgid "List Manager"
-msgstr ""
+msgstr "プレイリストマネージャ"
 
 #: src/skins/ui_manager.c:237
 msgid "Opens the playlist manager."
-msgstr ""
+msgstr "プレイリストマネージャを開きます."
 
 #: src/skins/ui_manager.c:243
 msgid "View"
-msgstr ""
+msgstr "表示"
 
 #: src/skins/ui_manager.c:247
 msgid "Add Internet Address..."
-msgstr ""
+msgstr "インターネットアドレスの追加..."
 
 #: src/skins/ui_manager.c:248
 msgid "Adds a remote track to the playlist."
-msgstr ""
+msgstr "リモートトラックをプレイリストに追加します."
 
 #: src/skins/ui_manager.c:251
 msgid "Add Files..."
-msgstr ""
+msgstr "ファイルの追加..."
 
 #: src/skins/ui_manager.c:252
-#, fuzzy
 msgid "Adds files to the playlist."
-msgstr "サブチューンをプレイリストに追加"
+msgstr "ファイルをプレイリストに追加します."
 
 #: src/skins/ui_manager.c:257
 msgid "Search and Select"
-msgstr ""
+msgstr "検索と選択"
 
 #: src/skins/ui_manager.c:258
 msgid ""
 "Searches the playlist and selects playlist entries based on specific "
 "criteria."
-msgstr ""
+msgstr "プレイリストを検索し, 特定の判定基準に基いて選択します."
 
 #: src/skins/ui_manager.c:261
-#, fuzzy
 msgid "Invert Selection"
-msgstr "フォーマット選択"
+msgstr "選択範囲の反転"
 
 #: src/skins/ui_manager.c:262
 msgid "Inverts the selected and unselected entries."
-msgstr ""
+msgstr "エントリの選択と未選択を反転します."
 
 #: src/skins/ui_manager.c:265
-#, fuzzy
 msgid "Select All"
-msgstr "プレイリストの選択"
+msgstr "全て選択"
 
 #: src/skins/ui_manager.c:266
 msgid "Selects all of the playlist entries."
-msgstr ""
+msgstr "プレイリストの全てのエントリを選択します."
 
 #: src/skins/ui_manager.c:269
-#, fuzzy
 msgid "Select None"
-msgstr "スキンファイル選択"
+msgstr "未選択にする"
 
 #: src/skins/ui_manager.c:270
 msgid "Deselects all of the playlist entries."
-msgstr ""
+msgstr "プレイリストの全てのエントリを未選択にします."
 
 #: src/skins/ui_manager.c:275
-#, fuzzy
 msgid "Remove All"
-msgstr "削除"
+msgstr "全て削除"
 
 #: src/skins/ui_manager.c:276
 msgid "Removes all entries from the playlist."
-msgstr ""
+msgstr "全てのエントリをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:279
 msgid "Clear Queue"
-msgstr ""
+msgstr "キューのクリア"
 
 #: src/skins/ui_manager.c:280
 msgid "Clears the queue associated with this playlist."
-msgstr ""
+msgstr "プレイリストに関連付けられたキューをクリアします."
 
 #: src/skins/ui_manager.c:283
 msgid "Remove Unavailable Files"
-msgstr ""
+msgstr "利用不可ファイルの削除"
 
 #: src/skins/ui_manager.c:284
 msgid "Removes unavailable files from the playlist."
-msgstr ""
+msgstr "利用不可ファイルをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:287
-#, fuzzy
 msgid "Remove Duplicates"
-msgstr "ドライブの削除"
+msgstr "重複エントリの削除"
 
 #: src/skins/ui_manager.c:289 src/skins/ui_manager.c:321
 #: src/skins/ui_manager.c:351
-#, fuzzy
 msgid "By Title"
 msgstr "タイトル"
 
 #: src/skins/ui_manager.c:290
 msgid "Removes duplicate entries from the playlist by title."
-msgstr ""
+msgstr "重複するタイトルのエントリをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:293 src/skins/ui_manager.c:329
 #: src/skins/ui_manager.c:359
-#, fuzzy
 msgid "By Filename"
 msgstr "ファイル名"
 
 #: src/skins/ui_manager.c:294
 msgid "Removes duplicate entries from the playlist by filename."
-msgstr ""
+msgstr "重複するファイル名のエントリをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:297 src/skins/ui_manager.c:333
 #: src/skins/ui_manager.c:363
-#, fuzzy
 msgid "By Path + Filename"
-msgstr "ファイル名"
+msgstr "パス名とファイル名"
 
 #: src/skins/ui_manager.c:298
 msgid "Removes duplicate entries from the playlist by their full path."
-msgstr ""
+msgstr "重複するパス名とファイル名のエントリをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:301
 msgid "Remove Unselected"
-msgstr ""
+msgstr "選択していないエントリの削除"
 
 #: src/skins/ui_manager.c:302
 msgid "Remove unselected entries from the playlist."
-msgstr ""
+msgstr "選択していないエントリをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:305
 msgid "Remove Selected"
-msgstr ""
+msgstr "選択したエントリの削除"
 
 #: src/skins/ui_manager.c:306
 msgid "Remove selected entries from the playlist."
-msgstr ""
+msgstr "選択したエントリをプレイリストから削除します."
 
 #: src/skins/ui_manager.c:311
 msgid "Randomize List"
-msgstr ""
+msgstr "プレイリストをランダムにする"
 
 #: src/skins/ui_manager.c:312
 msgid "Randomizes the playlist."
-msgstr ""
+msgstr "プレイリストの順序をランダムにします."
 
 #: src/skins/ui_manager.c:315
 msgid "Reverse List"
-msgstr ""
+msgstr "プレイリストを逆順にする"
 
 #: src/skins/ui_manager.c:316
 msgid "Reverses the playlist."
-msgstr ""
+msgstr "プレイリストの順序を逆順にします."
 
 #: src/skins/ui_manager.c:319
-#, fuzzy
 msgid "Sort List"
-msgstr "アーティスト:"
+msgstr "プレイリストのソート"
 
 #: src/skins/ui_manager.c:322 src/skins/ui_manager.c:352
 msgid "Sorts the list by title."
-msgstr ""
+msgstr "タイトル順でプレイリストをソートします."
 
 #: src/skins/ui_manager.c:325 src/skins/ui_manager.c:355
-#, fuzzy
 msgid "By Artist"
-msgstr "アーティスト:"
+msgstr "アーティスト"
 
 #: src/skins/ui_manager.c:326 src/skins/ui_manager.c:356
 msgid "Sorts the list by artist."
-msgstr ""
+msgstr "アーティスト順でプレイリストをソートします."
 
 #: src/skins/ui_manager.c:330 src/skins/ui_manager.c:360
 msgid "Sorts the list by filename."
-msgstr ""
+msgstr "ファイル名順でプレイリストをソートします."
 
 #: src/skins/ui_manager.c:334 src/skins/ui_manager.c:364
 msgid "Sorts the list by full pathname."
-msgstr ""
+msgstr "ファイルのパス名でプレイリストをソートします."
 
 #: src/skins/ui_manager.c:337 src/skins/ui_manager.c:367
-#, fuzzy
 msgid "By Date"
-msgstr "日付:"
+msgstr "日付"
 
 #: src/skins/ui_manager.c:338 src/skins/ui_manager.c:368
 msgid "Sorts the list by modification time."
-msgstr ""
+msgstr "変更時間でプレイリストをソートします."
 
 #: src/skins/ui_manager.c:341 src/skins/ui_manager.c:371
-#, fuzzy
 msgid "By Track Number"
-msgstr "トラック番号:"
+msgstr "トラック番号"
 
 #: src/skins/ui_manager.c:342 src/skins/ui_manager.c:372
 msgid "Sorts the list by track number."
-msgstr ""
+msgstr "トラック番号順でプレイリストをソートします."
 
 #: src/skins/ui_manager.c:345 src/skins/ui_manager.c:375
-#, fuzzy
 msgid "By Playlist Entry"
-msgstr "高速なプレイリスト情報"
+msgstr "プレイリストのエントリ"
 
 #: src/skins/ui_manager.c:346 src/skins/ui_manager.c:376
 msgid "Sorts the list by playlist entry."
-msgstr ""
+msgstr "プレイリストのエントリ順でソートします."
 
 #: src/skins/ui_manager.c:349
-#, fuzzy
 msgid "Sort Selected"
-msgstr "フォーマット選択"
+msgstr "選択範囲のソート"
 
 #: src/skins/ui_manager.c:385
-#, fuzzy
 msgid "File"
-msgstr "フィルタ"
+msgstr "ファイル"
 
 #: src/skins/ui_manager.c:388
 msgid "Plugin Services"
-msgstr ""
+msgstr "プラグインサービス"
 
 #: src/skins/ui_manager.c:390 src/skins/ui_manager.c:393
-#, fuzzy
 msgid "View Track Details"
-msgstr "トラックゲインを使用する"
+msgstr "トラックの詳細"
 
 #: src/skins/ui_manager.c:391 src/skins/ui_manager.c:394
 msgid "View track details"
-msgstr ""
+msgstr "トラックの詳細"
 
 #: src/skins/ui_manager.c:396 src/skins/ui_manager.c:397
-#, fuzzy
 msgid "About Audacious"
-msgstr "LIRC Audacious プラグインについて"
+msgstr "Audacious について"
 
 #: src/skins/ui_manager.c:399
-#, fuzzy
 msgid "Play File"
-msgstr "演奏時間:"
+msgstr "ファイルを演奏"
 
 #: src/skins/ui_manager.c:400
-#, fuzzy
 msgid "Load and play a file"
-msgstr "プレイヤ起動時に SF を読み込む"
+msgstr "ファイルを読み込んで演奏"
 
 #: src/skins/ui_manager.c:402
-#, fuzzy
 msgid "Play Location"
-msgstr "場所:"
+msgstr "場所を演奏"
 
 #: src/skins/ui_manager.c:403
-#, fuzzy
 msgid "Play media from the selected location"
-msgstr "選択されたアクションの確認"
+msgstr "選択した場所からメディアを演奏"
 
 #: src/skins/ui_manager.c:405
 msgid "Plugin services"
-msgstr ""
+msgstr "プラグインサービス"
 
 #: src/skins/ui_manager.c:407
 msgid "Preferences"
-msgstr ""
+msgstr "設定"
 
 #: src/skins/ui_manager.c:408
 msgid "Open preferences window"
-msgstr ""
+msgstr "設定ウィンドウを開く"
 
 #: src/skins/ui_manager.c:410
-#, fuzzy
 msgid "_Quit"
-msgstr "品質"
+msgstr "終了(_Q)"
 
 #: src/skins/ui_manager.c:411
-#, fuzzy
 msgid "Quit Audacious"
-msgstr "%s - Audacious"
+msgstr "Audacious を終了する"
 
 #: src/skins/ui_manager.c:413 src/skins/ui_manager.c:414
 msgid "Set A-B"
-msgstr ""
+msgstr "A-B をセット"
 
 #: src/skins/ui_manager.c:416 src/skins/ui_manager.c:417
 msgid "Clear A-B"
-msgstr ""
+msgstr "A-B をクリア"
 
 #: src/skins/ui_manager.c:419 src/skins/ui_manager.c:420
 msgid "Jump to Playlist Start"
-msgstr ""
+msgstr "最初の曲へ移動"
 
 #: src/skins/ui_manager.c:428
 msgid "Queue Toggle"
-msgstr ""
+msgstr "キューを切り替える"
 
 #: src/skins/ui_manager.c:429
 msgid "Enables/disables the entry in the playlist's queue."
-msgstr ""
+msgstr "プレイリストのキューに入っているエントリの有効/無効を切り替えます."
 
 #: src/skins/ui_manager.c:436
 msgid "Load"
@@ -5591,105 +5553,97 @@
 
 #: src/skins/ui_manager.c:441 src/skins/ui_manager.c:462
 #: src/skins/ui_manager.c:477
-#, fuzzy
 msgid "Preset"
-msgstr "ポート"
+msgstr "プリセット"
 
 #: src/skins/ui_manager.c:442
 msgid "Load preset"
-msgstr ""
+msgstr "プリセットの読み込み"
 
 #: src/skins/ui_manager.c:444 src/skins/ui_manager.c:465
 #: src/skins/ui_manager.c:480
 msgid "Auto-load preset"
-msgstr ""
+msgstr "自動読み込みのプリセット"
 
 #: src/skins/ui_manager.c:445
 msgid "Load auto-load preset"
-msgstr ""
+msgstr "自動読み込みのプリセット"
 
 #: src/skins/ui_manager.c:448
-#, fuzzy
 msgid "Load default preset into equalizer"
-msgstr "デフォルト値を読み込む"
+msgstr "イコライザにデフォルトプリセットを読み込む"
 
 #: src/skins/ui_manager.c:450
-#, fuzzy
 msgid "Zero"
-msgstr "レトロ"
+msgstr "ゼロ"
 
 #: src/skins/ui_manager.c:451
 msgid "Set equalizer preset levels to zero"
-msgstr ""
+msgstr "イコライザプリセットレベルをゼロにセット"
 
 #: src/skins/ui_manager.c:453
-#, fuzzy
 msgid "From file"
-msgstr "プロファイル: %s"
+msgstr "ファイル"
 
 #: src/skins/ui_manager.c:454
-#, fuzzy
 msgid "Load preset from file"
-msgstr "ファイルから読み込めません\n"
+msgstr "ファイルからプリセットを読み込み"
 
 #: src/skins/ui_manager.c:456
 msgid "From WinAMP EQF file"
-msgstr ""
+msgstr "WinAMP EQF ファイル"
 
 #: src/skins/ui_manager.c:457
 msgid "Load preset from WinAMP EQF file"
-msgstr ""
+msgstr "WinAMP EQF ファイルからプリセットを読み込み"
 
 #: src/skins/ui_manager.c:459
 msgid "WinAMP Presets"
-msgstr ""
+msgstr "WinAMP プリセット"
 
 #: src/skins/ui_manager.c:460
 msgid "Import WinAMP presets"
-msgstr ""
+msgstr "WinAMP プリセット"
 
 #: src/skins/ui_manager.c:463
 msgid "Save preset"
-msgstr ""
+msgstr "プリセットの保存"
 
 #: src/skins/ui_manager.c:466
 msgid "Save auto-load preset"
-msgstr ""
+msgstr "自動読み込みのプリセットの保存"
 
 #: src/skins/ui_manager.c:469
-#, fuzzy
 msgid "Save default preset"
-msgstr "デフォルト値を読み込む"
+msgstr "デフォルトプリセットの保存"
 
 #: src/skins/ui_manager.c:471
-#, fuzzy
 msgid "To file"
-msgstr "STIL ファイル:"
+msgstr "ファイル"
 
 #: src/skins/ui_manager.c:472
 msgid "Save preset to file"
-msgstr ""
+msgstr "プリセットをファイルへ保存"
 
 #: src/skins/ui_manager.c:474
 msgid "To WinAMP EQF file"
-msgstr ""
+msgstr "WinAMP EQF ファイル"
 
 #: src/skins/ui_manager.c:475
 msgid "Save preset to WinAMP EQF file"
-msgstr ""
+msgstr "プリセットを WinAMP EQF ファイルへ保存"
 
 #: src/skins/ui_manager.c:478
-#, fuzzy
 msgid "Delete preset"
-msgstr "削除"
+msgstr "プリセットの削除"
 
 #: src/skins/ui_manager.c:481
 msgid "Delete auto-load preset"
-msgstr ""
+msgstr "自動読み込みのプリセットの削除"
 
 #: src/skins/ui_playlist.c:454
 msgid "Search entries in active playlist"
-msgstr ""
+msgstr "有効になっているプレイリストのエントリを検索"
 
 #: src/skins/ui_playlist.c:462
 msgid ""
@@ -5698,43 +5652,43 @@
 "expressions work, simply insert a literal portion of what you're searching "
 "for."
 msgstr ""
+"1つ以上の項目を埋めることによって, プレイリストのエントリを選択します. 項目は"
+"正規表現が使え, 大文字と小文字を区別しません. 正規表現がどのように動作するか"
+"わからない場合は, 単純に検索しようとしているものの文字を入力します."
 
 #: src/skins/ui_playlist.c:477
-#, fuzzy
 msgid "Album: "
-msgstr "アルバム名:"
+msgstr "アルバム名: "
 
 #: src/skins/ui_playlist.c:484
-#, fuzzy
 msgid "Artist: "
-msgstr "アーティスト:"
+msgstr "アーティスト: "
 
 #: src/skins/ui_playlist.c:491
-#, fuzzy
 msgid "Filename: "
-msgstr "ファイル名:"
+msgstr "ファイル名: "
 
 #: src/skins/ui_playlist.c:499
 msgid "Clear previous selection before searching"
-msgstr ""
+msgstr "検索前に以前の選択をクリア"
 
 #: src/skins/ui_playlist.c:502
 msgid "Automatically toggle queue for matching entries"
-msgstr ""
+msgstr "マッチしたエントリのキューを自動的にトグル"
 
 #: src/skins/ui_playlist.c:505
 msgid "Create a new playlist with matching entries"
-msgstr ""
+msgstr "マッチしたエントリで新しいプレイリストを作成"
 
 #: src/skins/ui_playlist.c:724
 #, c-format
 msgid "Error writing playlist \"%s\": %s"
-msgstr ""
+msgstr "プレイリスト \"%s\" を書き込む際にエラー: %s"
 
 #: src/skins/ui_playlist.c:746
 #, c-format
 msgid "%s already exist. Continue?"
-msgstr ""
+msgstr "%s は既に存在しています. 続行しますか?"
 
 #: src/skins/ui_playlist.c:761
 #, c-format
@@ -5743,88 +5697,86 @@
 "\n"
 "Unknown file type for '%s'.\n"
 msgstr ""
+"<b><big>プレイリストを保存できません!</big></b>\n"
+"\n"
+"%s のファイルの種類が不明です.\n"
 
 #: src/skins/ui_playlist.c:887
-#, fuzzy
 msgid "Save as Static Playlist"
-msgstr "プレイリストの選択"
+msgstr "スタティックプレイリストとして保存"
 
 #: src/skins/ui_playlist.c:894
 msgid "Use Relative Path"
-msgstr ""
+msgstr "相対パスを使う"
 
 #: src/skins/ui_playlist.c:916
-#, fuzzy
 msgid "Load Playlist"
-msgstr "高速なプレイリスト情報"
+msgstr "プレイリストの読み込み"
 
 #: src/skins/ui_playlist.c:929
-#, fuzzy
 msgid "Save Playlist"
-msgstr "プレイリストの選択"
+msgstr "プレイリストの保存"
 
 #: src/skins/ui_playlist.c:1497
-#, fuzzy
 msgid "Audacious Playlist Editor"
-msgstr "高速なプレイリスト情報"
+msgstr "Audacious プレイリストエディタ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:377
 msgid "PREAMP"
-msgstr ""
+msgstr "プリアンプ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:377
 msgid "60HZ"
-msgstr ""
+msgstr "60HZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:377
 msgid "170HZ"
-msgstr ""
+msgstr "170HZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:378
 msgid "310HZ"
-msgstr ""
+msgstr "310HZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:378
-#, fuzzy
 msgid "600HZ"
-msgstr "11000 Hz"
+msgstr "600HZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:378
 msgid "1KHZ"
-msgstr ""
+msgstr "1KHZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:379
 msgid "3KHZ"
-msgstr ""
+msgstr "3KHZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:379
 msgid "6KHZ"
-msgstr ""
+msgstr "6KHZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:379
 msgid "12KHZ"
-msgstr ""
+msgstr "12KHZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:380
 msgid "14KHZ"
-msgstr ""
+msgstr "14KHZ"
 
 #: src/skins/ui_skinned_equalizer_slider.c:380
 msgid "16KHZ"
-msgstr ""
+msgstr "16KHZ"
 
 #: src/skins/ui_skinselector.c:178
 msgid "Archived Winamp 2.x skin"
-msgstr ""
+msgstr "Archived Winamp 2.x スキン"
 
 #: src/skins/ui_skinselector.c:183
 msgid "Unarchived Winamp 2.x skin"
-msgstr ""
+msgstr "Unarchived Winamp 2.x スキン"
 
 #: src/skins/util.c:1132
-#, fuzzy, c-format
+#, c-format
 msgid "Could not create directory (%s): %s\n"
-msgstr "sidFilename ('%s') を割り当てられませんでした\n"
+msgstr "ディレクトリ (%s) を作成できませんでした: %s\n"
 
 #: src/sndfile/plugin.c:554
 msgid "About sndfile plugin"
@@ -6387,1428 +6339,3 @@
 "ru>) の\n"
 "Tony Vroon <chainsaw@gentoo.org> による Audacious への適用.\n"
 "このプラグインは以下のソースコードを元とする: "
-
-#~ msgid "Descriptions of <i>SID-specific</i> Tuplez fields go here. <b>:D</b>"
-#~ msgstr "<i>SID 特有</i>のタプルフィールドはここに記載されます.<b>:D</b>"
-
-#~ msgid "Error initializing song-length database!\n"
-#~ msgstr "曲の長さデータベース初期化エラー!\n"
-
-#~ msgid "Error initializing STIL database!\n"
-#~ msgstr "STIL データベース初期化エラー!\n"
-
-#~ msgid "Couldn't allocate memory for audio data buffer!\n"
-#~ msgstr "オーディオデータバッファのメモリを割り当てられませんでした!\n"
-
-#~ msgid "Couldn't allocate memory for audio oversampling buffer!\n"
-#~ msgstr "オーバーサンプリングバッファのメモリを割り当てられませんでした!\n"
-
-#~ msgid "Couldn't initialize SID-tune '%s' (sub-tune #%i)!\n"
-#~ msgstr "SID-tune '%s' (サブチューン #%i)を初期化できませんでした!\n"
-
-#~ msgid "Couldn't open XMMS audio output (fmt=%x, freq=%i, nchan=%i)!\n"
-#~ msgstr ""
-#~ "XMMS オーディオ出力 (fmt=%x, freq=%i, nchan=%i) を開けませんでした!\n"
-
-#~ msgid "Oversampling rate-conversion pass failed.\n"
-#~ msgstr "オーバーサンプリングレート変換パスに失敗しました.\n"
-
-#~ msgid "Allocation of sid2FilterPresets structure failed!\n"
-#~ msgstr "sid2FilterPresets 構造体の割り当てに失敗しました!\n"
-
-#~ msgid "Warning: Could not set filter curve widget points!\n"
-#~ msgstr "警告: フィルタ曲線の分点がセットできませんでした!\n"
-
-#~ msgid "Error allocating new node. Fatal error.\n"
-#~ msgstr "新しいノードの割り当てに失敗. 致命的エラー.\n"
-
-#~ msgid "'=' expected on column #%d.\n"
-#~ msgstr "'=' は #%d 列にあることを期待されます.\n"
-
-#~ msgid "Could not allocate memory for node.\n"
-#~ msgstr "ノードにメモリを割り当てられませんでした.\n"
-
-#~ msgid "Could not open SongLengthDB '%s'\n"
-#~ msgstr "曲の長さ DB '%s' を開けませんでした.\n"
-
-#~ msgid "Invalid MD5-hash in SongLengthDB file '%s' line #%d!\n"
-#~ msgstr "曲の長さ DB ファイル '%s' の #%d 行の MD5 ハッシュが無効です!\n"
-
-#~ msgid "Invalid entry in SongLengthDB file '%s' line #%d!\n"
-#~ msgstr "曲の長さ DB ファイル '%s' の #%d 行のエントリが無効です!\n"
-
-#~ msgid "Invalid line in SongLengthDB file '%s' line #%d\n"
-#~ msgstr "曲の長さ DB ファイル '%s' の #%d 行が無効です!\n"
-
-#~ msgid "Not a PSID or RSID file '%s'\n"
-#~ msgstr "ファイル '%s' は PSID でも RSID でもありません.\n"
-
-#~ msgid "Error reading SID file header from '%s'\n"
-#~ msgstr "'%s' からの SID ファイルヘッダ読み込みでエラーが発生しました.\n"
-
-#~ msgid "Error allocating temp data buffer for file '%s'\n"
-#~ msgstr ""
-#~ "ファイル '%s' の一時データバッファの割り当てでエラーが発生しました.\n"
-
-#~ msgid "[SIDPlay1] Could not initialize emulation engine.\n"
-#~ msgstr "[SIDPlay1] エミュレーションエンジンを初期化できませんでした.\n"
-
-#~ msgid "[SIDPlay1] Endianess verification failed.\n"
-#~ msgstr "[SIDPlay1] エンディアンの検証に失敗しました.\n"
-
-#~ msgid "[SIDPlay1] Emulator engine configuration failed!\n"
-#~ msgstr "[SIDPlay1] エミュレータエンジンの設定に失敗しました!\n"
-
-#~ msgid "[SIDPlay1] Could not initialize SIDTune object.\n"
-#~ msgstr "[SIDPlay1] SIDTune オブジェクトを初期化できませんでした.\n"
-
-#~ msgid ""
-#~ "[SIDPlay1] SID-tune struct pointer was NULL. This should not happen, "
-#~ "report to XMMS-SID author.\n"
-#~ msgstr ""
-#~ "[SIDPlay1] SID-tune 構造体ポインタが NULL でした. これは発生しないはずなの"
-#~ "で, XMMS-SID 作者に報告してください.\n"
-
-#~ msgid ""
-#~ "[SIDPlay1] SID-tune status check failed. This should not happen, report "
-#~ "to XMMS-SID author.\n"
-#~ msgstr ""
-#~ "[SIDPlay1] SID-tune 状態確認に失敗しました. これは発生しないはずなので, "
-#~ "XMMS-SID 作者に報告してください.\n"
-
-#~ msgid "[SIDPlay2] Could not initialize emulation engine.\n"
-#~ msgstr "[SIDPlay2] エミュレーションエンジンを初期化できませんでした.\n"
-
-#~ msgid "[SIDPlay2] Invalid number of filter curve points (%d > %d)\n"
-#~ msgstr "[SIDPlay2] フィルタ曲線の分点の数が不正です (%d > %d)\n"
-
-#~ msgid "reSID->create() failed.\n"
-#~ msgstr "reSID->create() に失敗しました.\n"
-
-#~ msgid "reSID->filter(%d) failed.\n"
-#~ msgstr "reSID->filter(%d) に失敗しました.\n"
-
-#~ msgid "reSID->sampling(%d) failed.\n"
-#~ msgstr "reSID->sampling(%d) に失敗しました.\n"
-
-#~ msgid "reSID->filter(NULL) failed.\n"
-#~ msgstr "reSID->filter(NULL) に失敗しました.\n"
-
-#~ msgid "hardSID->create() failed.\n"
-#~ msgstr "hardSID->create() に失敗しました.\n"
-
-#~ msgid "hardSID->filter(%d) failed.\n"
-#~ msgstr "hardSID->filter(%d) に失敗しました.\n"
-
-#~ msgid "[SIDPlay2] Could not initialize SIDBuilder object.\n"
-#~ msgstr "[SIDPlay2] SIDBuilder オブジェクトを初期化できませんでした.\n"
-
-#~ msgid "[SIDPlay2] Invalid clockSpeed=%d, falling back to PAL.\n"
-#~ msgstr "[SIDPlay2] clockSpeed=%d は無効です. PAL にフォールバックします.\n"
-
-#~ msgid "Invalid sid2OptLevel=%d, falling back to %d.\n"
-#~ msgstr "sid2OptLevel %d は無効です. %d にフォールバックします.\n"
-
-#~ msgid "[SIDPlay2] Emulator engine configuration failed!\n"
-#~ msgstr "[SIDPlay2] エミュレーションエンジンの設定に失敗しました!\n"
-
-#~ msgid "[SIDPlay2] Could not initialize SIDTune object.\n"
-#~ msgstr "[SIDPlay2] SIDTune オブジェクトを初期化できませんでした.\n"
-
-#~ msgid "[SIDPlay2] currTune->selectSong() failed\n"
-#~ msgstr "[SIDPlay2] currTune->selectSong() に失敗しました.\n"
-
-#~ msgid "[SIDPlay2] currEng->load() failed\n"
-#~ msgstr "[SIDPlay2] currEng->load() に失敗しました.\n"
-
-#~ msgid "Could not allocate memory for t_xs_tuneinfo ('%s')\n"
-#~ msgstr "t_xs_tuneinfo ('%s') のメモリを割り当てられませんでした\n"
-
-#~ msgid "Could not allocate memory for t_xs_subtuneinfo ('%s', %i)\n"
-#~ msgstr "t_xs_subtuneinfo ('%s', %i) のメモリを割り当てられませんでした\n"
-
-#~ msgid "SubTune pointer structure realloc failed.\n"
-#~ msgstr "SubTune ポインタ構造体の realloc に失敗しました.\n"
-
-#~ msgid "SubTune structure malloc failed!\n"
-#~ msgstr "SubTune 構造体の malloc に失敗しました!\n"
-
-#~ msgid "Could not open STILDB '%s'\n"
-#~ msgstr "STILDB '%s' を開けませんでした.\n"
-
-#~ msgid "Dither output when rounding to 16-bit"
-#~ msgstr "16ビットに丸めるとき出力をディザリングする"
-
-#~ msgid "Base gain (dB):"
-#~ msgstr "基本ゲイン (dB):"
-
-#~ msgid "Enable ReplayGain processing"
-#~ msgstr "リプレイゲイン処理を有効にする"
-
-#~ msgid "Pre-gain with RG info (dB):"
-#~ msgstr "リプレイゲイン情報ありのプリゲイン (dB):"
-
-#~ msgid "Pre-gain without RG info (dB):"
-#~ msgstr "リプレイゲイン情報なしのプリゲイン (dB):"
-
-#~ msgid "Enable peak info clip prevention"
-#~ msgstr "クリッピング防止のためにピーク情報を有効にする"
-
-#~ msgid "Enable adaptive scaler clip prevention"
-#~ msgstr "クリッピング防止に適応したスケーラを有効にする"
-
-#~ msgid "Gain Control"
-#~ msgstr "ゲインコントロール"
-
-#~ msgid "Enable 6dB Boost + Hard Limiting"
-#~ msgstr "6dB ブースト + ハードリミットを有効にする"
-
-#~ msgid "<b>Playback:</b>"
-#~ msgstr "<b>演奏:</b>"
-
-#~ msgid "<i>Configure keys which controls Audacious playback.</i>"
-#~ msgstr "<i>Audacious の演奏を制御するキーを設定します.</i>"
-
-#~ msgid "<b>Volume Control:</b>"
-#~ msgstr "<b>音量コントロール:</b>"
-
-#~ msgid "<i>Configure keys which controls music volume.</i>"
-#~ msgstr "<i>曲の音量をコントロールするキーを設定します.</i>"
-
-#~ msgid "<b>Player:</b>"
-#~ msgstr "<b>プレイヤ:</b>"
-
-#~ msgid "<i>Configure keys which control the player.</i>"
-#~ msgstr "<i>プレイヤをコントロールするキーを設定します.</i>"
-
-#~ msgid "For this, the Audacious OSD plugin must be activated."
-#~ msgstr "Audacious OSD プラグインを有効にしなければ,利用できません."
-
-#~ msgid "Track mode"
-#~ msgstr "トラックモード"
-
-#~ msgid "6dB hard limiting"
-#~ msgstr "6dB ハードリミット"
-
-#~ msgid "Preamp (dB):"
-#~ msgstr "プリアンプ (dB):"
-
-#~ msgid "About sndfile WAV support"
-#~ msgstr "sndfile WAV サポートについて"
-
-#~ msgid "Play/Pause:"
-#~ msgstr "演奏/一時停止:"
-
-#~ msgid "Couldn't open file!"
-#~ msgstr "ファイルを開けませんでした!"
-
-#~ msgid "Couldn't write tag!"
-#~ msgstr "タグを書き込めませんでした!"
-
-#~ msgid "<b>Name:</b>"
-#~ msgstr "<b>名前:</b>"
-
-#~ msgid " MPEG Info "
-#~ msgstr " MPEG 情報 "
-
-#~ msgid " ID3 Tag "
-#~ msgstr " ID3 タグ "
-
-#~ msgid "Unknown"
-#~ msgstr "不明"
-
-#~ msgid "Layer %s"
-#~ msgstr "レイヤー %s"
-
-#~ msgid "VBR (avg. %d kbps)"
-#~ msgstr "可変ビットレート (平均 %d kbps)"
-
-#~ msgid "%d Hz"
-#~ msgstr "%d Hz"
-
-#~ msgid "%d frames"
-#~ msgstr "%d フレーム"
-
-#~ msgid "%d:%02d (%d seconds)"
-#~ msgstr "%d:%02d (%d 秒)"
-
-#~ msgid "RG_album=%4s (x%4.2f)"
-#~ msgstr "RGアルバム=%4s (x%4.2f)"
-
-#~ msgid "RG_track=%4s (x%4.2f)"
-#~ msgstr "RGトラック=%4s (x%4.2f)"
-
-#~ msgid "Peak album=%4s (%+5.3fdBFS)"
-#~ msgstr "ピークアルバム=%4s (%+5.3fdBFS)"
-
-#~ msgid "Peak track=%4s (%+5.3fdBFS)"
-#~ msgstr "ピークトラック=%4s (%+5.3fdBFS)"
-
-#~ msgid "mp3gain undo=%4s (%+5.3fdB)"
-#~ msgstr "mp3ゲイン アンドゥ=%4s (%+5.3fdB)"
-
-#~ msgid "mp3gain minmax=%4s (max-min=%+6.3fdB)"
-#~ msgstr "mp3ゲイン minmax=%4s (max-min=%+6.3fdB)"
-
-#~ msgid "Classic Rock"
-#~ msgstr "クラシックロック"
-
-#~ msgid "Country"
-#~ msgstr "カントリー"
-
-#~ msgid "Dance"
-#~ msgstr "ダンス"
-
-#~ msgid "Disco"
-#~ msgstr "ディスコ"
-
-#~ msgid "Funk"
-#~ msgstr "ファンキー"
-
-#~ msgid "Grunge"
-#~ msgstr "グランジ"
-
-#~ msgid "Hip-Hop"
-#~ msgstr "ヒップホップ"
-
-#~ msgid "Jazz"
-#~ msgstr "ジャズ"
-
-#~ msgid "Metal"
-#~ msgstr "メタル"
-
-#~ msgid "New Age"
-#~ msgstr "ニューエイジ"
-
-#~ msgid "Oldies"
-#~ msgstr "オールディーズ"
-
-#~ msgid "Other"
-#~ msgstr "その他"
-
-#~ msgid "Pop"
-#~ msgstr "ポップ"
-
-#~ msgid "R&B"
-#~ msgstr "R&B"
-
-#~ msgid "Rap"
-#~ msgstr "ラップ"
-
-#~ msgid "Reggae"
-#~ msgstr "レゲェ"
-
-#~ msgid "Rock"
-#~ msgstr "ロック"
-
-#~ msgid "Techno"
-#~ msgstr "テクノ"
-
-#~ msgid "Industrial"
-#~ msgstr "インダストリアル"
-
-#~ msgid "Alternative"
-#~ msgstr "オルタナティヴ"
-
-#~ msgid "Ska"
-#~ msgstr "スカ"
-
-#~ msgid "Death Metal"
-#~ msgstr "デスメタル"
-
-#~ msgid "Soundtrack"
-#~ msgstr "サウンドトラック"
-
-#~ msgid "Euro-Techno"
-#~ msgstr "ユーロテクノ"
-
-#~ msgid "Ambient"
-#~ msgstr "アンビエント"
-
-#~ msgid "Trip-Hop"
-#~ msgstr "トリップホップ"
-
-#~ msgid "Vocal"
-#~ msgstr "ヴォーカル"
-
-#~ msgid "Jazz+Funk"
-#~ msgstr "ジャズ+ファンク"
-
-#~ msgid "Fusion"
-#~ msgstr "フュージョン"
-
-#~ msgid "Trance"
-#~ msgstr "トランス"
-
-#~ msgid "Classical"
-#~ msgstr "クラシカル"
-
-#~ msgid "Instrumental"
-#~ msgstr "インストゥルメンタル"
-
-#~ msgid "Acid"
-#~ msgstr "アシッド"
-
-#~ msgid "House"
-#~ msgstr "ハウス"
-
-#~ msgid "Game"
-#~ msgstr "ゲーム"
-
-#~ msgid "Sound Clip"
-#~ msgstr "サウンドクリップ"
-
-#~ msgid "Gospel"
-#~ msgstr "ゴスペル"
-
-#~ msgid "Noise"
-#~ msgstr "ノイズ"
-
-#~ msgid "AlternRock"
-#~ msgstr "オルタナロック"
-
-#~ msgid "Soul"
-#~ msgstr "ソウル"
-
-#~ msgid "Punk"
-#~ msgstr "パンク"
-
-#~ msgid "Space"
-#~ msgstr "スペース"
-
-#~ msgid "Meditative"
-#~ msgstr "教会音楽"
-
-#~ msgid "Instrumental Pop"
-#~ msgstr "インストゥルメンタルポップ"
-
-#~ msgid "Instrumental Rock"
-#~ msgstr "インストゥルメンタルロック"
-
-#~ msgid "Ethnic"
-#~ msgstr "エスニック"
-
-#~ msgid "Gothic"
-#~ msgstr "ゴシック"
-
-#~ msgid "Darkwave"
-#~ msgstr "ダークウェーヴ"
-
-#~ msgid "Techno-Industrial"
-#~ msgstr "テクノインスツルメント"
-
-#~ msgid "Electronic"
-#~ msgstr "エレクトロニック"
-
-#~ msgid "Pop-Folk"
-#~ msgstr "ポップフォーク"
-
-#~ msgid "Eurodance"
-#~ msgstr "ユーロダンス"
-
-#~ msgid "Dream"
-#~ msgstr "ドリーム"
-
-#~ msgid "Southern Rock"
-#~ msgstr "サザンロック"
-
-#~ msgid "Comedy"
-#~ msgstr "コメディ"
-
-#~ msgid "Cult"
-#~ msgstr "カルト"
-
-#~ msgid "Gangsta Rap"
-#~ msgstr "ギャングスタラップ"
-
-#~ msgid "Top 40"
-#~ msgstr "トップ 40"
-
-#~ msgid "Christian Rap"
-#~ msgstr "クリスチャンラップ"
-
-#~ msgid "Pop/Funk"
-#~ msgstr "ポップ/ファンキー"
-
-#~ msgid "Jungle"
-#~ msgstr "ジャングル"
-
-#~ msgid "Native American"
-#~ msgstr "ネイティヴアメリカン"
-
-#~ msgid "Cabaret"
-#~ msgstr "キャバレー"
-
-#~ msgid "New Wave"
-#~ msgstr "ニューウェーブ"
-
-#~ msgid "Psychedelic"
-#~ msgstr "サイケデリック"
-
-#~ msgid "Rave"
-#~ msgstr "レイブ"
-
-#~ msgid "Trailer"
-#~ msgstr "トレイラー"
-
-#~ msgid "Lo-Fi"
-#~ msgstr "ローファイ"
-
-#~ msgid "Tribal"
-#~ msgstr "トリバル"
-
-#~ msgid "Acid Punk"
-#~ msgstr "アシッドパンク"
-
-#~ msgid "Acid Jazz"
-#~ msgstr "アシッドジャズ"
-
-#~ msgid "Polka"
-#~ msgstr "ポルカ"
-
-#~ msgid "Musical"
-#~ msgstr "ミュージカル"
-
-#~ msgid "Rock & Roll"
-#~ msgstr "ロックンロール"
-
-#~ msgid "Hard Rock"
-#~ msgstr "ハードロック"
-
-#~ msgid "Folk"
-#~ msgstr "フォーク"
-
-#~ msgid "Folk/Rock"
-#~ msgstr "フォーク/ロック"
-
-#~ msgid "National Folk"
-#~ msgstr "ナショナルフォーク"
-
-#~ msgid "Swing"
-#~ msgstr "スウィング"
-
-#~ msgid "Fast-Fusion"
-#~ msgstr "ファストフュージョン"
-
-#~ msgid "Bebob"
-#~ msgstr "Bebob"
-
-#~ msgid "Latin"
-#~ msgstr "ラテン"
-
-#~ msgid "Revival"
-#~ msgstr "リバイバル"
-
-#~ msgid "Celtic"
-#~ msgstr "セルティック"
-
-#~ msgid "Bluegrass"
-#~ msgstr "ブルーグラス"
-
-#~ msgid "Avantgarde"
-#~ msgstr "アバンギャルド"
-
-#~ msgid "Gothic Rock"
-#~ msgstr "ゴシックロック"
-
-#~ msgid "Progressive Rock"
-#~ msgstr "プログレッシヴロック"
-
-#~ msgid "Psychedelic Rock"
-#~ msgstr "サイケデリックロック"
-
-#~ msgid "Symphonic Rock"
-#~ msgstr "シンフォニックロック"
-
-#~ msgid "Slow Rock"
-#~ msgstr "スローロック"
-
-#~ msgid "Big Band"
-#~ msgstr "ビッグバンド"
-
-#~ msgid "Chorus"
-#~ msgstr "コーラス"
-
-#~ msgid "Easy Listening"
-#~ msgstr "イージーリスニング"
-
-#~ msgid "Acoustic"
-#~ msgstr "アコースティック"
-
-#~ msgid "Humour"
-#~ msgstr "ユーモア"
-
-#~ msgid "Speech"
-#~ msgstr "スピーチ"
-
-#~ msgid "Chanson"
-#~ msgstr "シャンソン"
-
-#~ msgid "Opera"
-#~ msgstr "オペラ"
-
-#~ msgid "Chamber Music"
-#~ msgstr "チャンバーミュージック"
-
-#~ msgid "Sonata"
-#~ msgstr "ソナタ"
-
-#~ msgid "Symphony"
-#~ msgstr "シンフォニー"
-
-#~ msgid "Booty Bass"
-#~ msgstr "ブーティベース"
-
-#~ msgid "Primus"
-#~ msgstr "プリマス"
-
-#~ msgid "Porn Groove"
-#~ msgstr "ポルノグルーヴ"
-
-#~ msgid "Slow Jam"
-#~ msgstr "スロージャム"
-
-#~ msgid "Club"
-#~ msgstr "クラブ"
-
-#~ msgid "Tango"
-#~ msgstr "タンゴ"
-
-#~ msgid "Samba"
-#~ msgstr "サンバ"
-
-#~ msgid "Folklore"
-#~ msgstr "フォークロア"
-
-#~ msgid "Ballad"
-#~ msgstr "バラード"
-
-#~ msgid "Power Ballad"
-#~ msgstr "パワーバラード"
-
-#~ msgid "Rhythmic Soul"
-#~ msgstr "リズミックソウル"
-
-#~ msgid "Freestyle"
-#~ msgstr "フリースタイル"
-
-#~ msgid "Duet"
-#~ msgstr "デュエット"
-
-#~ msgid "Punk Rock"
-#~ msgstr "パンクロック"
-
-#~ msgid "Drum Solo"
-#~ msgstr "ドラムソロ"
-
-#~ msgid "A Cappella"
-#~ msgstr "ア・カペラ"
-
-#~ msgid "Euro-House"
-#~ msgstr "ユーロハウス"
-
-#~ msgid "Dance Hall"
-#~ msgstr "ダンスホール"
-
-#~ msgid "Goa"
-#~ msgstr "ゴア"
-
-#~ msgid "Drum & Bass"
-#~ msgstr "ドラム&バス"
-
-#~ msgid "Club-House"
-#~ msgstr "クラブハウス"
-
-#~ msgid "Hardcore"
-#~ msgstr "ハードコア"
-
-#~ msgid "Terror"
-#~ msgstr "テラー"
-
-#~ msgid "Indie"
-#~ msgstr "インディーズ"
-
-#~ msgid "BritPop"
-#~ msgstr "ブリットポップ"
-
-#~ msgid "Negerpunk"
-#~ msgstr "ニガーパンク"
-
-#~ msgid "Polsk Punk"
-#~ msgstr "ポルスクパンク"
-
-#~ msgid "Christian Gangsta Rap"
-#~ msgstr "クリスチャンギャングスタラップ"
-
-#~ msgid "Heavy Metal"
-#~ msgstr "ヘヴィーメタル"
-
-#~ msgid "Black Metal"
-#~ msgstr "ブラックメタル"
-
-#~ msgid "Crossover"
-#~ msgstr "クロスオーバー"
-
-#~ msgid "Contemporary Christian"
-#~ msgstr "コンテンポラリクリスチャン"
-
-#~ msgid "Christian Rock"
-#~ msgstr "クリスチャンロック"
-
-#~ msgid "Merengue"
-#~ msgstr "メレンゲ"
-
-#~ msgid "Salsa"
-#~ msgstr "サルサ"
-
-#~ msgid "Thrash Metal"
-#~ msgstr "トラッシュメタル"
-
-#~ msgid "Anime"
-#~ msgstr "アニメ"
-
-#~ msgid "JPop"
-#~ msgstr "Jポップ"
-
-#~ msgid "Synthpop"
-#~ msgstr "シンセポップ"
-
-#~ msgid ""
-#~ "An error occured:\n"
-#~ "%s"
-#~ msgstr ""
-#~ "エラー発生:\n"
-#~ "%s"
-
-#~ msgid "Error!"
-#~ msgstr "エラー!"
-
-#~ msgid "Failed to modify tag (open)"
-#~ msgstr "タグの修正に失敗しました (open)"
-
-#~ msgid "Failed to modify tag (close)"
-#~ msgstr "タグの修正に失敗しました (close)"
-
-#~ msgid "Failed to modify tag"
-#~ msgstr "タグの修正に失敗"
-
-#~ msgid " Ogg Vorbis Tag "
-#~ msgstr " Ogg Vorbis タグ "
-
-#~ msgid "Description:"
-#~ msgstr "詳細:"
-
-#~ msgid "Version:"
-#~ msgstr "バージョン:"
-
-#~ msgid "ISRC number:"
-#~ msgstr "ISRC 番号:"
-
-#~ msgid " Ogg Vorbis ReplayGain "
-#~ msgstr " Ogg Vorbis リプレイゲイン "
-
-#~ msgid "Track peak:"
-#~ msgstr "トラックのピーク:"
-
-#~ msgid "Album gain:"
-#~ msgstr "アルバムのゲイン:"
-
-#~ msgid "Album peak:"
-#~ msgstr "アルバムのピーク:"
-
-#~ msgid " Ogg Vorbis Info "
-#~ msgstr " Ogg Vorbis 情報 "
-
-#~ msgid "Bit rate:"
-#~ msgstr "ビットレート:"
-
-#~ msgid "Sample rate:"
-#~ msgstr "サンプリングレート:"
-
-#~ msgid "Length:"
-#~ msgstr "演奏時間:"
-
-#~ msgid "File size:"
-#~ msgstr "ファイルサイズ:"
-
-#~ msgid "N/A"
-#~ msgstr "N/A"
-
-#~ msgid "%d KBit/s (nominal)"
-#~ msgstr "%d Kビット/秒 (ノーマル)"
-
-#~ msgid "%d"
-#~ msgstr "%d"
-
-#~ msgid "%d:%.2d"
-#~ msgstr "%d:%.2d"
-
-#~ msgid "%d Bytes"
-#~ msgstr "%d バイト"
-
-#~ msgid "Use software volume control"
-#~ msgstr "ソフトウェア音量コントロールを使う"
-
-#~ msgid ""
-#~ "You cannot use the FileWriter plugin\n"
-#~ "when you're running in realtime mode."
-#~ msgstr ""
-#~ "リアルタイムモードで実行しているとき\n"
-#~ "ファイルライタ プラグインは利用できません."
-
-#~ msgid "Tune #%i"
-#~ msgstr "チューン #%i"
-
-#~ msgid "6581 (reSID)"
-#~ msgstr "6581 (reSID)"
-
-#~ msgid "8580 (reSID)"
-#~ msgstr "8580 (reSID)"
-
-#~ msgid "6581R1 (alankila)"
-#~ msgstr "6581R1 (alankila)"
-
-#~ msgid "6581R4 (alankila)"
-#~ msgstr "6581R4 (alankila)"
-
-#~ msgid ""
-#~ "XMMS v1.2.5 and later support generic titlestring formatting (see XMMS "
-#~ "preferences). This option can be enabled to override those generic titles "
-#~ "with Audacious-SID specific ones. Formatting mnemonics are explained "
-#~ "briefly below."
-#~ msgstr ""
-#~ "XMMS v1.2.5 以降は一般的なタイトル文字フォーマットをサポートしています "
-#~ "(XMMS 設定をご覧ください). 有効ならば, Audacious-SID で指定したものを上書"
-#~ "きします. フォーマットルールは以下に説明があります."
-
-#~ msgid "Override generic XMMS titles"
-#~ msgstr "一般的な XMMS のタイトルを上書きする"
-
-#~ msgid ""
-#~ "%% - '%' character\n"
-#~ "%p - Performer/composer\n"
-#~ "%t - Song name (title)\n"
-#~ "%c - Copyright\n"
-#~ "%s - File type\n"
-#~ "%m - SID model"
-#~ msgstr ""
-#~ "%% - '%' 文字\n"
-#~ "%p - 演奏者/作曲者\n"
-#~ "%t - 曲名 (タイトル)\n"
-#~ "%c - 著作権\n"
-#~ "%s - ファイル形式\n"
-#~ "%m - SID モデル"
-
-#~ msgid ""
-#~ "%C - Speed/clock (PAL/NTSC)\n"
-#~ "%n - Subtune\n"
-#~ "%N - Number of subtunes\n"
-#~ "%f - Filename\n"
-#~ "%F - File path\n"
-#~ "%e - File extension"
-#~ msgstr ""
-#~ "%C - 速度/クロック (PAL/NTSC)\n"
-#~ "%n - サブチューン\n"
-#~ "%N - サブチューン数\n"
-#~ "%f - ファイル名\n"
-#~ "%F - ファイルパス\n"
-#~ "%e - ファイル拡張子"
-
-#~ msgid "No sub-tune control."
-#~ msgstr "サブチューンコントロールがありません."
-
-#~ msgid "Disabled"
-#~ msgstr "無効"
-
-#~ msgid ""
-#~ "Seeking backwards/forwards selects previous/next sub-tune, similar to "
-#~ "selector used in XMMS-SidPlay."
-#~ msgstr ""
-#~ "後方/前方のシークは, XMMS-SidPlay で用いられるセレクタのように, 以前/以後"
-#~ "のサブチューンを選択します. "
-
-#~ msgid "Seek back/forward changes sub-tune"
-#~ msgstr "後方/前方のシークでサブチューンを変更"
-
-#~ msgid ""
-#~ "By pressing the seekbar a sub-tune control window pops up, in style of "
-#~ "UADE (Unix Amiga Delitracker Emulator)"
-#~ msgstr ""
-#~ "シークバーを押すことで, UADE (Unix Amiga Delitracker Emulator) のようにサ"
-#~ "ブチューンコントロールウィンドウがポップアップします."
-
-#~ msgid "Pop-up via seekbar (UADE-style)"
-#~ msgstr "シークバー経由でポップアップ (UADE-style)"
-
-#~ msgid ""
-#~ "Seekbar works as a sub-tune selector (Best option if you have patched "
-#~ "your XMMS with the song-position patch.)"
-#~ msgstr ""
-#~ "シークバーがサブチューンセレクタとして動作します (XMMS に曲位置パッチを当"
-#~ "てているなら最上のオプションです)."
-
-#~ msgid "Song-position patch"
-#~ msgstr "曲位置パッチ"
-
-#~ msgid "Go through all sub-tunes in file"
-#~ msgstr "ファイル中のサブチューンを一通り用いる"
-
-#~ msgid "Automatic sub-tune changes:"
-#~ msgstr "自動サブチューン変更:"
-
-#~ msgid ""
-#~ "Determine if file is a SID-tune by checking the file contents. If NOT "
-#~ "selected, filetype is determined by checking filename extension (.sid, ."
-#~ "dat, ...)"
-#~ msgstr ""
-#~ "ファイルの内容を確認してファイルが SID-tune かどうかを決定します. 選択され"
-#~ "ていなければ, .sid や .dat などのファイル拡張子でファイルタイプを決定しま"
-#~ "す."
-
-#~ msgid "Detect file by contents (slower)"
-#~ msgstr "内容でファイルタイプを決定 (遅い)"
-
-#~ msgid " < "
-#~ msgstr " < "
-
-#~ msgid " > "
-#~ msgstr " > "
-
-#~ msgid " "
-#~ msgstr " "
-
-#~ msgid "#"
-#~ msgstr "#"
-
-#~ msgid " / "
-#~ msgstr " / "
-
-#~ msgid ":"
-#~ msgstr ":"
-
-#~ msgid "8000"
-#~ msgstr "8000"
-
-#~ msgid "11025"
-#~ msgstr "11025"
-
-#, fuzzy
-#~ msgid "22050"
-#~ msgstr "22000 Hz"
-
-#, fuzzy
-#~ msgid "44100"
-#~ msgstr "44100 Hz"
-
-#, fuzzy
-#~ msgid "12000"
-#~ msgstr "11000 Hz"
-
-#, fuzzy
-#~ msgid "24000"
-#~ msgstr "22000 Hz"
-
-#, fuzzy
-#~ msgid "32000"
-#~ msgstr "22000 Hz"
-
-#~ msgid "OSS Output Plugin"
-#~ msgstr "OSS 出力プラグイン"
-
-#~ msgid "Drive %d"
-#~ msgstr "ドライブ %d"
-
-#~ msgid ""
-#~ "Failed to open device %s\n"
-#~ "Error: %s\n"
-#~ "\n"
-#~ msgstr ""
-#~ "デバイス %s のオープンに失敗しました.\n"
-#~ "[ERROR] %s\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Failed to read \"Table of Contents\"\n"
-#~ "Maybe no disc in the drive?\n"
-#~ "\n"
-#~ msgstr ""
-#~ "\"目次\" の読み込みに失敗しました.\n"
-#~ "ドライブにディスクが入っていないかも?\n"
-#~ "\n"
-
-#~ msgid ""
-#~ "Device %s OK.\n"
-#~ "Disc has %d tracks"
-#~ msgstr ""
-#~ "デバイス %s は OK です.\n"
-#~ "ディスクには %d 個のトラックがあります."
-
-#~ msgid " (%d data tracks)"
-#~ msgstr " (%d 個のデータトラック)"
-
-#~ msgid ""
-#~ "Digital audio extraction not tested as the disc has no audio tracks\n"
-#~ msgstr ""
-#~ "ディスクにオーディオトラックが無いので, ディジタルオーディオ抽出のテストは"
-#~ "行いません.\n"
-
-#~ msgid ""
-#~ "Digital audio extraction test: OK\n"
-#~ "\n"
-#~ msgstr "ディジタルオーディオ抽出のテスト: OK\n"
-
-#~ msgid ""
-#~ "Digital audio extraction test failed: %s\n"
-#~ "\n"
-#~ msgstr "ディジタルオーディオ抽出のテスト: 失敗 (%s)\n"
-
-#~ msgid ""
-#~ "Failed to check directory %s\n"
-#~ "Error: %s"
-#~ msgstr ""
-#~ "ディレクトリ %s のチェックに失敗しました.\n"
-#~ "[ERROR] %s"
-
-#~ msgid "Error: %s exist, but is not a directory"
-#~ msgstr "[ERROR] %s は存在していますが, ディレクトリではありません."
-
-#~ msgid "Directory %s OK."
-#~ msgstr "ディレクトリ %s: OK"
-
-#~ msgid "Device:"
-#~ msgstr "デバイス:"
-
-#~ msgid "_Device:"
-#~ msgstr "デバイス(_D):"
-
-#~ msgid "Dir_ectory:"
-#~ msgstr "ディレクトリ(_E):"
-
-#~ msgid "Analog"
-#~ msgstr "アナログ"
-
-#~ msgid "No mixer"
-#~ msgstr "ミキサなし"
-
-#~ msgid "CDROM drive"
-#~ msgstr "CD-ROM ドライブ"
-
-#~ msgid "OSS mixer"
-#~ msgstr "OSS ミキサ"
-
-#~ msgid "Check drive..."
-#~ msgstr "ドライブのチェック..."
-
-#~ msgid "CD Audio Player Configuration"
-#~ msgstr "CD オーディオプレイヤの設定"
-
-#~ msgid "Add drive"
-#~ msgstr "ドライブの追加"
-
-#~ msgid "Device"
-#~ msgstr "デバイス"
-
-#~ msgid "CDDB:"
-#~ msgstr "CDDB:"
-
-#~ msgid "Use CDDB"
-#~ msgstr "CDDB を利用する"
-
-#~ msgid "Get server list"
-#~ msgstr "サーバリストの取得"
-
-#~ msgid "CDDB server:"
-#~ msgstr "CDDB サーバ:"
-
-#~ msgid "Track names:"
-#~ msgstr "トラック名:"
-
-#~ msgid "Name format:"
-#~ msgstr "名前の書式:"
-
-#~ msgid "CD Audio Plugin"
-#~ msgstr "CD オーディオ プラグイン"
-
-#~ msgid "CD Audio Track %02u"
-#~ msgstr "CD オーディオトラック %02u"
-
-#~ msgid "Game console audio module decoder"
-#~ msgstr "ゲームコンソールオーディオモジュールデコーダ"
-
-#~ msgid "NSF/NSFE"
-#~ msgstr "NSF/NSFE"
-
-#~ msgid "Use optional NSFE playlist"
-#~ msgstr "オプションの NSFE プレイリストを使う"
-
-#~ msgid "Disk Writer Plugin %s"
-#~ msgstr "ディスクライター プラグイン %s"
-
-#~ msgid "eSound Output Plugin"
-#~ msgstr "eSound 出力プラグイン"
-
-#~ msgid "Extra Stereo Plugin %s"
-#~ msgstr "エクストラステレオ プラグイン %s"
-
-#~ msgid "BSD Sun Driver %s"
-#~ msgstr "BSD Sub ドライバ %s"
-
-#~ msgid "TiMidity Player %s"
-#~ msgstr "TiMidity プレイヤー %s"
-
-#~ msgid "Tone Generator %s"
-#~ msgstr "トーンジェネレータ %s"
-
-#~ msgid "Ogg Vorbis Audio Plugin"
-#~ msgstr "Ogg Vorbis オーディオ プラグイン"
-
-#~ msgid "WAV Audio Plugin"
-#~ msgstr "WAV オーディオ プラグイン"
-
-#~ msgid "ALSA %s output plugin"
-#~ msgstr "ALSA %s 出力プラグイン"
-
-#~ msgid "AMIDI-Plug %s (MIDI Player)"
-#~ msgstr "AMIDI-Plug %s (MIDI プレイヤ)"
-
-#~ msgid "AMIDI-Plug - warning"
-#~ msgstr "AMIDI-Plug - 警告"
-
-#~ msgid ""
-#~ "No sequencer backend has been selected!\n"
-#~ "Please configure AMIDI-Plug before playing."
-#~ msgstr ""
-#~ "シーケンサバックエンドが選択されていません!\n"
-#~ "演奏前に AMIDI-Plug を設定してください."
-
-#~ msgid ""
-#~ "\n"
-#~ "EvDev-Plug "
-#~ msgstr ""
-#~ "\n"
-#~ "EvDev-Plug "
-
-#~ msgid "Arabic (IBM-864)"
-#~ msgstr "アラビア語 (IBM-864)"
-
-#~ msgid "Arabic (ISO-8859-6)"
-#~ msgstr "アラビア語 (ISO-8859-6)"
-
-#~ msgid "Arabic (Windows-1256)"
-#~ msgstr "アラビア語 (Windows-1256)"
-
-#~ msgid "Baltic (ISO-8859-13)"
-#~ msgstr "バルト諸語 (ISO-8859-13)"
-
-#~ msgid "Baltic (ISO-8859-4)"
-#~ msgstr "バルト諸語 (ISO-8859-4)"
-
-#~ msgid "Baltic (Windows-1257)"
-#~ msgstr "バルト諸語 (Windows-1257)"
-
-#~ msgid "Celtic (ISO-8859-14)"
-#~ msgstr "ケルト語 (ISO-8859-14)"
-
-#~ msgid "Central European (IBM-852)"
-#~ msgstr "中欧諸語 (IBM-852)"
-
-#~ msgid "Central European (ISO-8859-2)"
-#~ msgstr "中欧諸語 (ISO-8859-2)"
-
-#~ msgid "Central European (Windows-1250)"
-#~ msgstr "中欧諸語 (Windows-1250)"
-
-#~ msgid "Chinese Simplified (GB18030)"
-#~ msgstr "簡体字中国語 (GB18030)"
-
-#~ msgid "Chinese Simplified (GB2312)"
-#~ msgstr "簡体字中国語 (GB2312)"
-
-#~ msgid "Chinese Traditional (Big5)"
-#~ msgstr "繁体字中国語 (Big5)"
-
-#~ msgid "Chinese Traditional (Big5-HKSCS)"
-#~ msgstr "繁体字中国語 (Big5-HKSCS)"
-
-#~ msgid "Cyrillic (IBM-855)"
-#~ msgstr "キリル文字 (IBM-855)"
-
-#~ msgid "Cyrillic (ISO-8859-5)"
-#~ msgstr "キリル文字 (ISO-8859-5)"
-
-#~ msgid "Cyrillic (ISO-IR-111)"
-#~ msgstr "キリル文字 (ISO-IR-111)"
-
-#~ msgid "Cyrillic (KOI8-R)"
-#~ msgstr "キリル文字 (KOI8-R)"
-
-#~ msgid "Cyrillic (Windows-1251)"
-#~ msgstr "キリル文字 (Windows-1251)"
-
-#~ msgid "Cyrillic/Russian (CP-866)"
-#~ msgstr "キリル文字/ロシア語 (CP-866)"
-
-#~ msgid "Cyrillic/Ukrainian (KOI8-U)"
-#~ msgstr "キリル文字/ウクライナ語 (KOI8-U)"
-
-#~ msgid "English (US-ASCII)"
-#~ msgstr "英語 (US-ASCII)"
-
-#~ msgid "Greek (ISO-8859-7)"
-#~ msgstr "ギリシャ語 (ISO-8859-7)"
-
-#~ msgid "Greek (Windows-1253)"
-#~ msgstr "ギリシャ語 (Windows-1253)"
-
-#~ msgid "Hebrew (IBM-862)"
-#~ msgstr "ヘブライ語 (IBM-862)"
-
-#~ msgid "Hebrew (Windows-1255)"
-#~ msgstr "ヘブライ語 (Windows-1255)"
-
-#~ msgid "Japanese (EUC-JP)"
-#~ msgstr "日本語 (EUC-JP)"
-
-#~ msgid "Japanese (ISO-2022-JP)"
-#~ msgstr "日本語 (ISO-2022-JP)"
-
-#~ msgid "Japanese (Shift_JIS)"
-#~ msgstr "日本語 (Shift_JIS)"
-
-#~ msgid "Korean (EUC-KR)"
-#~ msgstr "韓国語 (EUC-KR)"
-
-#~ msgid "Nordic (ISO-8859-10)"
-#~ msgstr "北欧諸語 (ISO-8859-10)"
-
-#~ msgid "South European (ISO-8859-3)"
-#~ msgstr "南欧諸語 (ISO-8859-3)"
-
-#~ msgid "Thai (TIS-620)"
-#~ msgstr "タイ語 (TIS-620)"
-
-#~ msgid "Turkish (IBM-857)"
-#~ msgstr "トルコ語 (IBM-857)"
-
-#~ msgid "Turkish (ISO-8859-9)"
-#~ msgstr "トルコ語 (ISO-8859-9)"
-
-#~ msgid "Turkish (Windows-1254)"
-#~ msgstr "トルコ語 (Windows-1254)"
-
-#~ msgid "Unicode (UTF-7)"
-#~ msgstr "Unicode (UTF-7)"
-
-#~ msgid "Unicode (UTF-8)"
-#~ msgstr "Unicode (UTF-8)"
-
-#~ msgid "Unicode (UTF-16BE)"
-#~ msgstr "Unicode (UTF-16BE)"
-
-#~ msgid "Unicode (UTF-16LE)"
-#~ msgstr "Unicode (UTF-16LE)"
-
-#~ msgid "Unicode (UTF-32BE)"
-#~ msgstr "Unicode (UTF-32BE)"
-
-#~ msgid "Unicode (UTF-32LE)"
-#~ msgstr "Unicode (UTF-32LE)"
-
-#~ msgid "Vietnamese (VISCII)"
-#~ msgstr "ヴェトナム語 (VISCII)"
-
-#~ msgid "Vietnamese (Windows-1258)"
-#~ msgstr "ヴェトナム語 (Windows-1258)"
-
-#~ msgid "Visual Hebrew (ISO-8859-8)"
-#~ msgstr "ヘブライ語(表示用) (ISO-8859-8)"
-
-#~ msgid "Western (IBM-850)"
-#~ msgstr "西欧諸語 (IBM-850)"
-
-#~ msgid "Western (ISO-8859-1)"
-#~ msgstr "西欧諸語 (ISO-8859-1)"
-
-#~ msgid "Western (ISO-8859-15)"
-#~ msgstr "西欧諸語 (ISO-8859-15)"
-
-#~ msgid "Western (Windows-1252)"
-#~ msgstr "西欧諸語 (Windows-1252)"
-
-#~ msgid "Arabic (IBM-864-I)"
-#~ msgstr "アラビア語 (IBM-864-I)"
-
-#~ msgid "Arabic (ISO-8859-6-E)"
-#~ msgstr "アラビア語 (ISO-8859-6-E)"
-
-#~ msgid "Arabic (ISO-8859-6-I)"
-#~ msgstr "アラビア語 (ISO-8859-6-I)"
-
-#~ msgid "Arabic (MacArabic)"
-#~ msgstr "アラビア語 (MacArabic)"
-
-#~ msgid "Armenian (ARMSCII-8)"
-#~ msgstr "アルメニア語 (ARMSCII-8)"
-
-#~ msgid "Central European (MacCE)"
-#~ msgstr "中欧諸語 (MacCE)"
-
-#~ msgid "Chinese Simplified (GBK)"
-#~ msgstr "簡体字中国語 (GBK)"
-
-#~ msgid "Chinese Simplified (HZ)"
-#~ msgstr "簡体字中国語 (HZ)"
-
-#~ msgid "Chinese Traditional (EUC-TW)"
-#~ msgstr "繁体字中国語 (EUC-TW)"
-
-#~ msgid "Croatian (MacCroatian)"
-#~ msgstr "クロアチア語 (MacCroatian)"
-
-#~ msgid "Cyrillic (MacCyrillic)"
-#~ msgstr "キリル文字 (MacCyrillic)"
-
-#~ msgid "Cyrillic/Ukrainian (MacUkrainian)"
-#~ msgstr "キリル文字/ウクライナ語 (MacUkrainian)"
-
-#~ msgid "Farsi (MacFarsi)"
-#~ msgstr "ペルシャ語 (MacFarsi)"
-
-#~ msgid "Greek (MacGreek)"
-#~ msgstr "ギリシャ語 (MacGreek)"
-
-#~ msgid "Gujarati (MacGujarati)"
-#~ msgstr "グジャラート語 (MacGujarati)"
-
-#~ msgid "Gurmukhi (MacGurmukhi)"
-#~ msgstr "グルムキー文字 (MacGurmukhi)"
-
-#~ msgid "Hebrew (ISO-8859-8-E)"
-#~ msgstr "ヘブライ語 (ISO-8859-8-E)"
-
-#~ msgid "Hebrew (ISO-8859-8-I)"
-#~ msgstr "ヘブライ語 (ISO-8859-8-I)"
-
-#~ msgid "Hebrew (MacHebrew)"
-#~ msgstr "ヘブライ語 (MacHebrew)"
-
-#~ msgid "Hindi (MacDevanagari)"
-#~ msgstr "ヒンディ語 (MacDevanagari)"
-
-#~ msgid "Icelandic (MacIcelandic)"
-#~ msgstr "アイスランド語 (MacIcelandic)"
-
-#~ msgid "Korean (JOHAB)"
-#~ msgstr "朝鮮語 (JOHAB)"
-
-#~ msgid "Korean (UHC)"
-#~ msgstr "朝鮮語 (UHC)"
-
-#~ msgid "Romanian (MacRomanian)"
-#~ msgstr "ルーマニア語 (MacRomanian)"
-
-#~ msgid "Turkish (MacTurkish)"
-#~ msgstr "トルコ語 (MacTurkish)"
-
-#~ msgid "Vietnamese (TCVN)"
-#~ msgstr "ヴェトナム語 (TCVN)"
-
-#~ msgid "Vietnamese (VPS)"
-#~ msgstr "ヴェトナム語 (VPS)"
-
-#~ msgid "Western (MacRoman)"
-#~ msgstr "西欧諸語 (MacRoman)"
-
-#~ msgid "Tag Handling"
-#~ msgstr "タグの取扱"
-
-#~ msgid "Convert Character Set"
-#~ msgstr "キャラクタセット変換"
-
-#~ msgid "Convert character set from :"
-#~ msgstr "キャラクタセットを変換する"
-
-#~ msgid "Disable bitrate update during playback (saves cpu usage)"
-#~ msgstr "演奏中のビットレート更新を無効にする (CPU 利用を節約)"
-
-#~ msgid "Album mode"
-#~ msgstr "アルバムモード"
-
-#~ msgid "0 dB"
-#~ msgstr "0 dB"
-
-#~ msgid "Without ReplayGain"
-#~ msgstr "リプレイゲインなし"
-
-#~ msgid "Dither 24bps to 16bps"
-#~ msgstr "24bps から 16bps へディザリング"
-
-#~ msgid "With ReplayGain"
-#~ msgstr "リプレイゲインあり"
-
-#~ msgid "Noise shaping"
-#~ msgstr "ノイズシェーピング"
-
-#~ msgid "high"
-#~ msgstr "高"
-
-#~ msgid "Dither to"
-#~ msgstr "ディザリング"
-
-#~ msgid "16 bps"
-#~ msgstr "16 bps"
-
-#~ msgid "24 bps"
-#~ msgstr "24 bps"
-
-#~ msgid "Output"
-#~ msgstr "出力"
-
-#~ msgid ""
-#~ "Flac Plugin by Josh Coalson\n"
-#~ "contributions by\n"
-#~ "......\n"
-#~ "......\n"
-#~ "and\n"
-#~ "Daisuke Shimamura\n"
-#~ "Visit http://flac.sourceforge.net/\n"
-#~ "\n"
-#~ "Audacious Team port"
-#~ msgstr ""
-#~ "Josh Coalson による Flac プラグイン\n"
-#~ "貢献者\n"
-#~ "......\n"
-#~ "......\n"
-#~ "と\n"
-#~ "Daisuke Shimamura\n"
-#~ "http://flac.sourceforge.net/ を訪れてください\n"
-#~ "\n"
-#~ "Audacious Team port"
-
-#~ msgid "Alt"
-#~ msgstr "Alt"
-
-#~ msgid "Blocksize: %d"
-#~ msgstr "ブロックサイズ: %d"
-
-#~ msgid ""
-#~ "Blocksize: variable\n"
-#~ "  min/max: %d/%d"
-#~ msgstr ""
-#~ "ブロックサイズ: 可変\n"
-#~ "     最小/最大: %d/%d"
-
-#~ msgid "FLAC Info:"
-#~ msgstr "FLAC 情報:"
-
-#~ msgid "Filesize: %lld B"
-#~ msgstr "ファイルサイズ: %lld B"
-
-#~ msgid "ReplayGain Reference Loudness: %2.1f dB"
-#~ msgstr "リプレイゲイン リファレンスラウドネス: %2.1f dB"
-
-#~ msgid "ReplayGain Track Peak: %1.8f"
-#~ msgstr "リプレイゲイン トラック ピーク: %1.8f"
-
-#~ msgid "ReplayGain Album Peak: %1.8f"
-#~ msgstr "リプレイゲイン アルバム ピーク: %1.8f"
--- a/src/sid/Makefile	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/sid/Makefile	Sat Jul 12 03:39:55 2008 +0300
@@ -25,4 +25,5 @@
 CFLAGS += ${PLUGIN_CFLAGS}
 CXXFLAGS += ${PLUGIN_CFLAGS}
 CPPFLAGS += ${PLUGIN_CPPFLAGS} -D_REENTRANT -I../.. -DAUDACIOUS_PLUGIN ${MOWGLI_CFLAGS} ${SIDPLAY1_CFLAGS} ${SIDPLAY2_CFLAGS} ${BUILDERS_CFLAGS} ${GTK_CFLAGS} ${GLIB_CFLAGS}
+LDFLAGS += ${AUDLDFLAGS}
 LIBS += ${BUILDERS_LDFLAGS} ${SIDPLAY1_LIBS} ${SIDPLAY2_LIBS} ${BUILDERS_LIBS} ${GTK_LIBS} ${GLIB_LIBS} -lstdc++ -laudutil
--- a/src/skins/Makefile	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/Makefile	Sat Jul 12 03:39:55 2008 +0300
@@ -24,6 +24,7 @@
        ui_main.c \
        ui_equalizer.c \
        ui_playlist.c \
+       ui_playlist_manager.c \
        ui_main_evlisteners.c \
        ui_playlist_evlisteners.c \
        ui_manager.c \
--- a/src/skins/plugin.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/plugin.c	Sat Jul 12 03:39:55 2008 +0300
@@ -36,7 +36,8 @@
     .id = "skinned",
     .desc = "Audacious Skinned GUI",
     .init = skins_init,
-    .fini = skins_cleanup
+    .fini = skins_cleanup,
+    .conf = skins_configure
 };
 
 SIMPLE_INTERFACE_PLUGIN("skinned", &skins_gp);
@@ -85,6 +86,8 @@
     init_skins(config.skin);
     mainwin_setup_menus();
 
+    aud_hook_call("create prefswin", NULL);
+
     if (config.player_visible) mainwin_real_show();
     if (config.equalizer_visible) equalizerwin_show(TRUE);
     if (config.playlist_visible) playlistwin_show();
--- a/src/skins/skins_cfg.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/skins_cfg.c	Sat Jul 12 03:39:55 2008 +0300
@@ -547,7 +547,7 @@
     }
 }
 
-void skins_configure(void) {
+GtkWidget* skins_configure(void) {
     GtkWidget *appearance_page_vbox;
     GtkWidget *vbox37;
     GtkWidget *vbox38;
@@ -561,21 +561,7 @@
     GtkWidget *alignment95;
     GtkWidget *skin_view_scrolled_window;
 
-    if (cfg_win != NULL) {
-        gtk_window_present(GTK_WINDOW(cfg_win));
-        return;
-    }
-
-    cfg_win = gtk_window_new(GTK_WINDOW_TOPLEVEL);
-    gtk_window_set_type_hint(GTK_WINDOW(cfg_win), GDK_WINDOW_TYPE_HINT_DIALOG);
-    gtk_window_set_title(GTK_WINDOW(cfg_win), _("Audacious Skinned GUI Configuration"));
-    gtk_container_set_border_width(GTK_CONTAINER(cfg_win), 10);
-    g_signal_connect(G_OBJECT(cfg_win), "destroy" ,
-                     G_CALLBACK(gtk_widget_destroyed), &cfg_win);
-    gtk_widget_set_size_request(cfg_win, 500, -1);
-
     appearance_page_vbox = gtk_vbox_new (FALSE, 0);
-    gtk_container_add(GTK_CONTAINER(cfg_win), appearance_page_vbox);
 
     vbox37 = gtk_vbox_new (FALSE, 0);
     gtk_box_pack_start (GTK_BOX (appearance_page_vbox), vbox37, TRUE, TRUE, 0);
@@ -658,5 +644,5 @@
 
     gtk_window_present(GTK_WINDOW(cfg_win));
 
-    return;
+    return appearance_page_vbox;
 }
--- a/src/skins/skins_cfg.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/skins_cfg.h	Sat Jul 12 03:39:55 2008 +0300
@@ -22,6 +22,7 @@
 #define SKINS_CFG_H
 
 #include <glib.h>
+#include <gtk/gtk.h>
 
 #define MAINWIN_DEFAULT_POS_X    20
 #define MAINWIN_DEFAULT_POS_Y    20
@@ -86,6 +87,6 @@
 void skins_cfg_load();
 void skins_cfg_save();
 
-void skins_configure(void);
+GtkWidget* skins_configure(void);
 
 #endif
--- a/src/skins/ui_equalizer.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/ui_equalizer.c	Sat Jul 12 03:39:55 2008 +0300
@@ -46,6 +46,7 @@
 #include "ui_main.h"
 #include "ui_playlist.h"
 #include <audacious/plugin.h>
+#include <audacious/equalizer_preset.h>
 
 #include "images/audacious_eq.xpm"
 
@@ -62,14 +63,6 @@
     PRESET_VIEW_N_COLS
 };
 
-struct _EqualizerPreset {
-    gchar *name;
-    gfloat preamp, bands[10];
-};
-
-typedef struct _EqualizerPreset EqualizerPreset;
-
-
 GtkWidget *equalizerwin;
 GtkWidget *equalizerwin_graph;
 
@@ -172,19 +165,31 @@
 {
     gint i;
 
-    aud_cfg->equalizer_preamp = ui_skinned_equalizer_slider_get_position(equalizerwin_preamp);
-    for (i = 0; i < 10; i++)
-        aud_cfg->equalizer_bands[i] = ui_skinned_equalizer_slider_get_position(equalizerwin_bands[i]);
+    aud_cfg->equalizer_preamp = equalizerwin_get_preamp();
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+        aud_cfg->equalizer_bands[i] = equalizerwin_get_band(i);
 
     aud_hook_call("equalizer changed", NULL);
     gtk_widget_queue_draw(equalizerwin_graph);
 }
 
 static void
+equalizerwin_apply_preset(EqualizerPreset *preset)
+{
+    if (preset == NULL)
+       return;
+
+    gint i;
+
+    equalizerwin_set_preamp(preset->preamp);
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+        equalizerwin_set_band(i, preset->bands[i]);
+}
+
+static void
 equalizerwin_on_pushed(void)
 {
-    aud_cfg->equalizer_active = UI_SKINNED_BUTTON(equalizerwin_on)->inside;
-    equalizerwin_eq_changed();
+    equalizerwin_activate(!aud_cfg->equalizer_active);
 }
 
 static void
@@ -275,59 +280,6 @@
     return TRUE;
 }
 
-static GList *
-equalizerwin_read_presets(const gchar * basename)
-{
-#if 0
-    gchar *filename, *name;
-    RcFile *rcfile;
-    GList *list = NULL;
-    gint i, p = 0;
-    EqualizerPreset *preset;
-
-    /* START mod: add check for the default presets locate in system path ({prefix}/share/audacious)
-       by Massimo Cavalleri (submax) */
-
-    filename = g_build_filename(aud_paths[BMP_PATH_USER_DIR], basename, NULL);
-
-    if ((rcfile = aud_rcfile_open(filename)) == NULL) {
-        g_free(filename);
-        // DATA_DIR = "{prefix}/share/audacious" ; example is "/usr/share/audacious"
-        filename = g_build_filename(DATA_DIR, basename, NULL);
-        if ((rcfile = aud_rcfile_open(filename)) == NULL) {
-           g_free(filename);
-           return NULL;
-        }
-    }
-
-    // END mod
-
-    g_free(filename);
-
-    for (;;) {
-        gchar section[21];
-
-        g_snprintf(section, sizeof(section), "Preset%d", p++);
-        if (aud_rcfile_read_string(rcfile, "Presets", section, &name)) {
-            preset = g_new0(EqualizerPreset, 1);
-            preset->name = name;
-            aud_rcfile_read_float(rcfile, name, "Preamp", &preset->preamp);
-            for (i = 0; i < 10; i++) {
-                gchar band[7];
-                g_snprintf(band, sizeof(band), "Band%d", i);
-                aud_rcfile_read_float(rcfile, name, band, &preset->bands[i]);
-            }
-            list = g_list_prepend(list, preset);
-        }
-        else
-            break;
-    }
-    list = g_list_reverse(list);
-    aud_rcfile_free(rcfile);
-    return list;
-#endif
-}
-
 gint
 equalizerwin_volume_frame_cb(gint pos)
 {
@@ -419,7 +371,7 @@
     ui_skinned_toggle_button_setup(equalizerwin_on, SKINNED_WINDOW(equalizerwin)->normal,
                                    14, 18, 25, 12, 10, 119, 128, 119, 69, 119, 187, 119, SKIN_EQMAIN);
     g_signal_connect(equalizerwin_on, "clicked", equalizerwin_on_pushed, NULL);
-    ui_skinned_button_set_inside(equalizerwin_on, aud_cfg->equalizer_active);
+    equalizerwin_activate(aud_cfg->equalizer_active);
 
     equalizerwin_auto = ui_skinned_button_new();
     ui_skinned_toggle_button_setup(equalizerwin_auto, SKINNED_WINDOW(equalizerwin)->normal,
@@ -456,12 +408,12 @@
     equalizerwin_graph = ui_skinned_equalizer_graph_new(SKINNED_WINDOW(equalizerwin)->normal, 86, 17);
 
     equalizerwin_preamp = ui_skinned_equalizer_slider_new(SKINNED_WINDOW(equalizerwin)->normal, 21, 38);
-    ui_skinned_equalizer_slider_set_position(equalizerwin_preamp, aud_cfg->equalizer_preamp);
+    equalizerwin_set_preamp(aud_cfg->equalizer_preamp);
 
-    for (i = 0; i < 10; i++) {
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++) {
         equalizerwin_bands[i] =
             ui_skinned_equalizer_slider_new(SKINNED_WINDOW(equalizerwin)->normal, 78 + (i * 18), 38);
-        ui_skinned_equalizer_slider_set_position(equalizerwin_bands[i], aud_cfg->equalizer_bands[i]);
+        equalizerwin_set_band(i, aud_cfg->equalizer_bands[i]);
     }
 
     equalizerwin_volume =
@@ -528,8 +480,8 @@
 void
 equalizerwin_create(void)
 {
-    equalizer_presets = equalizerwin_read_presets("eq.preset");
-    equalizer_auto_presets = equalizerwin_read_presets("eq.auto_preset");
+    equalizer_presets = aud_equalizer_read_presets("eq.preset");
+    equalizer_auto_presets = aud_equalizer_read_presets("eq.auto_preset");
 
     equalizerwin_create_window();
 
@@ -597,40 +549,6 @@
     return NULL;
 }
 
-static void
-equalizerwin_write_preset_file(GList * list, const gchar * basename)
-{
-#if 0
-    gchar *filename, *tmp;
-    gint i, p;
-    EqualizerPreset *preset;
-    RcFile *rcfile;
-    GList *node;
-
-    rcfile = aud_rcfile_new();
-    p = 0;
-    for (node = list; node; node = g_list_next(node)) {
-        preset = node->data;
-        tmp = g_strdup_printf("Preset%d", p++);
-        aud_rcfile_write_string(rcfile, "Presets", tmp, preset->name);
-        g_free(tmp);
-        aud_rcfile_write_float(rcfile, preset->name, "Preamp",
-                               preset->preamp);
-        for (i = 0; i < 10; i++) {
-            tmp = g_strdup_printf("Band%d\n", i);
-            aud_rcfile_write_float(rcfile, preset->name, tmp,
-                                   preset->bands[i]);
-            g_free(tmp);
-        }
-    }
-
-    filename = g_build_filename(aud_paths[BMP_PATH_USER_DIR], basename, NULL);
-    aud_rcfile_write(rcfile, filename);
-    aud_rcfile_free(rcfile);
-    g_free(filename);
-#endif
-}
-
 static gboolean
 equalizerwin_load_preset(GList * list, const gchar * name)
 {
@@ -638,10 +556,10 @@
     gint i;
 
     if ((preset = equalizerwin_find_preset(list, name)) != NULL) {
-        ui_skinned_equalizer_slider_set_position(equalizerwin_preamp, preset->preamp);
-        for (i = 0; i < 10; i++)
-            ui_skinned_equalizer_slider_set_position(equalizerwin_bands[i], preset->bands[i]);
-        equalizerwin_eq_changed();
+        equalizerwin_set_preamp(preset->preamp);
+        for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+            equalizerwin_set_band(i, preset->bands[i]);
+
         return TRUE;
     }
     return FALSE;
@@ -660,11 +578,11 @@
         list = g_list_append(list, preset);
     }
 
-    preset->preamp = ui_skinned_equalizer_slider_get_position(equalizerwin_preamp);
-    for (i = 0; i < 10; i++)
-        preset->bands[i] = ui_skinned_equalizer_slider_get_position(equalizerwin_bands[i]);
+    preset->preamp = equalizerwin_get_preamp();
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+        preset->bands[i] = equalizerwin_get_band(i);
 
-    equalizerwin_write_preset_file(list, filename);
+    aud_equalizer_write_preset_file(list, filename);
 
     return list;
 }
@@ -685,7 +603,7 @@
     equalizer_preset_free(preset);
     g_list_free_1(node);
 
-    equalizerwin_write_preset_file(list, filename);
+    aud_equalizer_write_preset_file(list, filename);
 
     return list;
 }
@@ -734,61 +652,6 @@
     }
 }
 
-static GList *
-import_winamp_eqf(VFSFile * file)
-{
-#if 0
-    gchar header[31];
-    gchar bands[11];
-    gint i = 0;
-    EqualizerPreset *preset = NULL;
-    GList *list = NULL;
-    GtkWidget *dialog;
-    gchar *realfn;
-    gchar preset_name[0xb4];
-
-    vfs_fread(header, 1, 31, file);
-    if (strncmp(header, "Winamp EQ library file v1.1", 27)) goto error;
-
-    AUDDBG("The EQF header is OK\n");
-
-    if (vfs_fseek(file, 0x1f, SEEK_SET) == -1) goto error;
-
-    while (vfs_fread(preset_name, 1, 0xb4, file) == 0xb4) {
-        AUDDBG("The preset name is '%s'\n", preset_name);
-        vfs_fseek(file, 0x4d, SEEK_CUR); /* unknown crap --asphyx */
-        if (vfs_fread(bands, 1, 11, file) != 11) break;
-
-        preset = equalizer_preset_new(preset_name);
-        /*this was divided by 63, but shouldn't it be 64? --majeru*/
-        preset->preamp = EQUALIZER_MAX_GAIN - ((bands[10] * EQUALIZER_MAX_GAIN * 2) / 64.0);
-
-        for (i = 0; i < 10; i++)
-            preset->bands[i] = EQUALIZER_MAX_GAIN - ((bands[i] * EQUALIZER_MAX_GAIN * 2) / 64.0);
-        
-        list = g_list_prepend(list, preset);
-    }
-    
-    list = g_list_reverse(list);
-    if (list == NULL) goto error;
-
-    return list;
-
-error:
-    realfn = g_filename_from_uri(file->uri, NULL, NULL);
-    dialog = gtk_message_dialog_new (GTK_WINDOW(mainwin),
-                                     GTK_DIALOG_DESTROY_WITH_PARENT,
-                                     GTK_MESSAGE_ERROR,
-                                     GTK_BUTTONS_CLOSE,
-                                     _("Error importing Winamp EQF file '%s'"),
-                                     realfn);
-    gtk_dialog_run (GTK_DIALOG (dialog));
-    gtk_widget_destroy (dialog);
-    g_free(realfn);
-    return NULL;
-#endif
-}
-
 static void
 free_cb (gpointer data, gpointer user_data)
 {
@@ -801,41 +664,31 @@
     GList *presets;
     gint i;
 
-    if ((presets = import_winamp_eqf(file)) == NULL)
+    if ((presets = aud_import_winamp_eqf(file)) == NULL)
         return;
 
     /* just get the first preset --asphyx */
     EqualizerPreset *preset = (EqualizerPreset*)presets->data;
-    ui_skinned_equalizer_slider_set_position(equalizerwin_preamp,
-                                             preset->preamp);
+    equalizerwin_set_preamp(preset->preamp);
 
-    for (i = 0; i < 10; i++)
-        ui_skinned_equalizer_slider_set_position(equalizerwin_bands[i],
-                                                 preset->bands[i]);
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+        equalizerwin_set_band(i, preset->bands[i]);
 
     g_list_foreach(presets, free_cb, NULL);
     g_list_free(presets);
 
     equalizerwin_eq_changed();
 }
-#if 0
+
 static void
-equalizerwin_read_aud_preset(RcFile * rcfile)
+equalizerwin_read_aud_preset(const gchar * file)
 {
-    gfloat val;
-    gint i;
-
-    if (aud_rcfile_read_float(rcfile, "Equalizer preset", "Preamp", &val))
-        ui_skinned_equalizer_slider_set_position(equalizerwin_preamp, val);
-    for (i = 0; i < 10; i++) {
-        gchar tmp[7];
-        g_snprintf(tmp, sizeof(tmp), "Band%d", i);
-        if (aud_rcfile_read_float(rcfile, "Equalizer preset", tmp, &val))
-            ui_skinned_equalizer_slider_set_position(equalizerwin_bands[i], val);
+    EqualizerPreset *preset = aud_equalizer_read_aud_preset(file);
+    if (preset) {
+        equalizerwin_apply_preset(preset);
+        equalizer_preset_free(preset);
     }
-    equalizerwin_eq_changed();
 }
-#endif
 
 static void
 equalizerwin_save_ok(GtkWidget * widget, gpointer data)
@@ -980,27 +833,13 @@
     equalizerwin_delete_selected_presets(GTK_TREE_VIEW(data), "eq.auto_preset");
 }
 
-
-static void
-load_preset_file(const gchar *filename)
-{
-#if 0
-    RcFile *rcfile;
-
-    if ((rcfile = aud_rcfile_open(filename)) != NULL) {
-        equalizerwin_read_aud_preset(rcfile);
-        aud_rcfile_free(rcfile);
-    }
-#endif
-}
-
 static VFSFile *
 open_vfs_file(const gchar *filename, const gchar *mode)
 {
     VFSFile *file;
     GtkWidget *dialog;
 
-    if (!(file = vfs_fopen(filename, mode))) {
+    if (!(file = aud_vfs_fopen(filename, mode))) {
         dialog = gtk_message_dialog_new (GTK_WINDOW (mainwin),
                                          GTK_DIALOG_DESTROY_WITH_PARENT,
                                          GTK_MESSAGE_ERROR,
@@ -1017,62 +856,34 @@
 static void
 load_winamp_file(const gchar * filename)
 {
-#if 0
     VFSFile *file;
 
     if (!(file = open_vfs_file(filename, "rb")))
         return;
 
     equalizerwin_read_winamp_eqf(file);
-    vfs_fclose(file);
-#endif
+    aud_vfs_fclose(file);
 }
 
 static void
 import_winamp_file(const gchar * filename)
 {
-#if 0
     VFSFile *file;
     GList *list;
 
     if (!(file = open_vfs_file(filename, "rb")) ||
-        !(list = import_winamp_eqf(file)))
+        !(list = aud_import_winamp_eqf(file)))
         return;
 
     equalizer_presets = g_list_concat(equalizer_presets, list);
-    equalizerwin_write_preset_file(equalizer_presets, "eq.preset");
-
-    vfs_fclose(file);
-#endif
-}
-
-static void
-save_preset_file(const gchar * filename)
-{
-#if 0
-    RcFile *rcfile;
-    gint i;
+    aud_equalizer_write_preset_file(equalizer_presets, "eq.preset");
 
-    rcfile = aud_rcfile_new();
-    aud_rcfile_write_float(rcfile, "Equalizer preset", "Preamp",
-                           ui_skinned_equalizer_slider_get_position(equalizerwin_preamp));
-
-    for (i = 0; i < 10; i++) {
-        gchar tmp[7];
-        g_snprintf(tmp, sizeof(tmp), "Band%d", i);
-        aud_rcfile_write_float(rcfile, "Equalizer preset", tmp,
-                               ui_skinned_equalizer_slider_get_position(equalizerwin_bands[i]));
-    }
-
-    aud_rcfile_write(rcfile, filename);
-    aud_rcfile_free(rcfile);
-#endif
+    aud_vfs_fclose(file);
 }
 
 static void
 save_winamp_file(const gchar * filename)
 {
-#if 0
     VFSFile *file;
 
     gchar name[257];
@@ -1082,19 +893,19 @@
     if (!(file = open_vfs_file(filename, "wb")))
         return;
 
-    vfs_fwrite("Winamp EQ library file v1.1\x1a!--", 1, 31, file);
+    aud_vfs_fwrite("Winamp EQ library file v1.1\x1a!--", 1, 31, file);
 
     memset(name, 0, 257);
     g_strlcpy(name, "Entry1", 257);
-    vfs_fwrite(name, 1, 257, file);
+    aud_vfs_fwrite(name, 1, 257, file);
+
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+        bands[i] = 63 - (((equalizerwin_get_band(i) + EQUALIZER_MAX_GAIN) * 63) / EQUALIZER_MAX_GAIN / 2);
 
-    for (i = 0; i < 10; i++)
-        bands[i] = 63 - (((ui_skinned_equalizer_slider_get_position(equalizerwin_bands[i]) + EQUALIZER_MAX_GAIN) * 63) / EQUALIZER_MAX_GAIN / 2);
-    bands[10] = 63 - (((ui_skinned_equalizer_slider_get_position(equalizerwin_preamp) + EQUALIZER_MAX_GAIN) * 63) / EQUALIZER_MAX_GAIN / 2);
-    vfs_fwrite(bands, 1, 11, file);
+    bands[AUD_EQUALIZER_NBANDS] = 63 - (((equalizerwin_get_preamp() + EQUALIZER_MAX_GAIN) * 63) / EQUALIZER_MAX_GAIN / 2);
 
-    vfs_fclose(file);
-#endif
+    aud_vfs_fwrite(bands, 1, 11, file);
+    aud_vfs_fclose(file);
 }
 
 static GtkWidget *
@@ -1210,9 +1021,7 @@
 void
 equalizerwin_load_auto_preset(const gchar * filename)
 {
-#if 0
     gchar *presetfilename, *directory;
-    RcFile *rcfile;
 
     g_return_if_fail(filename != NULL);
 
@@ -1222,11 +1031,9 @@
     presetfilename = g_strconcat(filename, ".", aud_cfg->eqpreset_extension, NULL);
 
     /* First try to find a per file preset file */
-    if (strlen(aud_cfg->eqpreset_extension) > 0 &&
-        (rcfile = aud_rcfile_open(presetfilename)) != NULL) {
+    if (strlen(aud_cfg->eqpreset_extension) > 0) {
+        equalizerwin_read_aud_preset(presetfilename);
         g_free(presetfilename);
-        equalizerwin_read_aud_preset(rcfile);
-        aud_rcfile_free(rcfile);
         return;
     }
 
@@ -1238,10 +1045,8 @@
     g_free(directory);
 
     /* Try to find a per directory preset file */
-    if (strlen(aud_cfg->eqpreset_default_file) > 0 &&
-        (rcfile = aud_rcfile_open(presetfilename)) != NULL) {
-        equalizerwin_read_aud_preset(rcfile);
-        aud_rcfile_free(rcfile);
+    if (strlen(aud_cfg->eqpreset_default_file) > 0) {
+        equalizerwin_read_aud_preset(presetfilename);
     }
     else if (!equalizerwin_load_preset
              (equalizer_auto_presets, g_basename(filename))) {
@@ -1250,7 +1055,6 @@
     }
 
     g_free(presetfilename);
-#endif
 }
 
 void
@@ -1263,7 +1067,7 @@
 void
 equalizerwin_set_band(gint band, gfloat value)
 {
-    g_return_if_fail(band >= 0 && band < 10);
+    g_return_if_fail(band >= 0 && band < AUD_EQUALIZER_NBANDS);
     ui_skinned_equalizer_slider_set_position(equalizerwin_bands[band], value);
 }
 
@@ -1276,7 +1080,7 @@
 gfloat
 equalizerwin_get_band(gint band)
 {
-    g_return_val_if_fail(band >= 0 && band < 10, 0.0);
+    g_return_val_if_fail(band >= 0 && band < AUD_EQUALIZER_NBANDS, 0.0);
     return ui_skinned_equalizer_slider_get_position(equalizerwin_bands[band]);
 }
 
@@ -1287,7 +1091,7 @@
         gtk_window_present(GTK_WINDOW(equalizerwin_load_window));
         return;
     }
-    
+
     equalizerwin_create_list_window(equalizer_presets,
                                     Q_("Load preset"),
                                     &equalizerwin_load_window,
@@ -1325,11 +1129,9 @@
 {
     gint i;
 
-    ui_skinned_equalizer_slider_set_position(equalizerwin_preamp, 0);
-    for (i = 0; i < 10; i++)
-        ui_skinned_equalizer_slider_set_position(equalizerwin_bands[i], 0);
-
-    equalizerwin_eq_changed();
+    equalizerwin_set_preamp(0);
+    for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+        equalizerwin_set_band(i, 0);
 }
 
 void
@@ -1342,7 +1144,9 @@
     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
     {
         file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
-        load_preset_file(file_uri);
+        EqualizerPreset *preset = aud_load_preset_file(file_uri);
+        equalizerwin_apply_preset(preset);
+        equalizer_preset_free(preset);
         g_free(file_uri);
     }
     gtk_widget_destroy(dialog);
@@ -1438,12 +1242,19 @@
     gchar *file_uri;
     gchar *songname;
     Playlist *playlist = aud_playlist_get_active();
+    gint i;
 
     dialog = make_filebrowser(Q_("Save equalizer preset"), TRUE);
     if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT)
     {
         file_uri = gtk_file_chooser_get_uri(GTK_FILE_CHOOSER(dialog));
-        save_preset_file(file_uri);
+        EqualizerPreset *preset = g_new0(EqualizerPreset, 1);
+        preset->name = g_strdup(file_uri);
+        preset->preamp = equalizerwin_get_preamp();
+        for (i = 0; i < AUD_EQUALIZER_NBANDS; i++)
+            preset->bands[i] = equalizerwin_get_band(i);
+        aud_save_preset_file(preset, file_uri);
+        equalizer_preset_free(preset);
         g_free(file_uri);
     }
 
@@ -1511,10 +1322,9 @@
 }
 
 void
-equalizer_activate(gboolean active)
+equalizerwin_activate(gboolean active)
 {
     aud_cfg->equalizer_active = active;
     ui_skinned_button_set_inside(equalizerwin_on, active);
-
     equalizerwin_eq_changed();
 }
--- a/src/skins/ui_equalizer.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/ui_equalizer.h	Sat Jul 12 03:39:55 2008 +0300
@@ -64,6 +64,6 @@
 extern GtkWidget *equalizerwin_graph;
 extern gboolean equalizerwin_focus;
 
-void equalizer_activate(gboolean active);
+void equalizerwin_activate(gboolean active);
 
 #endif /* AUDACIOUS_UI_EQUALIZER_H */
--- a/src/skins/ui_main.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/ui_main.c	Sat Jul 12 03:39:55 2008 +0300
@@ -68,7 +68,6 @@
 #include "ui_dock.h"
 #include "ui_main_evlisteners.h"
 #include "ui_skinselector.h"
-#include "ui_urlopener.h"
 #include "util.h"
 #include "visualization.h"
 #endif
@@ -1073,30 +1072,6 @@
 }
 
 static void
-on_add_url_add_clicked(GtkWidget * widget,
-                       GtkWidget * entry)
-{
-    const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
-    if (text && *text)
-        aud_playlist_add_url(aud_playlist_get_active(), text);
-}
-
-static void
-on_add_url_ok_clicked(GtkWidget * widget,
-                      GtkWidget * entry)
-{
-    Playlist *playlist = aud_playlist_get_active();
-
-    const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry));
-    if (text && *text)
-    {
-        aud_playlist_clear(playlist);
-        aud_playlist_add_url(playlist, text);
-        audacious_drct_initiate();
-    }
-}
-
-static void
 on_visibility_warning_toggle(GtkToggleButton *tbt, gpointer unused)
 {
     config.warn_about_win_visibility = !gtk_toggle_button_get_active(tbt);
@@ -1220,28 +1195,6 @@
     g_free(theme);
 }
 
-void
-mainwin_show_add_url_window(void)
-{
-#if 0
-    static GtkWidget *url_window = NULL;
-
-    if (!url_window) {
-        url_window =
-            util_add_url_dialog_new(_("Enter location to play:"),
-                                    G_CALLBACK(on_add_url_ok_clicked),
-                                    G_CALLBACK(on_add_url_add_clicked));
-        gtk_window_set_transient_for(GTK_WINDOW(url_window),
-                                     GTK_WINDOW(mainwin));
-        g_signal_connect(url_window, "destroy",
-                         G_CALLBACK(gtk_widget_destroyed),
-                         &url_window);
-    }
-
-    gtk_window_present(GTK_WINDOW(url_window));
-#endif
-}
-
 static void
 check_set( GtkActionGroup * action_group ,
            const gchar * action_name ,
@@ -1749,7 +1702,7 @@
             break;
         }
         case MAINWIN_GENERAL_PLAYLOCATION:
-            mainwin_show_add_url_window();
+            action_play_location();
             break;
         case MAINWIN_GENERAL_FILEINFO:
             aud_playlist_fileinfo_current(playlist);
@@ -2756,7 +2709,7 @@
 void
 action_play_location( void )
 {
-    mainwin_show_add_url_window();
+    aud_hook_call("urlopener show", NULL);
 }
 
 void
--- a/src/skins/ui_main.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/ui_main.h	Sat Jul 12 03:39:55 2008 +0300
@@ -155,7 +155,6 @@
 void mainwin_repeat_pushed(gboolean toggled);
 void mainwin_disable_seekbar(void);
 void mainwin_set_title(const gchar * text);
-void mainwin_show_add_url_window(void);
 void mainwin_minimize_cb(void);
 void mainwin_general_menu_callback(gpointer cb_data,
                                    guint action,
--- a/src/skins/ui_playlist.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/skins/ui_playlist.c	Sat Jul 12 03:39:55 2008 +0300
@@ -54,9 +54,7 @@
 #include "ui_main.h"
 #include "ui_manager.h"
 #include "ui_playlist_evlisteners.h"
-#if 0
 #include "ui_playlist_manager.h"
-#endif
 #include "util.h"
 
 #include "ui_skinned_window.h"
@@ -1201,7 +1199,7 @@
         break;
     case GDK_Insert:
         if (event->state & GDK_MOD1_MASK)
-            mainwin_show_add_url_window();
+            action_playlist_add_url();
         else
             playlistwin_show_filebrowser();
         break;
@@ -1802,7 +1800,7 @@
 void
 action_playlist_add_url(void)
 {
-    mainwin_show_add_url_window();
+    aud_hook_call("urlopener show", NULL);
 }
 
 void
@@ -1869,9 +1867,7 @@
 void
 action_open_list_manager(void)
 {
-#if 0
     playlist_manager_ui_show();
-#endif
 }
 
 void
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/skins/ui_playlist_manager.c	Sat Jul 12 03:39:55 2008 +0300
@@ -0,0 +1,498 @@
+/*  Audacious - Cross-platform multimedia player
+ *  Copyright (C) 2005-2007  Audacious development team.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; under version 3 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses>.
+ *
+ *  The Audacious team does not consider modular code linking to
+ *  Audacious or using our public API to be a derived work.
+ */
+
+#include "ui_playlist_manager.h"
+#include "ui_playlist.h"
+#include <audacious/plugin.h>
+#include "ui_main.h"
+
+#include <glib.h>
+#include <glib/gi18n.h>
+#include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
+
+
+#define DISABLE_MANAGER_UPDATE() g_object_set_data(G_OBJECT(listview),"opt1",GINT_TO_POINTER(1))
+#define ENABLE_MANAGER_UPDATE() g_object_set_data(G_OBJECT(listview),"opt1",GINT_TO_POINTER(0))
+
+
+static GtkWidget *playman_win = NULL;
+
+
+/* in this enum, place the columns according to visualization order
+   (information not displayed in columns should be placed right before PLLIST_NUMCOLS) */
+enum
+{
+    PLLIST_COL_NAME = 0,
+    PLLIST_COL_ENTRIESNUM,
+    PLLIST_PLPOINTER,
+    PLLIST_TEXT_WEIGHT,
+    PLLIST_NUMCOLS
+};
+
+
+static GtkTreeIter
+playlist_manager_populate ( GtkListStore * store )
+{
+    GList *playlists = NULL;
+    Playlist *active, *iter_playlist, *next_playlist;
+    GtkTreeIter iter, insert, next, active_iter;
+    gboolean valid, have_active_iter;
+
+    active = aud_playlist_get_active();
+    playlists = aud_playlist_get_playlists();
+    valid = gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store) , &iter );
+    have_active_iter = FALSE;
+    while ( playlists != NULL )
+    {
+        GList *entries = NULL;
+        gint entriesnum = 0;
+        gchar *pl_name = NULL;
+        Playlist *playlist = (Playlist*)playlists->data;
+
+        if(playlist != active) //XXX the active playlist has been locked in playlist_new_from_selected()
+            PLAYLIST_LOCK(playlist);
+
+        /* for each playlist, pick name and number of entries */
+        pl_name = (gchar*)aud_playlist_get_current_name( playlist );
+        for (entries = playlist->entries; entries; entries = g_list_next(entries))
+            entriesnum++;
+
+        if(playlist != active)
+            PLAYLIST_UNLOCK(playlist);
+
+        /* update the tree model conservatively */
+
+        if ( !valid )
+        {
+            /* append */
+            gtk_list_store_append( store , &insert );
+            goto store_set;
+        }
+
+        gtk_tree_model_get( GTK_TREE_MODEL(store) , &iter ,
+                PLLIST_PLPOINTER , &iter_playlist , -1 );
+
+        if ( playlist == iter_playlist )
+        {
+            /* already have - just update */
+            insert = iter;
+            valid = gtk_tree_model_iter_next( GTK_TREE_MODEL(store) , &iter );
+            goto store_set;
+        }
+
+        /* handle movement/deletion/insertion of single elements */
+        if ( gtk_tree_model_iter_next( GTK_TREE_MODEL(store) , &next ) )
+        {
+            gtk_tree_model_get( GTK_TREE_MODEL(store) , &next ,
+                    PLLIST_PLPOINTER , &next_playlist , -1 );
+            if ( playlist == next_playlist )
+            {
+                /* remove */
+                gtk_list_store_remove( store , &iter );
+                iter = next;
+                valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter);
+                goto next_playlist;
+            }
+        }
+
+        /* insert */
+        gtk_list_store_insert_before( store , &insert , &iter );
+
+store_set:
+        gtk_list_store_set( store, &insert,
+                            PLLIST_COL_NAME , pl_name ,
+                            PLLIST_COL_ENTRIESNUM , entriesnum ,
+                            PLLIST_PLPOINTER , playlist ,
+                            PLLIST_TEXT_WEIGHT , playlist == active ?
+                                PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL ,
+                            -1 );
+        if ( !have_active_iter && playlist == active )
+        {
+            active_iter = insert;
+            have_active_iter = TRUE;
+        }
+
+next_playlist:
+        playlists = g_list_next(playlists);
+    }
+
+    while (valid)
+    {
+        /* remove any other elements */
+        next = iter;
+        valid = gtk_tree_model_iter_next( GTK_TREE_MODEL(store) , &next );
+        gtk_list_store_remove( store , &iter );
+        iter = next;
+    }
+
+    if ( !have_active_iter )
+        gtk_tree_model_get_iter_first( GTK_TREE_MODEL(store) , &active_iter );
+
+    return active_iter;
+}
+
+
+static void
+playlist_manager_cb_new ( gpointer listview )
+{
+    GList *playlists = NULL;
+    Playlist *newpl = NULL;
+    GtkTreeIter iter;
+    GtkListStore *store;
+    gchar *pl_name = NULL;
+
+    /* this ensures that playlist_manager_update() will
+       not perform update, since we're already doing it here */
+    DISABLE_MANAGER_UPDATE();
+
+    newpl = aud_playlist_new();
+    pl_name = (gchar*)aud_playlist_get_current_name( newpl );
+    playlists = aud_playlist_get_playlists();
+    aud_playlist_add_playlist( newpl );
+
+    store = (GtkListStore*)gtk_tree_view_get_model( GTK_TREE_VIEW(listview) );
+    gtk_list_store_append( store , &iter );
+    gtk_list_store_set( store, &iter,
+                        PLLIST_COL_NAME , pl_name ,
+                        PLLIST_COL_ENTRIESNUM , 0 ,
+                        PLLIST_PLPOINTER , newpl ,
+                        PLLIST_TEXT_WEIGHT , PANGO_WEIGHT_NORMAL ,
+                        -1 );
+
+    ENABLE_MANAGER_UPDATE();
+
+    return;
+}
+
+
+static void
+playlist_manager_cb_del ( gpointer listview )
+{
+    GtkTreeSelection *listsel = gtk_tree_view_get_selection( GTK_TREE_VIEW(listview) );
+    GtkTreeModel *store;
+    GtkTreeIter iter;
+    Playlist *active;
+    gboolean was_active;
+
+    if ( gtk_tree_selection_get_selected( listsel , &store , &iter ) == TRUE )
+    {
+        Playlist *playlist = NULL;
+        gtk_tree_model_get( store, &iter, PLLIST_PLPOINTER , &playlist , -1 );
+
+        active = aud_playlist_get_active();
+        was_active = ( playlist == active );
+
+        if ( gtk_tree_model_iter_n_children( store , NULL ) < 2 )
+        {
+            /* let playlist_manager_update() handle the deletion of the last playlist */
+            aud_playlist_remove_playlist( playlist );
+        }
+        else
+        {
+            gtk_list_store_remove( (GtkListStore*)store , &iter );
+            /* this ensures that playlist_manager_update() will
+               not perform update, since we're already doing it here */
+            DISABLE_MANAGER_UPDATE();
+            aud_playlist_remove_playlist( playlist );
+            ENABLE_MANAGER_UPDATE();
+        }
+
+        if ( was_active && gtk_tree_model_get_iter_first( store , &iter ) )
+        {
+            /* update bolded playlist */
+            active = aud_playlist_get_active();
+            do {
+                gtk_tree_model_get( store , &iter ,
+                        PLLIST_PLPOINTER , &playlist , -1 );
+                gtk_list_store_set( GTK_LIST_STORE(store) , &iter ,
+                        PLLIST_TEXT_WEIGHT , playlist == active ?
+                            PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL ,
+                       -1 );
+            } while ( gtk_tree_model_iter_next( store , &iter ) );
+        }
+    }
+
+    return;
+}
+
+
+static void
+playlist_manager_cb_lv_dclick ( GtkTreeView * listview , GtkTreePath * path ,
+                                GtkTreeViewColumn * col , gpointer userdata )
+{
+    GtkTreeModel *store;
+    GtkTreeIter iter;
+    Playlist *playlist = NULL, *active;
+
+    store = gtk_tree_view_get_model( GTK_TREE_VIEW(listview) );
+    if ( gtk_tree_model_get_iter( store , &iter , path ) == TRUE )
+    {
+        gtk_tree_model_get( store , &iter , PLLIST_PLPOINTER , &playlist , -1 );
+        DISABLE_MANAGER_UPDATE();
+        aud_playlist_select_playlist( playlist );
+        ENABLE_MANAGER_UPDATE();
+    }
+
+    if ( gtk_tree_model_get_iter_first( store , &iter ) )
+    {
+        /* update bolded playlist */
+        active = aud_playlist_get_active();
+        do {
+            gtk_tree_model_get( store , &iter ,
+                    PLLIST_PLPOINTER , &playlist , -1 );
+            gtk_list_store_set( GTK_LIST_STORE(store) , &iter ,
+                    PLLIST_TEXT_WEIGHT , playlist == active ?
+                        PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL ,
+                   -1 );
+        } while ( gtk_tree_model_iter_next( store , &iter ) );
+    }
+
+    return;
+}
+
+
+static void
+playlist_manager_cb_lv_pmenu_rename ( GtkMenuItem *menuitem , gpointer lv )
+{
+    GtkTreeSelection *listsel = gtk_tree_view_get_selection( GTK_TREE_VIEW(lv) );
+    GtkTreeModel *store;
+    GtkTreeIter iter;
+
+    if ( gtk_tree_selection_get_selected( listsel , &store , &iter ) == TRUE )
+    {
+        GtkTreePath *path = gtk_tree_model_get_path( GTK_TREE_MODEL(store) , &iter );
+        GtkCellRenderer *rndrname = g_object_get_data( G_OBJECT(lv) , "rn" );
+        /* set the name renderer to editable and start editing */
+        g_object_set( G_OBJECT(rndrname) , "editable" , TRUE , NULL );
+        gtk_tree_view_set_cursor_on_cell( GTK_TREE_VIEW(lv) , path ,
+                                          gtk_tree_view_get_column( GTK_TREE_VIEW(lv) , PLLIST_COL_NAME ) , rndrname , TRUE );
+        gtk_tree_path_free( path );
+    }
+}
+
+static void
+playlist_manager_cb_lv_name_edited ( GtkCellRendererText *cell , gchar *path_string ,
+                                     gchar *new_text , gpointer listview )
+{
+    /* this is currently used to change playlist names */
+    GtkTreeModel *store = gtk_tree_view_get_model( GTK_TREE_VIEW(listview) );
+    GtkTreeIter iter;
+
+    if ( gtk_tree_model_get_iter_from_string( store , &iter , path_string ) == TRUE )
+    {
+        Playlist *playlist = NULL;
+        gtk_tree_model_get( GTK_TREE_MODEL(store), &iter, PLLIST_PLPOINTER , &playlist , -1 );
+        DISABLE_MANAGER_UPDATE();
+        aud_playlist_set_current_name( playlist , new_text );
+        ENABLE_MANAGER_UPDATE();
+        gtk_list_store_set( GTK_LIST_STORE(store), &iter, PLLIST_COL_NAME , new_text , -1 );
+    }
+    /* set the renderer uneditable again */
+    g_object_set( G_OBJECT(cell) , "editable" , FALSE , NULL );
+}
+
+
+static gboolean
+playlist_manager_cb_lv_btpress ( GtkWidget *lv , GdkEventButton *event )
+{
+    if (( event->type == GDK_BUTTON_PRESS ) && ( event->button == 3 ))
+    {
+        GtkWidget *pmenu = (GtkWidget*)g_object_get_data( G_OBJECT(lv) , "menu" );
+        gtk_menu_popup( GTK_MENU(pmenu) , NULL , NULL , NULL , NULL ,
+                        (event != NULL) ? event->button : 0,
+                        event->time);
+        return TRUE;
+    }
+
+    return FALSE;
+}
+
+
+static gboolean
+playlist_manager_cb_keypress ( GtkWidget *win , GdkEventKey *event )
+{
+    switch (event->keyval)
+    {
+        case GDK_Escape:
+            gtk_widget_destroy( playman_win );
+            return TRUE;
+        default:
+            return FALSE;
+    }
+}
+
+
+void
+playlist_manager_ui_show ( void )
+{
+    GtkWidget *playman_vbox;
+    GtkWidget *playman_pl_lv, *playman_pl_lv_frame, *playman_pl_lv_sw;
+    GtkCellRenderer *playman_pl_lv_textrndr_name, *playman_pl_lv_textrndr_entriesnum;
+    GtkTreeViewColumn *playman_pl_lv_col_name, *playman_pl_lv_col_entriesnum;
+    GtkListStore *pl_store;
+    GtkWidget *playman_pl_lv_pmenu, *playman_pl_lv_pmenu_rename;
+    GtkWidget *playman_bbar_hbbox;
+    GtkWidget *playman_bbar_bt_new, *playman_bbar_bt_del, *playman_bbar_bt_close;
+    GdkGeometry playman_win_hints;
+    GtkTreeIter active_iter;
+    GtkTreePath *active_path;
+
+    if ( playman_win != NULL )
+    {
+        gtk_window_present( GTK_WINDOW(playman_win) );
+        return;
+    }
+
+    playman_win = gtk_window_new( GTK_WINDOW_TOPLEVEL );
+    gtk_window_set_type_hint( GTK_WINDOW(playman_win), GDK_WINDOW_TYPE_HINT_DIALOG );
+    gtk_window_set_transient_for( GTK_WINDOW(playman_win) , GTK_WINDOW(mainwin) );
+    gtk_window_set_position( GTK_WINDOW(playman_win), GTK_WIN_POS_CENTER );
+    gtk_window_set_title( GTK_WINDOW(playman_win), _("Playlist Manager") );
+    gtk_container_set_border_width( GTK_CONTAINER(playman_win), 10 );
+    g_signal_connect( G_OBJECT(playman_win) , "destroy" ,
+                      G_CALLBACK(gtk_widget_destroyed) , &playman_win );
+    g_signal_connect( G_OBJECT(playman_win) , "key-press-event" ,
+                      G_CALLBACK(playlist_manager_cb_keypress) , NULL );
+    playman_win_hints.min_width = 400;
+    playman_win_hints.min_height = 250;
+    gtk_window_set_geometry_hints( GTK_WINDOW(playman_win) , GTK_WIDGET(playman_win) ,
+                                   &playman_win_hints , GDK_HINT_MIN_SIZE );
+
+    playman_vbox = gtk_vbox_new( FALSE , 10 );
+    gtk_container_add( GTK_CONTAINER(playman_win) , playman_vbox );
+
+    /* current liststore model
+       ----------------------------------------------
+       G_TYPE_STRING -> playlist name
+       G_TYPE_UINT -> number of entries in playlist
+       G_TYPE_POINTER -> playlist pointer (Playlist*)
+       PANGO_TYPE_WEIGHT -> font weight
+       ----------------------------------------------
+       */
+    pl_store = gtk_list_store_new( PLLIST_NUMCOLS ,
+            G_TYPE_STRING , G_TYPE_UINT , G_TYPE_POINTER , PANGO_TYPE_WEIGHT );
+    active_iter = playlist_manager_populate( pl_store );
+
+    playman_pl_lv_frame = gtk_frame_new( NULL );
+    playman_pl_lv = gtk_tree_view_new_with_model( GTK_TREE_MODEL(pl_store) );
+
+    g_object_set_data( G_OBJECT(playman_win) , "lv" , playman_pl_lv );
+    g_object_set_data( G_OBJECT(playman_pl_lv) , "opt1" , GINT_TO_POINTER(0) );
+    playman_pl_lv_textrndr_entriesnum = gtk_cell_renderer_text_new(); /* uneditable */
+    playman_pl_lv_textrndr_name = gtk_cell_renderer_text_new(); /* can become editable */
+    g_object_set( G_OBJECT(playman_pl_lv_textrndr_entriesnum) , "weight-set" , TRUE , NULL );
+    g_object_set( G_OBJECT(playman_pl_lv_textrndr_name) , "weight-set" , TRUE , NULL );
+    g_signal_connect( G_OBJECT(playman_pl_lv_textrndr_name) , "edited" ,
+                      G_CALLBACK(playlist_manager_cb_lv_name_edited) , playman_pl_lv );
+    g_object_set_data( G_OBJECT(playman_pl_lv) , "rn" , playman_pl_lv_textrndr_name );
+    playman_pl_lv_col_name = gtk_tree_view_column_new_with_attributes(
+            _("Playlist") , playman_pl_lv_textrndr_name ,
+            "text" , PLLIST_COL_NAME ,
+            "weight", PLLIST_TEXT_WEIGHT ,
+            NULL );
+    gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(playman_pl_lv_col_name) , TRUE );
+    gtk_tree_view_append_column( GTK_TREE_VIEW(playman_pl_lv), playman_pl_lv_col_name );
+    playman_pl_lv_col_entriesnum = gtk_tree_view_column_new_with_attributes(
+            _("Entries") , playman_pl_lv_textrndr_entriesnum ,
+            "text" , PLLIST_COL_ENTRIESNUM ,
+            "weight", PLLIST_TEXT_WEIGHT ,
+            NULL );
+    gtk_tree_view_column_set_expand( GTK_TREE_VIEW_COLUMN(playman_pl_lv_col_entriesnum) , FALSE );
+    gtk_tree_view_append_column( GTK_TREE_VIEW(playman_pl_lv), playman_pl_lv_col_entriesnum );
+    playman_pl_lv_sw = gtk_scrolled_window_new( NULL , NULL );
+    gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW(playman_pl_lv_sw) ,
+                                    GTK_POLICY_NEVER , GTK_POLICY_ALWAYS );
+    gtk_container_add( GTK_CONTAINER(playman_pl_lv_sw) , playman_pl_lv );
+    gtk_container_add( GTK_CONTAINER(playman_pl_lv_frame) , playman_pl_lv_sw );
+    gtk_box_pack_start( GTK_BOX(playman_vbox) , playman_pl_lv_frame , TRUE , TRUE , 0 );
+
+    /* listview popup menu */
+    playman_pl_lv_pmenu = gtk_menu_new();
+    playman_pl_lv_pmenu_rename = gtk_menu_item_new_with_mnemonic( _( "_Rename" ) );
+    g_signal_connect( G_OBJECT(playman_pl_lv_pmenu_rename) , "activate" ,
+                      G_CALLBACK(playlist_manager_cb_lv_pmenu_rename) , playman_pl_lv );
+    gtk_menu_shell_append( GTK_MENU_SHELL(playman_pl_lv_pmenu) , playman_pl_lv_pmenu_rename );
+    gtk_widget_show_all( playman_pl_lv_pmenu );
+    g_object_set_data( G_OBJECT(playman_pl_lv) , "menu" , playman_pl_lv_pmenu );
+    g_signal_connect_swapped( G_OBJECT(playman_win) , "destroy" ,
+                              G_CALLBACK(gtk_widget_destroy) , playman_pl_lv_pmenu );
+
+    /* button bar */
+    playman_bbar_hbbox = gtk_hbutton_box_new();
+    gtk_button_box_set_layout( GTK_BUTTON_BOX(playman_bbar_hbbox) , GTK_BUTTONBOX_END );
+	gtk_button_box_set_spacing(GTK_BUTTON_BOX(playman_bbar_hbbox), 5);
+    playman_bbar_bt_close = gtk_button_new_from_stock( GTK_STOCK_CLOSE );
+    playman_bbar_bt_del = gtk_button_new_from_stock( GTK_STOCK_DELETE );
+    playman_bbar_bt_new = gtk_button_new_from_stock( GTK_STOCK_NEW );
+    gtk_container_add( GTK_CONTAINER(playman_bbar_hbbox) , playman_bbar_bt_close );
+    gtk_container_add( GTK_CONTAINER(playman_bbar_hbbox) , playman_bbar_bt_del );
+    gtk_container_add( GTK_CONTAINER(playman_bbar_hbbox) , playman_bbar_bt_new );
+    gtk_button_box_set_child_secondary( GTK_BUTTON_BOX(playman_bbar_hbbox) ,
+                                        playman_bbar_bt_close , TRUE );
+    gtk_box_pack_start( GTK_BOX(playman_vbox) , playman_bbar_hbbox , FALSE , FALSE , 0 );
+
+    g_signal_connect( G_OBJECT(playman_pl_lv) , "button-press-event" ,
+                      G_CALLBACK(playlist_manager_cb_lv_btpress) , NULL );
+    g_signal_connect( G_OBJECT(playman_pl_lv) , "row-activated" ,
+                      G_CALLBACK(playlist_manager_cb_lv_dclick) , NULL );
+    g_signal_connect_swapped( G_OBJECT(playman_bbar_bt_new) , "clicked" ,
+                              G_CALLBACK(playlist_manager_cb_new) , playman_pl_lv );
+    g_signal_connect_swapped( G_OBJECT(playman_bbar_bt_del) , "clicked" ,
+                              G_CALLBACK(playlist_manager_cb_del) , playman_pl_lv );
+    g_signal_connect_swapped( G_OBJECT(playman_bbar_bt_close) , "clicked" ,
+                              G_CALLBACK(gtk_widget_destroy) , playman_win );
+
+    /* have active playlist selected and scrolled to */
+    active_path = gtk_tree_model_get_path( GTK_TREE_MODEL(pl_store) ,
+            &active_iter );
+    gtk_tree_view_set_cursor( GTK_TREE_VIEW(playman_pl_lv) ,
+            active_path , NULL , FALSE );
+    gtk_tree_view_scroll_to_cell( GTK_TREE_VIEW(playman_pl_lv) ,
+            active_path , NULL , TRUE , 0.5 , 0.0 );
+    gtk_tree_path_free( active_path );
+
+    g_object_unref( pl_store );
+
+    gtk_widget_show_all( playman_win );
+}
+
+
+void
+playlist_manager_update ( void )
+{
+    /* this function is called whenever there is a change in playlist, such as
+       playlist created/deleted or entry added/deleted in a playlist; if the playlist
+       manager is active, it should be updated to keep consistency of information */
+
+    /* CAREFUL! this currently locks/unlocks all the playlists */
+
+    if ( playman_win != NULL )
+    {
+        GtkWidget *lv = (GtkWidget*)g_object_get_data( G_OBJECT(playman_win) , "lv" );
+        if ( GPOINTER_TO_INT(g_object_get_data(G_OBJECT(lv),"opt1")) == 0 )
+        {
+            GtkListStore *store = (GtkListStore*)gtk_tree_view_get_model( GTK_TREE_VIEW(lv) );
+            playlist_manager_populate( store );
+        }
+        return;
+    }
+    else
+        return; /* if the playlist manager is not active, simply return */
+}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/skins/ui_playlist_manager.h	Sat Jul 12 03:39:55 2008 +0300
@@ -0,0 +1,26 @@
+/*  Audacious - Cross-platform multimedia player
+ *  Copyright (C) 2005-2007  Audacious development team.
+ *
+ *  This program is free software; you can redistribute it and/or modify
+ *  it under the terms of the GNU General Public License as published by
+ *  the Free Software Foundation; under version 3 of the License.
+ *
+ *  This program is distributed in the hope that it will be useful,
+ *  but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *  GNU General Public License for more details.
+ *
+ *  You should have received a copy of the GNU General Public License
+ *  along with this program.  If not, see <http://www.gnu.org/licenses>.
+ *
+ *  The Audacious team does not consider modular code linking to
+ *  Audacious or using our public API to be a derived work.
+ */
+
+#ifndef AUDACIOUS_UI_PLAYLIST_MANAGER_H
+#define AUDACIOUS_UI_PLAYLIST_MANAGER_H
+
+void playlist_manager_update ( void );
+void playlist_manager_ui_show ( void );
+
+#endif /* AUDACIOUS_UI_PLAYLIST_MANAGER_H */
--- a/src/streambrowser/Makefile	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/Makefile	Sat Jul 12 03:39:55 2008 +0300
@@ -6,7 +6,9 @@
        gui/about_win.c \
        gui/streambrowser_win.c
 
-DATA = images/shoutcast.png
+DATA = images/shoutcast.png \
+       images/streambrowser-16x16.png \
+       images/streambrowser-64x64.png
 
 include ../../buildsys.mk
 include ../../extra.mk
--- a/src/streambrowser/gui/streambrowser_win.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/gui/streambrowser_win.c	Sat Jul 12 03:39:55 2008 +0300
@@ -1,7 +1,10 @@
 
+#include <stdlib.h>
 #include <string.h>
+#include <ctype.h>
 #include <glib.h>
 #include <gtk/gtk.h>
+#include <gdk/gdkkeysyms.h>
 
 #include "../streambrowser.h"
 #include "streambrowser_win.h"
@@ -9,14 +12,14 @@
 
 typedef struct {
 
-	streamdir_t*		streamdir;
+	streamdir_t*	streamdir;
 	GtkWidget*		table;
 	GtkWidget*		tree_view;
 
 } streamdir_gui_t;
 
 
-void				(* update_function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo);
+void					(* update_function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo);
 
 static GtkWidget*		gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text);
 static GtkWidget*		gtk_streamdir_tree_view_new();
@@ -25,10 +28,17 @@
 static gboolean			on_notebook_switch_page(GtkNotebook *notebook, GtkNotebookPage *page, guint page_num, gpointer data);
 static gboolean			on_tree_view_cursor_changed(GtkTreeView *tree_view, gpointer data);
 static gboolean			on_add_button_clicked(GtkButton *button, gpointer data);
+static gboolean			on_search_entry_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
+static gboolean			on_tree_view_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data);
+static gboolean			on_tree_view_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data);
 
-static streamdir_gui_t*		find_streamdir_gui_by_name(gchar *name);
-static streamdir_gui_t*		find_streamdir_gui_by_tree_view(GtkTreeView *tree_view);
-static streamdir_gui_t*		find_streamdir_gui_by_table(GtkTable *table);
+static streamdir_gui_t*	find_streamdir_gui_by_name(gchar *name);
+static streamdir_gui_t*	find_streamdir_gui_by_tree_view(GtkTreeView *tree_view);
+static streamdir_gui_t*	find_streamdir_gui_by_table(GtkTable *table);
+static streamdir_gui_t*	find_streamdir_gui_by_streamdir(streamdir_t *streamdir);
+static gboolean			tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data);
+
+static gboolean			mystrcasestr(const char *haystack, const char *needle);
 
 
 static GtkWidget*		notebook;
@@ -36,8 +46,8 @@
 static GtkWidget*		add_button;
 static GtkWidget*		streambrowser_window;
 static GList*			streamdir_gui_list;
-static GtkCellRenderer*		cell_renderer_pixbuf;
-static GtkCellRenderer*		cell_renderer_text;
+static GtkCellRenderer*	cell_renderer_pixbuf;
+static GtkCellRenderer*	cell_renderer_text;
 
 
 void streambrowser_win_init()
@@ -52,6 +62,7 @@
 
 	/* search entry */
 	search_entry = gtk_entry_new();
+	g_signal_connect(G_OBJECT(search_entry), "key-press-event", G_CALLBACK(on_search_entry_key_pressed), NULL);
 	gtk_widget_show(search_entry);
 	
 	GtkWidget *hbox1 = gtk_hbox_new(FALSE, 0);
@@ -75,12 +86,12 @@
 	gtk_window_set_title(GTK_WINDOW(streambrowser_window), _("Stream browser"));
 	gtk_window_set_position(GTK_WINDOW(streambrowser_window), GTK_WIN_POS_CENTER);
 	gtk_window_set_default_size(GTK_WINDOW(streambrowser_window), 700, 400);
+	gtk_window_set_icon_from_file(GTK_WINDOW(streambrowser_window), STREAMBROWSER_ICON, NULL);
 	g_signal_connect(G_OBJECT(streambrowser_window), "delete-event", G_CALLBACK(gtk_widget_hide_on_delete), streambrowser_window);
 	gtk_container_add(GTK_CONTAINER(streambrowser_window), vbox1);
 
 	/* others */
 	cell_renderer_pixbuf = gtk_cell_renderer_pixbuf_new();
-	g_object_set(G_OBJECT(cell_renderer_pixbuf), "stock-id", "gtk-directory", NULL);
 	cell_renderer_text = gtk_cell_renderer_text_new();
 }
 
@@ -142,7 +153,7 @@
 		category = category_get_by_index(streamdir, i);
 
 		gtk_tree_store_append(store, &iter, NULL);
-		gtk_tree_store_set(store, &iter, 0, NULL, 1, category->name, 2, "", -1);
+		gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", -1);
 	}
 }
 
@@ -178,7 +189,7 @@
 		streaminfo = streaminfo_get_by_index(category, i);
 
 		gtk_tree_store_append(store, &new_iter, &iter);
-		gtk_tree_store_set(store, &new_iter, 0, NULL, 1, streaminfo->name, 2, streaminfo->current_track, -1);
+		gtk_tree_store_set(store, &new_iter, 0, "gtk-directory", 1, streaminfo->name, 2, streaminfo->current_track, -1);
 	}
 }
 
@@ -187,6 +198,52 @@
 	update_function = function;
 }
 
+void streambrowser_win_set_category_state(streamdir_t *streamdir, category_t *category, gboolean fetching)
+{
+	streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir);
+	GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
+	GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view));
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	
+	/* find the corresponding category tree iter */
+	path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), -1);
+	if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
+		return;
+	
+	if (fetching) {
+		gchar temp[DEF_STRING_LEN];
+		sprintf(temp, "<span style='italic' weight='heavy'>%s</span>", category->name);
+		gtk_tree_store_set(store, &iter, 0, "gtk-refresh", 1, temp, 2, "", -1);
+	}
+	else {
+		gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, category->name, 2, "", -1);
+	}
+}
+
+void streambrowser_win_set_streaminfo_state(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean fetching)
+{
+	streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_streamdir(streamdir);
+	GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
+	GtkTreeStore *store = GTK_TREE_STORE(gtk_tree_view_get_model(tree_view));
+	GtkTreePath *path;
+	GtkTreeIter iter;
+	
+	/* find the corresponding category tree iter */
+	path = gtk_tree_path_new_from_indices(category_get_index(streamdir, category), streaminfo_get_index(category, streaminfo), -1);
+	if (!gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path))
+		return;
+	
+	if (fetching) {
+		gchar temp[DEF_STRING_LEN];
+		sprintf(temp, "<span style='italic' weight='heavy'>%s</span>", streaminfo->name);
+		gtk_tree_store_set(store, &iter, 0, "gtk-refresh", 1, temp, 2, "", -1);
+	}
+	else {
+		gtk_tree_store_set(store, &iter, 0, "gtk-directory", 1, streaminfo->name, 2, "", -1);
+	}
+}
+
 static GtkWidget* gtk_label_new_with_icon(gchar *icon_filename, gchar *label_text)
 {
 	GtkWidget *hbox = gtk_hbox_new(FALSE, 1);
@@ -203,20 +260,36 @@
 {
 	GtkWidget *tree_view = gtk_tree_view_new();
 
-	GtkTreeStore *store = gtk_tree_store_new(3, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING);
+	GtkTreeStore *store = gtk_tree_store_new(3, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);
 	gtk_tree_view_set_model(GTK_TREE_VIEW(tree_view), GTK_TREE_MODEL(store));
 
-	// todo: why doesn't the tree view allow to be resized?
 	gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree_view), TRUE);
-	gtk_tree_view_set_headers_clickable(GTK_TREE_VIEW(tree_view), TRUE);
-	gtk_tree_view_set_reorderable(GTK_TREE_VIEW(tree_view), TRUE);
-	gtk_tree_view_set_fixed_height_mode(GTK_TREE_VIEW(tree_view), FALSE);
+	gtk_tree_view_set_search_entry(GTK_TREE_VIEW(tree_view), GTK_ENTRY(search_entry));
+	gtk_tree_view_set_search_equal_func(GTK_TREE_VIEW(tree_view), tree_view_search_equal_func, NULL, NULL);
+	gtk_tree_view_set_search_column(GTK_TREE_VIEW(tree_view), 1);
+	g_signal_connect(G_OBJECT(tree_view), "key-press-event", G_CALLBACK(on_tree_view_key_pressed), NULL);
+	g_signal_connect(G_OBJECT(tree_view), "cursor-changed", G_CALLBACK(on_tree_view_cursor_changed), NULL);
+	g_signal_connect(G_OBJECT(tree_view), "button-press-event", G_CALLBACK(on_tree_view_button_pressed), NULL);
 
-	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(tree_view), -1, "", cell_renderer_pixbuf, "pixbuf", 0, NULL);
-	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(tree_view), -1, _("Stream name"), cell_renderer_text, "text", 1, NULL);
-	gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(tree_view), -1, _("Now playing"), cell_renderer_text, "text", 2, NULL);
+	GtkTreeViewColumn *column = gtk_tree_view_column_new();
+	gtk_tree_view_column_pack_start(column, cell_renderer_pixbuf, TRUE);
+	gtk_tree_view_column_add_attribute(column, cell_renderer_pixbuf, "stock-id", 0);
+	gtk_tree_view_column_set_resizable(column, TRUE);
+	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
+	
+	column = gtk_tree_view_column_new();
+	gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE);
+	gtk_tree_view_column_add_attribute(column, cell_renderer_text, "markup", 1);
+	gtk_tree_view_column_set_resizable(column, TRUE);
+	gtk_tree_view_column_set_title(column, _("Stream name"));
+	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
 
-	g_signal_connect(G_OBJECT(tree_view), "cursor-changed", G_CALLBACK(on_tree_view_cursor_changed), NULL);
+	column = gtk_tree_view_column_new();
+	gtk_tree_view_column_pack_start(column, cell_renderer_text, TRUE);
+	gtk_tree_view_column_add_attribute(column, cell_renderer_text, "text", 2);
+	gtk_tree_view_column_set_resizable(column, TRUE);
+	gtk_tree_view_column_set_title(column, _("Now playing"));
+	gtk_tree_view_append_column(GTK_TREE_VIEW(tree_view), column);
 
 	return tree_view;
 }
@@ -253,10 +326,11 @@
 static gboolean on_tree_view_cursor_changed(GtkTreeView *tree_view, gpointer data)
 {
 	GtkTreePath *path;
-	GtkTreeViewColumn *focus_column;
+	GtkTreeIter iter;
+	GtkTreeModel *model;
 
 	/* obtain the current category */
-	gtk_tree_view_get_cursor(tree_view, &path, &focus_column);
+	gtk_tree_view_get_cursor(tree_view, &path, NULL);
 	
 	if (path == NULL)
 		return TRUE;
@@ -267,6 +341,14 @@
 		return TRUE;
 	}
 	
+	model = gtk_tree_view_get_model(tree_view);
+	gtk_tree_model_get_iter(model, &iter, path);
+	
+	if (gtk_tree_model_iter_has_child(model, &iter)) {
+		gtk_tree_path_free(path);
+		return TRUE;
+	}
+	
 	int category_index = indices[0];
 	
 	gtk_tree_path_free(path);
@@ -278,10 +360,17 @@
 	/* issue an update on the current category */	
 	update_function(streamdir_gui->streamdir, category_get_by_index(streamdir_gui->streamdir, category_index), NULL);
 	
-	/* clear the search box */
-	gtk_entry_set_text(GTK_ENTRY(search_entry), "");
+	return TRUE;
+}
 
-	return TRUE;
+static gboolean on_tree_view_button_pressed(GtkWidget *widget, GdkEventButton *event, gpointer data)
+{
+	/* double click adds the currently selected stream to the playlist */
+	if (event->type == GDK_2BUTTON_PRESS) {
+		on_add_button_clicked(NULL, NULL);
+	}
+	
+	return FALSE;
 }
 
 static gboolean on_add_button_clicked(GtkButton *button, gpointer data)
@@ -294,15 +383,20 @@
 	if (streamdir_gui == NULL)
 		return TRUE;
 
-	GtkWidget *tree_view = streamdir_gui->tree_view;
+	GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
 	
-	gtk_tree_view_get_cursor(GTK_TREE_VIEW(tree_view), &path, &focus_column);
+	gtk_tree_view_get_cursor(tree_view, &path, &focus_column);
 	
 	if (path == NULL)
 		return TRUE;
 
 	gint *indices = gtk_tree_path_get_indices(path);
-	if (gtk_tree_path_get_depth(path) != 2) {
+	if (gtk_tree_path_get_depth(path) == 1) {
+		if (gtk_tree_view_row_expanded(tree_view, path))
+			gtk_tree_view_collapse_row(tree_view, path);
+		else
+			gtk_tree_view_expand_row(tree_view, path, FALSE);
+	
 		gtk_tree_path_free(path);
 		return TRUE;
 	}
@@ -316,11 +410,70 @@
 	category_t *category = category_get_by_index(streamdir_gui->streamdir, category_index);
 	streaminfo_t *streaminfo = streaminfo_get_by_index(category, streaminfo_index);
 	
+	gtk_entry_set_text(GTK_ENTRY(search_entry), "");
 	update_function(streamdir, category, streaminfo);
 
 	return TRUE;
 }
 
+static gboolean on_search_entry_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+	if (event->keyval == GDK_Return || event->keyval == GDK_KP_Enter) {
+		on_add_button_clicked(GTK_BUTTON(add_button), NULL);
+		return FALSE;
+	}
+
+	if (event->keyval == GDK_Escape) {
+		gtk_entry_set_text(GTK_ENTRY(search_entry), "");
+		return FALSE;
+	}
+	
+	/* todo : remove this
+	GtkWidget *table = gtk_notebook_get_nth_page(GTK_NOTEBOOK(notebook), gtk_notebook_get_current_page(GTK_NOTEBOOK(notebook)));
+	streamdir_gui_t *streamdir_gui = find_streamdir_gui_by_table(GTK_TABLE(table));
+	if (streamdir_gui == NULL)
+		return FALSE;
+
+	GtkTreeView *tree_view = GTK_TREE_VIEW(streamdir_gui->tree_view);
+	GtkTreeModel *model = gtk_tree_view_get_model(tree_view);
+	GtkTreeIter iter;
+	GtkTreePath *path;
+	const gchar *key = gtk_entry_get_text(GTK_ENTRY(search_entry));
+	
+	if (!gtk_tree_model_get_iter_first(model, &iter))
+		return FALSE;
+		
+	while (gtk_tree_model_iter_next(model, &iter)) {
+		GValue value = {0, };
+
+		gtk_tree_model_get_value(model, &iter, 1, &value);
+		const gchar *string = g_value_get_string(&value);
+	
+		if (string == NULL || string[0] == '\0' || key == NULL || key[0] == '\0')
+			return FALSE;
+
+		if (mystrcasestr(string, key)) {		gtk_entry_set_text(GTK_ENTRY(search_entry), "");
+
+			path = gtk_tree_model_get_path(model, &iter);	
+			gtk_tree_view_set_cursor(tree_view, path, NULL, FALSE);
+			gtk_tree_path_free(path);
+		}
+
+		g_value_unset(&value);		
+	}
+	*/
+
+	return FALSE;
+}
+
+static gboolean on_tree_view_key_pressed(GtkWidget *widget, GdkEventKey *event, gpointer data)
+{
+	gtk_widget_grab_focus(search_entry);
+	on_search_entry_key_pressed(widget, event, data);
+
+	return FALSE;
+}
+
 static streamdir_gui_t *find_streamdir_gui_by_name(gchar *name)
 {
 	GList *iterator;
@@ -366,3 +519,58 @@
 	return NULL;
 }
 
+static streamdir_gui_t* find_streamdir_gui_by_streamdir(streamdir_t *streamdir)
+{
+	GList *iterator;
+	streamdir_gui_t *streamdir_gui;
+
+	for (iterator = g_list_first(streamdir_gui_list); iterator != NULL; iterator = g_list_next(iterator)) {
+		streamdir_gui = iterator->data;
+
+		if ((void *) streamdir_gui->streamdir == (void *) streamdir)
+			return streamdir_gui;
+	}
+	
+	return NULL;
+}
+
+static gboolean tree_view_search_equal_func(GtkTreeModel *model, gint column, const gchar *key, GtkTreeIter *iter, gpointer data)
+{
+	GValue value = {0, };
+	gboolean ret;
+	
+	gtk_tree_model_get_value(model, iter, column, &value);
+	const gchar *string = g_value_get_string(&value);
+	
+	if (string == NULL || string[0] == '\0' || key == NULL || key[0] == '\0')
+		ret = TRUE;
+
+	ret = !mystrcasestr(string, key);
+	
+	g_value_unset(&value);
+
+	return ret;
+}
+
+static gboolean mystrcasestr(const char *haystack, const char *needle)
+{
+	int len_h = strlen(haystack) + 1;
+	int len_n = strlen(needle) + 1;
+	int i;
+	
+	char *upper_h = malloc(len_h);
+	char *upper_n = malloc(len_n);
+	
+	for (i = 0; i < len_h; i++)
+		upper_h[i] = toupper(haystack[i]);
+	for (i = 0; i < len_n; i++)
+		upper_n[i] = toupper(needle[i]);
+	
+	char *p = strstr(upper_h, upper_n);
+
+	free(upper_h);
+	free(upper_n);
+	
+	return (gboolean) p;
+}
+
--- a/src/streambrowser/gui/streambrowser_win.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/gui/streambrowser_win.h	Sat Jul 12 03:39:55 2008 +0300
@@ -13,6 +13,8 @@
 void			streambrowser_win_set_streamdir(streamdir_t *streamdir, gchar *icon_filename);
 void			streambrowser_win_set_category(streamdir_t *streamdir, category_t *category);
 void			streambrowser_win_set_update_function(void (* update_function) (streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo));
+void			streambrowser_win_set_category_state(streamdir_t *streamdir, category_t *category, gboolean fetching);
+void			streambrowser_win_set_streaminfo_state(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo, gboolean fetching);
 
 
 #endif	// STREAMBROWSER_WIN_H
Binary file src/streambrowser/images/streambrowser-16x16.png has changed
Binary file src/streambrowser/images/streambrowser-64x64.png has changed
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/src/streambrowser/images/streambrowser.svg	Sat Jul 12 03:39:55 2008 +0300
@@ -0,0 +1,251 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   width="128px"
+   height="128px"
+   id="RSSicon"
+   viewBox="0 0 256 256"
+   sodipodi:version="0.32"
+   inkscape:version="0.46"
+   sodipodi:docname="Feed-icon.svg"
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">
+  <metadata
+     id="metadata33">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     inkscape:window-height="967"
+     inkscape:window-width="1225"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     guidetolerance="10.0"
+     gridtolerance="10.0"
+     objecttolerance="10.0"
+     borderopacity="1.0"
+     bordercolor="#666666"
+     pagecolor="#ffffff"
+     id="base"
+     showgrid="false"
+     inkscape:zoom="1.9296875"
+     inkscape:cx="153.86031"
+     inkscape:cy="-44.300212"
+     inkscape:window-x="455"
+     inkscape:window-y="57"
+     inkscape:current-layer="RSSicon" />
+  <defs
+     id="defs3">
+    <linearGradient
+       id="linearGradient3744">
+      <stop
+         style="stop-color:#3c5aa0;stop-opacity:1;"
+         offset="0"
+         id="stop3746" />
+      <stop
+         id="stop3752"
+         offset="0.2962963"
+         style="stop-color:#5979c1;stop-opacity:1;" />
+      <stop
+         style="stop-color:#243660;stop-opacity:1;"
+         offset="1"
+         id="stop3748" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3210">
+      <stop
+         style="stop-color:#ff7326;stop-opacity:1;"
+         offset="0"
+         id="stop3212" />
+      <stop
+         id="stop3218"
+         offset="1"
+         style="stop-color:#ff7426;stop-opacity:1;" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 64 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="128 : 64 : 1"
+       inkscape:persp3d-origin="64 : 42.666667 : 1"
+       id="perspective35" />
+    <linearGradient
+       x1="0.085000001"
+       y1="0.085000001"
+       x2="0.91500002"
+       y2="0.91500002"
+       id="RSSg"
+       xlink:href="#linearGradient3210">
+      <stop
+         offset="0"
+         stop-color="#DE642B"
+         id="stop16"
+         style="stop-color:#768bc7;stop-opacity:1;" />
+      <stop
+         offset="1"
+         stop-color="#D95B29"
+         id="stop18"
+         style="stop-color:#3c5aa0;stop-opacity:1;" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3210"
+       id="linearGradient3216"
+       x1="44"
+       y1="125.5"
+       x2="219"
+       y2="125.5"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3210"
+       id="linearGradient3226"
+       x1="44"
+       y1="155"
+       x2="160"
+       y2="155"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3210"
+       id="linearGradient3234"
+       x1="44"
+       y1="189"
+       x2="92"
+       y2="189"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3210"
+       id="linearGradient3275"
+       gradientUnits="userSpaceOnUse"
+       x1="44"
+       y1="189"
+       x2="92"
+       y2="189" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3210"
+       id="linearGradient3277"
+       gradientUnits="userSpaceOnUse"
+       x1="44"
+       y1="155"
+       x2="160"
+       y2="155" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3210"
+       id="linearGradient3279"
+       gradientUnits="userSpaceOnUse"
+       x1="44"
+       y1="125.5"
+       x2="219"
+       y2="125.5" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3744"
+       id="linearGradient3750"
+       x1="23.191692"
+       y1="29.795177"
+       x2="234.27405"
+       y2="226.20482"
+       gradientUnits="userSpaceOnUse" />
+    <filter
+       inkscape:collect="always"
+       id="filter3758">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="4.1217132"
+         id="feGaussianBlur3760" />
+    </filter>
+  </defs>
+  <rect
+     width="256"
+     height="256"
+     rx="55"
+     ry="55"
+     x="0"
+     y="0"
+     id="rect20"
+     style="fill:#2f477d;fill-opacity:1"
+     fill="#CC5D15" />
+  <rect
+     width="246"
+     height="246"
+     rx="50"
+     ry="50"
+     x="5"
+     y="5"
+     id="rect22"
+     style="fill:#6180c6;fill-opacity:1"
+     fill="#F49C52" />
+  <rect
+     width="236"
+     height="236"
+     rx="47"
+     ry="47"
+     x="10"
+     y="10"
+     id="rect24"
+     style="fill-opacity:1.0;fill:url(#linearGradient3750)"
+     fill="url(#RSSg)" />
+  <g
+     id="g3289"
+     style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1;filter:url(#filter3758)"
+     transform="matrix(-0.5614008,-0.5989944,-0.5948616,0.565301,279.23409,118.24669)">
+    <circle
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
+       id="circle3291"
+       r="24"
+       cy="189"
+       cx="68"
+       sodipodi:cx="68"
+       sodipodi:cy="189"
+       sodipodi:rx="24"
+       sodipodi:ry="24" />
+    <path
+       style="fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
+       id="path3293"
+       d="M 160,213 L 126,213 C 126,167.71265 89.287349,131 44,131 L 44,97 C 108.06503,97 160,148.93497 160,213 z" />
+    <path
+       style="opacity:1;fill:#000000;fill-opacity:1;stroke:none;stroke-opacity:1"
+       id="path3295"
+       d="M 184,213 C 184,135.68014 121.31986,73 44,73 L 44,38 C 140.64983,38 219,116.35017 219,213 L 184,213 z" />
+  </g>
+  <g
+     id="g3236"
+     style="stroke:#000000;stroke-opacity:1"
+     transform="matrix(-0.5614008,-0.5989945,-0.5948617,0.565301,277.11073,108.90355)">
+    <circle
+       style="fill:url(#linearGradient3275);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="circle26"
+       r="24"
+       cy="189"
+       cx="68"
+       sodipodi:cx="68"
+       sodipodi:cy="189"
+       sodipodi:rx="24"
+       sodipodi:ry="24" />
+    <path
+       style="fill:url(#linearGradient3277);fill-opacity:1;stroke:#000000;stroke-opacity:1"
+       id="path28"
+       d="M 160,213 L 126,213 C 126,167.71265 89.287349,131 44,131 L 44,97 C 108.06503,97 160,148.93497 160,213 z" />
+    <path
+       style="opacity:1;fill:url(#linearGradient3279);fill-opacity:1.0;stroke:#000000;stroke-opacity:1"
+       id="path30"
+       d="M 184,213 C 184,135.68014 121.31986,73 44,73 L 44,38 C 140.64983,38 219,116.35017 219,213 L 184,213 z" />
+  </g>
+</svg>
--- a/src/streambrowser/shoutcast.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/shoutcast.h	Sat Jul 12 03:39:55 2008 +0300
@@ -5,16 +5,16 @@
 #include "streambrowser.h"
 #include "streamdir.h"
 
-#define SHOUTCAST_NAME			"Shoutcast"
-#define SHOUTCAST_ICON			DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "shoutcast.png"
+#define SHOUTCAST_NAME				"Shoutcast"
+#define SHOUTCAST_ICON				DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "shoutcast.png"
 #define SHOUTCAST_STREAMDIR_URL		"http://www.shoutcast.com/sbin/newxml.phtml"
 #define SHOUTCAST_CATEGORY_URL		"http://www.shoutcast.com/sbin/newxml.phtml?genre=%s"
 #define SHOUTCAST_STREAMINFO_URL	"http://www.shoutcast.com/sbin/shoutcast-playlist.pls?rn=%s&file=filename.pls"
 #define SHOUTCAST_BUFFER_SIZE		256
 
 
-gboolean			shoutcast_category_fetch(category_t *category);
-streamdir_t*			shoutcast_streamdir_fetch();
+gboolean							shoutcast_category_fetch(category_t *category);
+streamdir_t*						shoutcast_streamdir_fetch();
 
 
 #endif	// SHOUTCAST_H
--- a/src/streambrowser/streambrowser.c	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/streambrowser.c	Sat Jul 12 03:39:55 2008 +0300
@@ -12,51 +12,48 @@
 
 
 typedef struct {
-
-	streamdir_t*		streamdir;
-	category_t*		category;
-	streaminfo_t*		streaminfo;	
-	
+    streamdir_t *streamdir;
+    category_t *category;
+    streaminfo_t *streaminfo;
 } update_thread_data_t;
 
 
-static void			sb_init();
-static void 			sb_about();
-static void 			sb_configure();
-static void 			sb_cleanup();
+static void sb_init();
+static void sb_about();
+static void sb_configure();
+static void sb_cleanup();
 
-static void 			gui_init();
-static void			gui_done();
-static void			config_load();
-static void			config_save();
+static void gui_init();
+static void gui_done();
+static void config_load();
+static void config_save();
 
-static void			streamdir_update(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo);
-static gpointer			update_thread_core(update_thread_data_t *data);
-static void			streaminfo_add_to_playlist(streaminfo_t *streaminfo);
-static void 			on_plugin_services_menu_item_click();
+static void streamdir_update(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo);
+static gpointer update_thread_core(gpointer user_data);
+static void streaminfo_add_to_playlist(streaminfo_t *streaminfo);
+static void on_plugin_services_menu_item_click();
 
-static GtkWidget*		playlist_menu_item;
-static GtkWidget*		main_menu_item;
-static GQueue*			update_thread_data_queue;
-static gint			update_thread_count = 0;
-static GMutex*			update_thread_mutex;
+static GtkWidget *playlist_menu_item;
+static GtkWidget *main_menu_item;
+static GQueue *update_thread_data_queue = NULL;
+static GMutex *update_thread_mutex = NULL;
+static gint update_thread_count = 0;
 
-
-streambrowser_cfg_t		streambrowser_cfg;
+streambrowser_cfg_t streambrowser_cfg;
 
 static GeneralPlugin sb_plugin = 
 {
-	.description = "Stream Browser",
-	.init = sb_init,
-	.about = sb_about,
-	.configure = sb_configure,
-	.cleanup = sb_cleanup
+    .description = "Stream Browser",
+    .init = sb_init,
+    .about = sb_about,
+    .configure = sb_configure,
+    .cleanup = sb_cleanup
 };
 
 GeneralPlugin *sb_gplist[] = 
 {
-	&sb_plugin,
-	NULL
+    &sb_plugin,
+    NULL
 };
 
 SIMPLE_GENERAL_PLUGIN(streambrowser, sb_gplist);
@@ -64,292 +61,343 @@
 
 void debug(const char *fmt, ...)
 {
-	if (streambrowser_cfg.debug) {
-		va_list ap;
-		fprintf(stderr, "* streambrowser: ");
-		va_start(ap, fmt);
-		vfprintf(stderr, fmt, ap);
-		va_end(ap);
-	}
+    if (streambrowser_cfg.debug) {
+        va_list ap;
+        fprintf(stderr, "* streambrowser: ");
+        va_start(ap, fmt);
+        vfprintf(stderr, fmt, ap);
+        va_end(ap);
+    }
 }
 
 void failure(const char *fmt, ...)
 {
-	va_list ap;
-	fprintf(stderr, "! streambrowser: ");
-	va_start(ap, fmt);
-	vfprintf(stderr, fmt, ap);
-	va_end(ap);
+    va_list ap;
+    fprintf(stderr, "! streambrowser: ");
+    va_start(ap, fmt);
+    vfprintf(stderr, fmt, ap);
+    va_end(ap);
 }
 
 gboolean fetch_remote_to_local_file(gchar *remote_url, gchar *local_url)
 {
-	VFSFile *remote_file = aud_vfs_fopen(remote_url, "r");
-	if (remote_file == NULL) {
-		failure("failed to fetch file '%s'\n", remote_url);
-		return FALSE;
-	}
-		
-	VFSFile *local_file = aud_vfs_fopen(local_url, "w");
-	if (local_file == NULL) {
-		aud_vfs_fclose(remote_file);
-	
-		failure("failed to create local file '%s'\n", local_file);
-		return FALSE;
-	}
-	
-	unsigned char buff[DEF_BUFFER_SIZE];
-	int size;
-	while (!aud_vfs_feof(remote_file)) {
-		size = aud_vfs_fread(buff, 1, DEF_BUFFER_SIZE, remote_file);
+    VFSFile *remote_file = aud_vfs_fopen(remote_url, "r");
+    if (remote_file == NULL) {
+        failure("failed to fetch file '%s'\n", remote_url);
+        return FALSE;
+    }
+
+    VFSFile *local_file = aud_vfs_fopen(local_url, "w");
+    if (local_file == NULL) {
+        aud_vfs_fclose(remote_file);
+
+        failure("failed to create local file '%s'\n", local_file);
+        return FALSE;
+    }
+
+    unsigned char buff[DEF_BUFFER_SIZE];
+    int size;
+    while (!aud_vfs_feof(remote_file)) {
+        size = aud_vfs_fread(buff, 1, DEF_BUFFER_SIZE, remote_file);
 
-		// i don't know why aud_vfs_feof() doesn't ever return TRUE
-		// so this is a workaround to properly end the loop
-		if (size == 0)
-			break;
-		
-		size = aud_vfs_fwrite(buff, 1, size, local_file);
-		if (size == 0) {
-			aud_vfs_fclose(local_file);
-			aud_vfs_fclose(remote_file);
+        // i don't know why aud_vfs_feof() doesn't ever return TRUE
+        // so this is a workaround to properly end the loop
+        if (size == 0)
+            break;
+
+        size = aud_vfs_fwrite(buff, 1, size, local_file);
+        if (size == 0) {
+            aud_vfs_fclose(local_file);
+            aud_vfs_fclose(remote_file);
 
-			failure("failed to write to local file '%s'\n", local_file);
-			return FALSE;
-		}
-	}
+            failure("failed to write to local file '%s'\n", local_file);
+            return FALSE;
+        }
+    }
 
-	aud_vfs_fclose(local_file);
-	aud_vfs_fclose(remote_file);
-	
-	return TRUE;
+    aud_vfs_fclose(local_file);
+    aud_vfs_fclose(remote_file);
+
+    return TRUE;
 }
 
 
 static void sb_init()
 {
-	/* workaround to print sb_init() */
-	streambrowser_cfg.debug = TRUE;
-	debug("sb_init()\n");
-	streambrowser_cfg.debug = FALSE;
+    /* workaround to print sb_init() */
+    streambrowser_cfg.debug = TRUE;
+    debug("sb_init()\n");
+    streambrowser_cfg.debug = FALSE;
 
-	config_load();
-	gui_init();
+    config_load();
+    gui_init();
 }
 
 static void sb_about()
 {
-	debug("sb_about()\n");
+    debug("sb_about()\n");
 }
 
 static void sb_configure()
 {
-	debug("sb_configure()\n");
+    debug("sb_configure()\n");
 }
 
 static void sb_cleanup()
 {
-	debug("sb_cleanup()\n");
-	
-	gui_done();
-	config_save();
+    debug("sb_cleanup()\n");
+
+    gui_done();
+    config_save();
 }
 
 static void gui_init()
 {
-	/* the plugin services menu */
-	playlist_menu_item = gtk_image_menu_item_new_with_label("Streambrowser");
-	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(playlist_menu_item), gtk_image_new_from_stock(GTK_STOCK_CDROM, GTK_ICON_SIZE_MENU));
-	gtk_widget_show(playlist_menu_item);
-	g_signal_connect(G_OBJECT(playlist_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL);
-	audacious_menu_plugin_item_add(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item);
+    /* the plugin services menu */
+    playlist_menu_item = gtk_image_menu_item_new_with_label(_("Streambrowser"));
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(playlist_menu_item), gtk_image_new_from_file(STREAMBROWSER_ICON_SMALL));
+    gtk_widget_show(playlist_menu_item);
+    g_signal_connect(G_OBJECT(playlist_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL);
+    audacious_menu_plugin_item_add(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item);
 
-	main_menu_item = gtk_image_menu_item_new_with_label("Streambrowser");
-	gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(main_menu_item), gtk_image_new_from_stock(GTK_STOCK_CDROM, GTK_ICON_SIZE_MENU));
-	gtk_widget_show(main_menu_item);
-	g_signal_connect(G_OBJECT(main_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL);
-	audacious_menu_plugin_item_add(AUDACIOUS_MENU_MAIN, main_menu_item);
+    main_menu_item = gtk_image_menu_item_new_with_label(_("Streambrowser"));
+    gtk_image_menu_item_set_image(GTK_IMAGE_MENU_ITEM(main_menu_item), gtk_image_new_from_file(STREAMBROWSER_ICON_SMALL));
+    gtk_widget_show(main_menu_item);
+    g_signal_connect(G_OBJECT(main_menu_item), "activate", G_CALLBACK(on_plugin_services_menu_item_click), NULL);
+    audacious_menu_plugin_item_add(AUDACIOUS_MENU_MAIN, main_menu_item);
 
-	/* main streambrowser window */
-	streambrowser_win_init();
-	streambrowser_win_set_update_function(streamdir_update);
-	
-	/* others */
-	update_thread_mutex = g_mutex_new();
-	update_thread_data_queue = g_queue_new();
+    /* main streambrowser window */
+    streambrowser_win_init();
+    streambrowser_win_set_update_function(streamdir_update);
 
-	debug("gui initialized\n");
+    /* others */
+    update_thread_mutex = g_mutex_new();
+    update_thread_data_queue = g_queue_new();
+
+    debug("gui initialized\n");
 }
 
 static void gui_done()
 {
-	/* the plugin services menu */
-	audacious_menu_plugin_item_remove(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item);
-	audacious_menu_plugin_item_remove(AUDACIOUS_MENU_MAIN, main_menu_item);
+    /* the plugin services menu */
+    audacious_menu_plugin_item_remove(AUDACIOUS_MENU_PLAYLIST_RCLICK, playlist_menu_item);
+    audacious_menu_plugin_item_remove(AUDACIOUS_MENU_MAIN, main_menu_item);
+
+    /* main streambrowser window */
+    streambrowser_win_hide();
+    streambrowser_win_done();
 
-	/* main streambrowser window */
-	streambrowser_win_hide();
-	streambrowser_win_done();
-	
-	/* others */
-	g_mutex_free(update_thread_mutex);
-	g_queue_free(update_thread_data_queue);
+    /* others */
+    if (update_thread_mutex)
+        g_mutex_free(update_thread_mutex);
+    update_thread_mutex = NULL;
+    if (update_thread_data_queue)
+        g_queue_free(update_thread_data_queue);
+    update_thread_data_queue = NULL;
 
-	debug("gui destroied\n");
+    debug("gui destroyed\n");
 }
 
 static void config_load()
 {
-	streambrowser_cfg.debug = FALSE;
-	
-	mcs_handle_t *db;	
-	if ((db = aud_cfg_db_open()) == NULL) {
-		failure("failed to load configuration\n");
-		return;
-	}
-	
-	aud_cfg_db_get_bool(db, "streambrowser", "debug", &streambrowser_cfg.debug);
+    streambrowser_cfg.debug = FALSE;
 
-	aud_cfg_db_close(db);
+    mcs_handle_t *db;
+    if ((db = aud_cfg_db_open()) == NULL) {
+        failure("failed to load configuration\n");
+        return;
+    }
 
-	debug("configuration loaded\n");
-	debug("debug = %d\n", streambrowser_cfg.debug);
+    aud_cfg_db_get_bool(db, "streambrowser", "debug", &streambrowser_cfg.debug);
+
+    aud_cfg_db_close(db);
+
+    debug("configuration loaded\n");
+    debug("debug = %d\n", streambrowser_cfg.debug);
 }
 
 static void config_save()
 {
-	mcs_handle_t *db;	
-	if ((db = aud_cfg_db_open()) == NULL) {
-		failure("failed to save configuration\n");
-		return;
-	}
+    mcs_handle_t *db;
+    if ((db = aud_cfg_db_open()) == NULL) {
+        failure("failed to save configuration\n");
+        return;
+    }
 
-	aud_cfg_db_set_bool(db, "streambrowser", "debug", streambrowser_cfg.debug);
-	
-	aud_cfg_db_close(db);
+    aud_cfg_db_set_bool(db, "streambrowser", "debug", streambrowser_cfg.debug);
 
-	debug("configuration saved\n");
+    aud_cfg_db_close(db);
+
+    debug("configuration saved\n");
 }
 
 static void streamdir_update(streamdir_t *streamdir, category_t *category, streaminfo_t *streaminfo)
 {
-	debug("requested streamdir update (streamdir = '%s', category = '%s', streaminfo = '%s')\n", 
-		streamdir == NULL ? "" : streamdir->name, 
-		category == NULL ? "" : category->name,
-		streaminfo == NULL ? "" : streaminfo->name);
+    debug("requested streamdir update (streamdir = '%s', category = '%s', streaminfo = '%s')\n", 
+          streamdir == NULL ? "" : streamdir->name, 
+          category == NULL ? "" : category->name,
+          streaminfo == NULL ? "" : streaminfo->name);
+
+    if (update_thread_count >= MAX_UPDATE_THREADS) {
+        debug("another %d streamdir updates are pending, this request will be dropped\n", update_thread_count);
+    }
+    else {
+        g_mutex_lock(update_thread_mutex);
+            
+    	/* do we have a running thread? */
+        if (update_thread_count > 0) {
+            int i;
+            gboolean exists = FALSE;
+            update_thread_data_t *update_thread_data;
+
+            /* search for another identic update request */
+            for (i = 0; i < g_queue_get_length(update_thread_data_queue); i++) {
+                update_thread_data = g_queue_peek_nth(update_thread_data_queue, i);
+                if (update_thread_data->streamdir == streamdir &&
+                    update_thread_data->category == category &&
+                    update_thread_data->streaminfo == streaminfo) {
+                    exists = TRUE;
+                    break;
+                }
+            }
+            
+            /* if no other similar request exists, we enqueue it */
+            if (!exists) {
+                debug("another %d streamdir updates are pending, this request will be queued\n", update_thread_count);
 
-	if (update_thread_count >= MAX_UPDATE_THREADS) {
-		debug("another %d streamdir updates are pending, this request will be dropped\n", update_thread_count);
-	}
-	else
-		if (update_thread_count > 0) {
-			debug("another %d streamdir updates are pending, this request will be queued\n", update_thread_count);
-			
-			g_mutex_lock(update_thread_mutex);
-			
-			update_thread_data_t *update_thread_data = g_malloc(sizeof(update_thread_data_t));
-			
-			update_thread_data->streamdir = streamdir;
-			update_thread_data->category = category;
-			update_thread_data->streaminfo = streaminfo;
-			g_queue_push_tail(update_thread_data_queue, update_thread_data);
-			
-			update_thread_count++;
+                update_thread_data = g_malloc(sizeof(update_thread_data_t));
 
-			g_mutex_unlock(update_thread_mutex);
-		}
-		else {
-			update_thread_data_t *data = g_malloc(sizeof(update_thread_data_t));
-			
-			data->streamdir = streamdir;
-			data->category = category;
-			data->streaminfo = streaminfo;
+                update_thread_data->streamdir = streamdir;
+                update_thread_data->category = category;
+                update_thread_data->streaminfo = streaminfo;
+ 
+                g_queue_push_tail(update_thread_data_queue, update_thread_data);
+                update_thread_count++;
+            }
+            else {
+                debug("this request is already present in the queue, dropping\n");          
+            }
+        }
+        /* no thread is currently running, we start one */
+        else {
+        	debug("no other streamdir updates are pending, starting to process this request immediately\n");
+        
+            update_thread_data_t *data = g_malloc(sizeof(update_thread_data_t));
 
-			g_thread_create((GThreadFunc) update_thread_core, data, TRUE, NULL);
-		}
+            data->streamdir = streamdir;
+            data->category = category;
+            data->streaminfo = streaminfo;
+ 
+            g_queue_push_tail(update_thread_data_queue, data);
+            update_thread_count++;
+
+			g_thread_create((GThreadFunc) update_thread_core, NULL, FALSE, NULL);
+        }
+
+        g_mutex_unlock(update_thread_mutex);
+    }
 }
 
-static gpointer update_thread_core(update_thread_data_t *data)
+static gpointer update_thread_core(gpointer user_data)
 {
-	g_mutex_lock(update_thread_mutex);
-	update_thread_count++;
-	g_mutex_unlock(update_thread_mutex);
+	debug("entering update thread core\n");
 
-	/* update a streaminfo - that is - add this streaminfo to playlist */
-	if (data->streaminfo != NULL) {
-		 streaminfo_add_to_playlist(data->streaminfo);
-	}
-	/* update a category */
-	else if (data->category != NULL) {
-		/* shoutcast */
-		if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) {
-			shoutcast_category_fetch(data->category);
-			
-			gdk_threads_enter();
-			streambrowser_win_set_category(data->streamdir, data->category);
-			gdk_threads_leave();
-		}
-	}
-	/* update a streamdir */
-	else if (data->streamdir != NULL) {
-		/* shoutcast */
-		if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) {
-			streamdir_t *streamdir = shoutcast_streamdir_fetch();
-			if (streamdir != NULL) {
-				gdk_threads_enter();
-				streambrowser_win_set_streamdir(streamdir, SHOUTCAST_ICON);
-				gdk_threads_leave();
-			}
-		}
-	}
-	/* update all streamdirs */
-	else {
-		/* shoutcast */
-		streamdir_t *shoutcast_streamdir = shoutcast_streamdir_fetch();
-		if (shoutcast_streamdir != NULL) {
-			gdk_threads_enter();
-			streambrowser_win_set_streamdir(shoutcast_streamdir, SHOUTCAST_ICON);
-			gdk_threads_leave();
-		}
-	}
-	
-	g_free(data);
-
-	/* check to see if there are pending update requests */
-	
-	data = NULL;
+	/* try to get the last item in the queue */
 	g_mutex_lock(update_thread_mutex);
-	update_thread_count--;
-
+	update_thread_data_t *data = NULL;
 	if (update_thread_count > 0) {
 		data = g_queue_pop_head(update_thread_data_queue);
-		
-		update_thread_count--;
 	}
 	g_mutex_unlock(update_thread_mutex);
 
-	if (data != NULL)
-		update_thread_core(data);
+	/* repetitively process the queue elements, until queue is empty */
+	while (data != NULL && update_thread_count > 0) {
+	    /* update a streaminfo - that is - add this streaminfo to playlist */
+		if (data->streaminfo != NULL) {
+	    	gdk_threads_enter();
+			streambrowser_win_set_streaminfo_state(data->streamdir, data->category, data->streaminfo, TRUE);
+	    	gdk_threads_leave();
+
+		    streaminfo_add_to_playlist(data->streaminfo);
+
+	        gdk_threads_enter();
+			streambrowser_win_set_streaminfo_state(data->streamdir, data->category, data->streaminfo, FALSE);
+	        gdk_threads_leave();
+		}
+		/* update a category */
+		else if (data->category != NULL) {
+		    /* shoutcast */
+		    if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) {
+		    	gdk_threads_enter();
+				streambrowser_win_set_category_state(data->streamdir, data->category, TRUE);
+		    	gdk_threads_leave();
+		    	
+		        shoutcast_category_fetch(data->category);
 
-	return NULL;
+		        gdk_threads_enter();
+		        streambrowser_win_set_category(data->streamdir, data->category);
+				streambrowser_win_set_category_state(data->streamdir, data->category, FALSE);
+		        gdk_threads_leave();
+		    }
+		}
+		/* update a streamdir */
+		else if (data->streamdir != NULL) {
+		    /* shoutcast */
+		    if (strncmp(data->streamdir->name, SHOUTCAST_NAME, strlen(SHOUTCAST_NAME)) == 0) {
+		        streamdir_t *streamdir = shoutcast_streamdir_fetch();
+		        if (streamdir != NULL) {
+		            gdk_threads_enter();
+		            streambrowser_win_set_streamdir(streamdir, SHOUTCAST_ICON);
+		            gdk_threads_leave();
+		        }
+		    }
+		}
+		/* update all streamdirs */
+		else {
+		    /* shoutcast */
+		    streamdir_t *shoutcast_streamdir = shoutcast_streamdir_fetch();
+		    if (shoutcast_streamdir != NULL) {
+		        gdk_threads_enter();
+		        streambrowser_win_set_streamdir(shoutcast_streamdir, SHOUTCAST_ICON);
+		        gdk_threads_leave();
+		    }
+		}
+
+		g_free(data);
+
+		g_mutex_lock(update_thread_mutex);
+		update_thread_count--;	
+
+		/* try to get the last item in the queue */
+		if (update_thread_count > 0)
+			data = g_queue_pop_head(update_thread_data_queue);
+		else
+			data = NULL;
+		g_mutex_unlock(update_thread_mutex);
+	}
+
+	debug("leaving update thread core\n");
+
+    return NULL;
 }
 
 static void streaminfo_add_to_playlist(streaminfo_t *streaminfo)
 {
-	debug("fetching stream playlist for station '%s' from '%s'\n", streaminfo->name, streaminfo->playlist_url);
-	if (!fetch_remote_to_local_file(streaminfo->playlist_url, PLAYLIST_TEMP_FILE)) {
-		failure("shoutcast: stream playlist '%s' could not be downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE);
-		return;
-	}
-	debug("stream playlist '%s' successfuly downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE);
-	
-	aud_playlist_add(aud_playlist_get_active(), PLAYLIST_TEMP_FILE);
+    debug("fetching stream playlist for station '%s' from '%s'\n", streaminfo->name, streaminfo->playlist_url);
+    if (!fetch_remote_to_local_file(streaminfo->playlist_url, PLAYLIST_TEMP_FILE)) {
+        failure("shoutcast: stream playlist '%s' could not be downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE);
+        return;
+    }
+    debug("stream playlist '%s' successfuly downloaded to '%s'\n", streaminfo->playlist_url, PLAYLIST_TEMP_FILE);
+
+    aud_playlist_add_url(aud_playlist_get_active(), PLAYLIST_TEMP_FILE);
 }
 
 static void on_plugin_services_menu_item_click()
 {
-	debug("on_plugin_services_menu_item_click()\n");
-	
-	streambrowser_win_show();
-	streamdir_update(NULL, NULL, NULL);
+    debug("on_plugin_services_menu_item_click()\n");
+
+    streambrowser_win_show();
+    streamdir_update(NULL, NULL, NULL);
 }
 
--- a/src/streambrowser/streambrowser.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/streambrowser.h	Sat Jul 12 03:39:55 2008 +0300
@@ -7,10 +7,12 @@
 #include <config.h>
 #include <audacious/i18n.h>
 
-#define DEF_STRING_LEN		1024
-#define DEF_BUFFER_SIZE		512
-#define MAX_UPDATE_THREADS	4
-#define PLAYLIST_TEMP_FILE	"file:///tmp/playlist.pls"
+#define DEF_STRING_LEN				1024
+#define DEF_BUFFER_SIZE				512
+#define MAX_UPDATE_THREADS			4
+#define PLAYLIST_TEMP_FILE			"file:///tmp/playlist.pls"
+#define STREAMBROWSER_ICON_SMALL	DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "streambrowser-16x16.png"
+#define STREAMBROWSER_ICON			DATA_DIR G_DIR_SEPARATOR_S "images" G_DIR_SEPARATOR_S "streambrowser-64x64.png"
 
 
 typedef struct {
--- a/src/streambrowser/streamdir.h	Sat Jul 12 03:39:25 2008 +0300
+++ b/src/streambrowser/streamdir.h	Sat Jul 12 03:39:55 2008 +0300
@@ -2,7 +2,6 @@
 #ifndef STREAMDIR_H
 #define STREAMDIR_H
 
-
 #include <glib.h>
 
 #include "streambrowser.h"
@@ -31,7 +30,7 @@
 } streamdir_t;
 
 
-streamdir_t*			streamdir_new(gchar *name);
+streamdir_t*		streamdir_new(gchar *name);
 void				streamdir_delete(streamdir_t *streamdir);
 
 category_t*			category_new(gchar *name);
@@ -43,13 +42,13 @@
 gint				category_get_count(streamdir_t *streamdir);
 gint				category_get_index(streamdir_t *streamdir, category_t *category);
 
-streaminfo_t*			streaminfo_new(gchar *name, gchar *playlist_url, gchar *current_track);
+streaminfo_t*		streaminfo_new(gchar *name, gchar *playlist_url, gchar *current_track);
 void				streaminfo_delete(streaminfo_t *streaminfo);
 void				streaminfo_free(streaminfo_t *streaminfo);
 void				streaminfo_add(category_t *category, streaminfo_t *streaminfo);
 void				streaminfo_remove(category_t *category, streaminfo_t *streaminfo);
-streaminfo_t*			streaminfo_get_by_index(category_t *category, gint index);
-streaminfo_t*			streaminfo_get_by_name(category_t *category, gchar *name);
+streaminfo_t*		streaminfo_get_by_index(category_t *category, gint index);
+streaminfo_t*		streaminfo_get_by_name(category_t *category, gchar *name);
 gint				streaminfo_get_count(category_t *category);
 gint				streaminfo_get_index(category_t *category, streaminfo_t *streaminfo);