irecorder 0.0.4-linux

Sign up to get free protection for your applications and to get access to all the features.
@@ -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