irecorder 0.0.4-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,119 @@
1
+ #
2
+ # Log Window
3
+ #
4
+ class LogWindow < Qt::Widget
5
+
6
+ def initialize()
7
+ super
8
+
9
+ # create widgets
10
+ @textWidget = KDE::TextEdit.new
11
+ @textWidget.setReadOnly(true)
12
+ clearBtn = KDE::PushButton.new( KDE::Icon.new('edit-clear'), i18n("C&lear") )
13
+ connect(clearBtn, SIGNAL(:clicked)) do
14
+ @textWidget.clear
15
+ end
16
+
17
+ # layout
18
+ layout = Qt::VBoxLayout.new
19
+ layout.addWidget(@textWidget)
20
+ layout.addWidgetAtLeft(clearBtn)
21
+ setLayout(layout)
22
+ end
23
+
24
+ public
25
+ def write(text)
26
+ puts text
27
+ @textWidget.append(text)
28
+ end
29
+
30
+ end
31
+
32
+ class MyLogger
33
+ MISC = 0
34
+ CODE = 1
35
+ DEBUG = 2
36
+ INFO = 3
37
+ WARN = 4
38
+ ERROR = 5
39
+ FATAL = 6
40
+ UNKNOWN = 7
41
+
42
+ attr_accessor :level
43
+
44
+ def initialize(logDevice)
45
+ @logdev = logDevice
46
+ @level = 0
47
+ end
48
+
49
+ public
50
+ def misc(msg = nil, &block)
51
+ add(MISC, msg, &block)
52
+ end
53
+
54
+ def code(msg = nil, &block)
55
+ add(CODE, msg, &block)
56
+ end
57
+
58
+ def debug(msg = nil, &block)
59
+ add(DEBUG, msg, &block)
60
+ end
61
+
62
+ def info(msg = nil, &block)
63
+ add(INFO, msg, &block)
64
+ end
65
+
66
+ def warn(msg = nil, &block)
67
+ add(WARN, msg, &block)
68
+ end
69
+
70
+ def error(msg = nil, &block)
71
+ add(ERROR, msg, &block)
72
+ end
73
+
74
+ def fatal(msg = nil, &block)
75
+ add(FATAL, msg, &block)
76
+ end
77
+
78
+
79
+ protected
80
+ def add(lvl, msg, &block)
81
+ return if lvl < @level
82
+ if msg.nil? then
83
+ if block_given? then
84
+ msg = yield
85
+ return if msg.nil?
86
+ else
87
+ return
88
+ end
89
+ end
90
+
91
+ msgs = formatMessages(lvl, msg)
92
+ msgs.each do |m|
93
+ @logdev.write(m.chomp)
94
+ end
95
+ end
96
+ alias log add
97
+
98
+
99
+ def formatMessages(lvl, msg)
100
+ a = msg2a(msg)
101
+ a.map do |m|
102
+ "%-5s:%s" % [%w(MISC CODE DEBUG INFO WARN ERROR FATAL ANY)[lvl], m]
103
+ end
104
+ end
105
+
106
+ def msg2a(msg)
107
+ case msg
108
+ when ::String
109
+ [ msg ]
110
+ when ::Array
111
+ msg
112
+ when ::Exception
113
+ [ msg.class.to_s + ': ' + msg.message ] + [ msg ] +
114
+ (msg.backtrace || []).map do |m| ' from ' + m end
115
+ else
116
+ [ msg.inspect ]
117
+ end
118
+ end
119
+ end
@@ -0,0 +1,279 @@
1
+ #
2
+ # My library
3
+ #
4
+ # Qt & other miscs
5
+
6
+ require 'singleton'
7
+ require 'korundum4'
8
+
9
+ #
10
+ class Qt::HBoxLayout
11
+ def addWidgets(*w)
12
+ w.each do |i|
13
+ if i then
14
+ e = i.kind_of?(String) ? Qt::Label.new(i) : i
15
+ addWidget(e)
16
+ else
17
+ addStretch
18
+ end
19
+ end
20
+ end
21
+ end
22
+
23
+ class Qt::VBoxLayout
24
+ def addWidgetWithNilStretch(*w)
25
+ addLayout(
26
+ Qt::HBoxLayout.new do |l|
27
+ l.addWidgets(*w)
28
+ end
29
+ )
30
+ end
31
+ alias :addWidgets :addWidgetWithNilStretch
32
+
33
+ def addWidgetAtCenter(*w)
34
+ w.unshift(nil)
35
+ addWidgetWithNilStretch(*w)
36
+ end
37
+
38
+ def addWidgetAtRight(*w)
39
+ w.unshift(nil)
40
+ addWidgetWithNilStretch(*w)
41
+ end
42
+
43
+ def addWidgetAtLeft(*w)
44
+ w.push(nil)
45
+ addWidgetWithNilStretch(*w)
46
+ end
47
+ end
48
+
49
+
50
+ #
51
+ class VBoxLayoutWidget < Qt::Widget
52
+ def initialize(parent=nil)
53
+ @layout = Qt::VBoxLayout.new
54
+ super(parent)
55
+ setLayout(@layout)
56
+ end
57
+
58
+ def addLayout(l)
59
+ @layout.addLayout(l)
60
+ end
61
+
62
+ def addWidget(w)
63
+ @layout.addWidget(w)
64
+ end
65
+
66
+ def addWidgetWithNilStretch(*w)
67
+ @layout.addWidgetWithNilStretch(*w)
68
+ end
69
+ alias :addWidgets :addWidgetWithNilStretch
70
+
71
+ def addWidgetAtRight(*w)
72
+ @layout.addWidgetAtRight(*w)
73
+ end
74
+
75
+ def addWidgetAtCenter(*w)
76
+ @layout.addWidgetAtCenter(*w)
77
+ end
78
+
79
+ def layout
80
+ @layout
81
+ end
82
+ end
83
+
84
+ class HBoxLayoutWidget < Qt::Widget
85
+ def initialize(parent=nil)
86
+ @layout = Qt::HBoxLayout.new
87
+ super(parent)
88
+ setLayout(@layout)
89
+ end
90
+
91
+ def addLayout(l)
92
+ @layout.addLayout(l)
93
+ end
94
+
95
+ def addWidget(w)
96
+ @layout.addWidget(w)
97
+ end
98
+
99
+ def addWidgets(*w)
100
+ @layout.addWidgets(*w)
101
+ end
102
+
103
+ def layout
104
+ @layout
105
+ end
106
+ end
107
+
108
+ #--------------------------------------------------------------------------
109
+ #
110
+ #
111
+ class SettingsBase < KDE::ConfigSkeleton
112
+ include Singleton
113
+
114
+ public
115
+ # @sym : instance symbol to be added.
116
+ def addBoolItem(sym, default=true)
117
+ name = sym.to_s
118
+ defineItem(sym, 'value', ItemBool, default)
119
+ end
120
+
121
+ def addStringItem(sym, default="")
122
+ defineItem(sym, 'toString', ItemString, default)
123
+ end
124
+
125
+ def addUrlItem(sym, default=KDE::Url.new)
126
+ if default.kind_of? String then
127
+ default = KDE::Url.new(default)
128
+ end
129
+ defineItem(sym, 'value', ItemUrl, default)
130
+ end
131
+
132
+ def addStringListItem(sym, default="")
133
+ defineItem(sym, 'value', ItemStringList, default)
134
+ end
135
+
136
+ def addChoiceItem(name, list, default=0)
137
+ choices = makeChoices(list)
138
+ defineItemProperty(name, 'value')
139
+ item = ItemEnum.new(currentGroup, name.to_s, default, choices, default)
140
+ addItem(item)
141
+ end
142
+
143
+ def [](name)
144
+ findItem(name)
145
+ end
146
+
147
+ protected
148
+ def makeChoices(list)
149
+ choices = []
150
+ list.each do |i|
151
+ c = ItemEnum::Choice.new
152
+ c.name = i
153
+ choices << c
154
+ end
155
+ choices
156
+ end
157
+
158
+ def defineItem(name, valueMethod, itemClass, default)
159
+ defineItemProperty(name, valueMethod)
160
+ item = itemClass.new(currentGroup, name.to_s, default, default)
161
+ addItem(item)
162
+ end
163
+
164
+ def defineItemProperty(name, valueMethod)
165
+ self.class.class_eval %Q{
166
+ def #{name}
167
+ findItem('#{name}').property.#{valueMethod}
168
+ end
169
+
170
+ def self.#{name}
171
+ s = self.instance
172
+ s.#{name}
173
+ end
174
+
175
+ def set#{name}(v)
176
+ item = findItem('#{name}')
177
+ unless item.immutable?
178
+ item.property = @#{name} = Qt::Variant.fromValue(v)
179
+ end
180
+ end
181
+
182
+ def self.set#{name}(v)
183
+ s = self.instance
184
+ s.set#{name}(v)
185
+ end
186
+
187
+ def #{name}=(v)
188
+ set#{name}(v)
189
+ end
190
+
191
+ def self.#{name}=(v)
192
+ self.set#{name}(v)
193
+ end
194
+ }
195
+ end
196
+ end
197
+
198
+
199
+
200
+ #--------------------------------------------------------------------------
201
+ #
202
+ #
203
+
204
+ module Enumerable
205
+ class Proxy
206
+ instance_methods.each { |m| undef_method(m) unless m.match(/^__/) }
207
+ def initialize(enum, method=:map)
208
+ @enum, @method = enum, method
209
+ end
210
+ def method_missing(method, *args, &block)
211
+ @enum.__send__(@method) {|o| o.__send__(method, *args, &block) }
212
+ end
213
+ end
214
+
215
+ def every
216
+ Proxy.new(self)
217
+ end
218
+ end
219
+
220
+ #
221
+ class Hash
222
+ alias old_blaket []
223
+ def [](key)
224
+ unless key.kind_of?(Regexp)
225
+ return old_blaket(key)
226
+ end
227
+
228
+ retk, retv = self.find { |k,v| k =~ key }
229
+ retv
230
+ end
231
+ end
232
+
233
+ class Qt::Action
234
+ def setVData(data)
235
+ setData(Qt::Variant.new(data))
236
+ end
237
+
238
+ def vData
239
+ self.data.toString
240
+ end
241
+ end
242
+
243
+ module Mime
244
+ def self.services(url)
245
+ mimeType = KDE::MimeType.findByUrl(KDE::Url.new(url))
246
+ mime = mimeType.name
247
+ services = KDE::MimeTypeTrader.self.query(mime)
248
+ end
249
+ end
250
+
251
+ #
252
+ #
253
+ #
254
+ class String
255
+ def double_quote
256
+ '"' + self + '"'
257
+ end
258
+ alias :dquote :double_quote
259
+
260
+ def single_quote
261
+ "'" + self + "'"
262
+ end
263
+ alias :squote :single_quote
264
+
265
+ def _chomp_null
266
+ gsub(/\0.*/, '')
267
+ end
268
+
269
+ def sql_quote
270
+ str = _chomp_null
271
+ return 'NULL' if str.empty?
272
+ "'#{str.sql_escape}'"
273
+ end
274
+
275
+ def sql_escape
276
+ str = _chomp_null
277
+ str.gsub(/\\/, '\&\&').gsub(/'/, "''") #'
278
+ end
279
+ end
@@ -0,0 +1,386 @@
1
+ #
2
+ # 2007 by ruby.twiddler@gmail.com
3
+ #
4
+ require 'kio'
5
+ require "mylibs.rb"
6
+
7
+
8
+ #--------------------------------------------------------------------------
9
+ #
10
+ # select from traders, system menu, arbitarary file.
11
+ #
12
+ class KDE::ListWidget
13
+ end
14
+
15
+ class SelectServiceDlg < KDE::Dialog
16
+ def initialize(parent, defaultName=nil)
17
+ super(parent)
18
+ @message = i18n('Select Application')
19
+ userInitialize
20
+ self.windowTitle = @message
21
+ @selectedName = @services[0].name
22
+ createWidget
23
+ setSelected(defaultName)
24
+ end
25
+
26
+ def userInitialize
27
+ @message = i18n('Select Application for .html file.')
28
+ @services = Mime.services('.html')
29
+ end
30
+
31
+ def name
32
+ @selectedName
33
+ end
34
+
35
+ def iconName
36
+ SelectServiceDlg.exeName2IconName(serviceFromName(name).exec)
37
+ end
38
+
39
+ def accept
40
+ @selectedName = @serviceList.selectedItems.first.text
41
+ super
42
+ end
43
+
44
+ def commandFromName(name)
45
+ i = serviceFromName(name)
46
+ i && i.exec
47
+ end
48
+
49
+ def serviceFromName(name)
50
+ name.gsub!(/&/, '')
51
+ return nil if @services.size == 0
52
+ service = @services.find(@services[0]) do |s| s.name == name end
53
+ end
54
+
55
+ def setSelected(name)
56
+ return unless name
57
+ name.gsub!(/&/, '')
58
+ return if @services.size == 0
59
+ unless name then
60
+ @serviceList.takeItem(0).setSelected(true)
61
+ else
62
+ items = @serviceList.findItems(name, Qt::MatchExactly)
63
+ if items.size > 0 then
64
+ items[0].setSelected(true)
65
+ end
66
+ end
67
+ end
68
+
69
+ def self.exeName2IconName(exeName)
70
+ iconName = exeName.gsub(%r{[^ ]*/}, '')[/([-_\w\d])+/] .
71
+ gsub(/(dragon)/, '\1player').gsub(/kfmclient/, 'konqueror')
72
+ end
73
+
74
+ protected
75
+ def createWidget
76
+ mainWidget = VBoxLayoutWidget.new
77
+ mainWidget.addWidget(Qt::Label.new(@message))
78
+ @serviceList = KDE::ListWidget.new
79
+ @services.each do |s|
80
+ iconName = SelectServiceDlg.exeName2IconName(s.exec)
81
+ @serviceList.addItem( Qt::ListWidgetItem.new(KDE::Icon.new(iconName), s.name) )
82
+ end
83
+ @selectFromMenu = KDE::PushButton.new(i18n('Select Other from Menu'))
84
+ mainWidget.addWidget(@serviceList)
85
+ # mainWidget.addWidget(@selectFromMenu)
86
+
87
+ setMainWidget(mainWidget)
88
+ end
89
+ end
90
+
91
+
92
+ class SelectWebPlayerDlg < SelectServiceDlg
93
+ def userInitialize
94
+ @message = i18n('Select Web Player for iPlayer page.')
95
+ @services = Mime.services('.html').select do |s|
96
+ s.name !~ /office/i and
97
+ s.serviceTypes.find do |st|
98
+ st =~ /application\//
99
+ end
100
+ end
101
+ end
102
+ end
103
+
104
+ class SelectDirectPlayerDlg < SelectServiceDlg
105
+ def userInitialize
106
+ @message = i18n('Select Direct Stream Player.')
107
+ @services = Mime.services('.wma')
108
+ end
109
+ end
110
+
111
+
112
+
113
+
114
+ #--------------------------------------------------------------------------
115
+ #
116
+ # IRecorder Settings
117
+ #
118
+ class IRecSettings < SettingsBase
119
+ def initialize
120
+ super()
121
+
122
+ setCurrentGroup("Preferences")
123
+
124
+ # meta programed version.
125
+ addUrlItem(:rawDownloadDir, Qt::Dir::tempPath + '/RadioRaw')
126
+ addUrlItem(:downloadDir, KDE::GlobalSettings.musicPath)
127
+ addBoolItem(:dirAddMediaName, true)
128
+ addBoolItem(:dirAddChannelName, false)
129
+ addBoolItem(:dirAddGenreName, true)
130
+ addStringItem(:fileAddHeadStr, 'BBC ')
131
+ addBoolItem(:fileAddMediaName, true)
132
+ addBoolItem(:fileAddChannelName, false)
133
+ addBoolItem(:fileAddGenreName, true)
134
+ addBoolItem(:leaveRawFile, false)
135
+
136
+ addBoolItem(:playerTypeSmall, false)
137
+ addBoolItem(:playerTypeBeta, true)
138
+
139
+ addBoolItem(:useInnerPlayer, true)
140
+ addBoolItem(:useWebPlayer, false)
141
+ addStringItem(:webPlayerName, 'Konqueror')
142
+ addBoolItem(:useDirectPlayer, false)
143
+ addStringItem(:directPlayerName, 'KMPlayer')
144
+ end
145
+
146
+ def webPlayerCommand
147
+ @webPlayerCnv.commandFromName(self.webPlayerName)
148
+ end
149
+
150
+ def self.webPlayerCommand
151
+ self.instance.webPlayerCommand
152
+ end
153
+
154
+ def directPlayerCommand
155
+ @directPlayerCnv.commandFromName(self.directPlayerName)
156
+ end
157
+
158
+ def self.directPlayerCommand
159
+ self.instance.directPlayerCommand
160
+ end
161
+
162
+ def regConverter(webPlayerCnv, directPlayerCnv)
163
+ @webPlayerCnv = webPlayerCnv
164
+ @directPlayerCnv = directPlayerCnv
165
+ end
166
+ end
167
+
168
+
169
+ #--------------------------------------------------------------------------
170
+ #
171
+ #
172
+ class SettingsDlg < KDE::ConfigDialog
173
+ def initialize(parent)
174
+ super(parent, "Settings", IRecSettings.instance)
175
+ addPage(FolderSettingsPage.new, i18n("Folder"), 'folder', i18n('Folder and File Name'))
176
+ addPage(PlayerSettingsPage.new, i18n("Player"), 'internet-web-browser', i18n('Player and web Browser'))
177
+ end
178
+ end
179
+
180
+
181
+ #--------------------------------------------------------------------------
182
+ #
183
+ #
184
+ class FolderSettingsPage < Qt::Widget
185
+ def initialize(parent=nil)
186
+ super(parent)
187
+ createWidget
188
+ end
189
+
190
+ protected
191
+
192
+ def createWidget
193
+ @rawFileDirLine = KDE::UrlRequester.new(KDE::Url.new(KDE::GlobalSettings.downloadPath))
194
+ @rawFileDirLine.mode = KDE::File::Directory | KDE::File::LocalOnly
195
+
196
+ @downloadDirLine = KDE::UrlRequester.new(KDE::Url.new(KDE::GlobalSettings.downloadPath))
197
+ @downloadDirLine.mode = KDE::File::Directory | KDE::File::LocalOnly
198
+
199
+ @dirSampleLabel = Qt::Label.new('Example) ')
200
+ @dirAddMediaName = Qt::CheckBox.new(i18n('Add media directory'))
201
+ @dirAddChannelName = Qt::CheckBox.new(i18n('Add channel directory'))
202
+ @dirAddGenreName = Qt::CheckBox.new(i18n('Add genre directory'))
203
+ [ @dirAddMediaName, @dirAddChannelName, @dirAddGenreName ].each do |w|
204
+ w.connect(SIGNAL('stateChanged(int)')) do |s| updateSampleDirName end
205
+ end
206
+
207
+ @fileSampleLabel = Qt::Label.new('Example) ')
208
+ @fileAddHeadStr = KDE::LineEdit.new do |w|
209
+ w.connect(SIGNAL('textChanged(const QString&)')) do |t| updateSampleFileName end
210
+ end
211
+ @fileAddMediaName = Qt::CheckBox.new(i18n('Add media name'))
212
+ @fileAddChannelName = Qt::CheckBox.new(i18n('Add channel name'))
213
+ @fileAddGenreName = Qt::CheckBox.new(i18n('Add genre name'))
214
+
215
+ [ @fileAddMediaName, @fileAddChannelName, @fileAddGenreName ].each do |w|
216
+ w.connect(SIGNAL('stateChanged(int)')) do |s| updateSampleFileName end
217
+ end
218
+ @leaveRawFile = Qt::CheckBox.new(i18n('Leave raw file.(don\'t delete it)'))
219
+
220
+ # set objectNames
221
+ # 'kcfg_' + class Settings's instance name.
222
+ @rawFileDirLine.objectName = 'kcfg_rawDownloadDir'
223
+ @downloadDirLine.objectName = 'kcfg_downloadDir'
224
+ @dirAddMediaName.objectName = 'kcfg_dirAddMediaName'
225
+ @dirAddChannelName.objectName = 'kcfg_dirAddChannelName'
226
+ @dirAddGenreName.objectName = 'kcfg_dirAddGenreName'
227
+ @fileAddHeadStr.objectName = 'kcfg_fileAddHeadStr'
228
+ @fileAddMediaName.objectName = 'kcfg_fileAddMediaName'
229
+ @fileAddChannelName.objectName = 'kcfg_fileAddChannelName'
230
+ @fileAddGenreName.objectName = 'kcfg_fileAddGenreName'
231
+ @leaveRawFile.objectName = 'kcfg_leaveRawFile'
232
+
233
+
234
+ # layout
235
+ lo = Qt::VBoxLayout.new do |l|
236
+ l.addWidget(Qt::Label.new(i18n('Download Directory')))
237
+ l.addWidgets(' ', @downloadDirLine)
238
+ l.addWidget(Qt::Label.new(i18n('Temporary Raw File Download Directory')))
239
+ l.addWidgets(' ', @rawFileDirLine)
240
+ l.addWidget(Qt::GroupBox.new(i18n('Generating directory')) do |g|
241
+ vbx = Qt::VBoxLayout.new do |vb|
242
+ vb.addWidget(@dirSampleLabel)
243
+ vb.addWidget(@dirAddMediaName)
244
+ # vb.addWidget(@dirAddChannelName)
245
+ vb.addWidget(@dirAddGenreName)
246
+ end
247
+ g.setLayout(vbx)
248
+ end
249
+ )
250
+ l.addWidget(Qt::GroupBox.new(i18n('Generating file name')) do |g|
251
+ vbx = Qt::VBoxLayout.new do |vb|
252
+ vb.addWidget(@fileSampleLabel)
253
+ vb.addWidgets(i18n('Head Text'), @fileAddHeadStr)
254
+ vb.addWidget(@fileAddMediaName)
255
+ # vb.addWidget(@fileAddChannelName)
256
+ vb.addWidget(@fileAddGenreName)
257
+ end
258
+ g.setLayout(vbx)
259
+ end
260
+ )
261
+ l.addWidget(@leaveRawFile)
262
+ l.addStretch
263
+ end
264
+
265
+ setLayout(lo)
266
+ end
267
+
268
+ def updateSampleFileName
269
+ @fileSampleLabel.text = 'Example) ' + getSampleFileName
270
+ end
271
+
272
+ def checkState(checkBox)
273
+ checkBox.checkState== Qt::Checked
274
+ end
275
+
276
+ def getSampleFileName
277
+ head = @fileAddHeadStr.text
278
+ head += 'Radio ' if checkState(@fileAddMediaName)
279
+ head += 'Radio 7 ' if checkState(@fileAddChannelName)
280
+ head += 'Drama ' if checkState(@fileAddGenreName)
281
+ head += "- " unless head.empty?
282
+ baseName = head + 'Space Hacks Lost in Space Ship.mp3'
283
+ baseName.gsub(%r{[\/]}, '-')
284
+ end
285
+
286
+
287
+ def updateSampleDirName
288
+ @dirSampleLabel.text = 'Example) ... /' + getSampleDirName
289
+ end
290
+
291
+ def getSampleDirName
292
+ dir = []
293
+ dir << 'Radio' if checkState(@dirAddMediaName)
294
+ dir << 'Radio 7' if checkState(@dirAddChannelName)
295
+ dir << 'Drama' if checkState(@dirAddGenreName)
296
+ File.join(dir.compact)
297
+ end
298
+
299
+ end
300
+
301
+ #--------------------------------------------------------------------------
302
+ #
303
+ #
304
+ class PlayerSettingsPage < Qt::Widget
305
+ def initialize(parent=nil)
306
+ super(parent)
307
+ createWidget
308
+ end
309
+
310
+ protected
311
+
312
+ def createWidget
313
+ @SelectWebPlayerDlg = SelectWebPlayerDlg.new(self, IRecSettings.webPlayerName)
314
+ @SelectDirectPlayerDlg = SelectDirectPlayerDlg.new(self, IRecSettings.directPlayerName)
315
+ IRecSettings.instance.regConverter(@SelectWebPlayerDlg, @SelectDirectPlayerDlg)
316
+ puts "web player:" + IRecSettings.webPlayerCommand.to_s
317
+ puts "direct player:" + IRecSettings.directPlayerCommand.to_s
318
+
319
+
320
+ @playerTypeSmall = Qt::RadioButton.new(i18n('small iplayer'))
321
+ @playerTypeBeta = Qt::RadioButton.new(i18n('beta iplayer'))
322
+
323
+ @innerPlayer = Qt::RadioButton.new(i18n('inner Player'))
324
+ @webPlayer = Qt::RadioButton.new(i18n('Web Player'))
325
+ @directPlayer = Qt::RadioButton.new(i18n('Direnct Stream Player'))
326
+
327
+ @webPlayerName = KDE::PushButton.new('Konqueror')
328
+ @webPlayerName.connect(SIGNAL(:pressed)) do
329
+ @SelectWebPlayerDlg.setSelected(@webPlayerName.text)
330
+ if @SelectWebPlayerDlg.exec == Qt::Dialog::Accepted then
331
+ @webPlayerName.text = @SelectWebPlayerDlg.name
332
+ # @webPlayerName.setIcon(KDE::Icon.new(@SelectWebPlayerDlg.iconName))
333
+ @webPlayer.checked = true
334
+ end
335
+ end
336
+ @webPlayerName.setProperty("kcfg_property", Qt::Variant.new("text"))
337
+
338
+ @directPlayerName = KDE::PushButton.new('KMPlayer')
339
+ @directPlayerName.connect(SIGNAL(:pressed)) do
340
+ @SelectDirectPlayerDlg.setSelected(@directPlayerName.text)
341
+ if @SelectDirectPlayerDlg.exec == Qt::Dialog::Accepted then
342
+ @directPlayerName.text = @SelectDirectPlayerDlg.name
343
+ # @directPlayerName.setIcon(KDE::Icon.new(@SelectDirectPlayerDlg.iconName))
344
+ @directPlayer.checked = true
345
+ end
346
+ end
347
+ @directPlayerName.setProperty("kcfg_property", Qt::Variant.new("text"))
348
+
349
+ # set objectNames
350
+ # 'kcfg_' + class Settings's instance name.
351
+ @playerTypeSmall.objectName = 'kcfg_playerTypeSmall'
352
+ @playerTypeBeta.objectName = 'kcfg_playerTypeBeta'
353
+ @innerPlayer.objectName = 'kcfg_useInnerPlayer'
354
+ @webPlayer.objectName = 'kcfg_useWebPlayer'
355
+ @directPlayer.objectName = 'kcfg_useDirectPlayer'
356
+ @webPlayerName.objectName = 'kcfg_webPlayerName'
357
+ @directPlayerName.objectName = 'kcfg_directPlayerName'
358
+
359
+
360
+ # layout
361
+ lo = Qt::VBoxLayout.new do |l|
362
+ l.addWidget(Qt::GroupBox.new(i18n('iPlayer Type')) do |g|
363
+ vbx = Qt::VBoxLayout.new do |vb|
364
+ vb.addWidget(@playerTypeSmall)
365
+ vb.addWidget(@playerTypeBeta)
366
+ end
367
+ g.setLayout(vbx)
368
+ end
369
+ )
370
+ l.addWidget(Qt::GroupBox.new(i18n('Player')) do |g|
371
+ vbx = Qt::VBoxLayout.new do |vb|
372
+ vb.addWidget(@innerPlayer)
373
+ vb.addWidget(@webPlayer)
374
+ vb.addWidgets(' ', @webPlayerName, nil)
375
+ vb.addWidget(@directPlayer)
376
+ vb.addWidgets(' ', @directPlayerName, nil)
377
+ end
378
+ g.setLayout(vbx)
379
+ end
380
+ )
381
+ l.addStretch
382
+ end
383
+
384
+ setLayout(lo)
385
+ end
386
+ end