2 require 'plugins/loader'
4 class EngineData < KDE::Dialog
7 def initialize(caption, parent, engine = nil)
10 self.buttons = KDE::Dialog::Ok | KDE::Dialog::Cancel
12 page = Qt::Frame.new(self)
13 layout = Qt::VBoxLayout.new(page)
15 tmp = Qt::HBoxLayout.new
16 label = Qt::Label.new(KDE.i18n("&Name:"), page)
18 name = KDE::LineEdit.new(page)
21 layout.add_layout(tmp)
23 tmp = Qt::HBoxLayout.new
24 label = Qt::Label.new(KDE.i18n("&Type:"), page)
26 type = KDE::ComboBox.new(page)
28 loader = PluginLoader.new
29 protocols = loader.get_all_matching(:engine).map do |klass|
32 protocols.each do |prot|
37 layout.add_layout(tmp)
39 tmp = Qt::HBoxLayout.new
40 label = Qt::Label.new(KDE.i18n("&Game:"), page)
42 games = Game.new_combo(page)
46 layout.add_layout(tmp)
48 tmp = Qt::HBoxLayout.new
49 label = Qt::Label.new(KDE.i18n("&Path:"), page)
51 path = KDE::UrlRequester.new(page)
54 layout.add_layout(tmp)
56 tmp = Qt::HBoxLayout.new
57 label = Qt::Label.new(KDE.i18n("&Work directory:"), page)
59 workdir = KDE::UrlRequester.new(page)
61 tmp.add_widget(workdir)
62 layout.add_layout(tmp)
65 name.text = engine.name
66 path.path = engine.path
67 workdir.path = engine.workdir
68 current = (0...games.count).
69 map{|i| games.item_data(i).toString }.
70 index(engine.game.class.data(:id).to_s)
71 games.current_index = current if current
72 current = protocols.index(engine.protocol)
73 type.current_index = current if current
76 self.main_widget = page
81 unless path.text.empty? or name.text.empty?
82 protocol = type.current_text
83 game = games.item_data(games.current_index).toString.to_sym
86 :protocol => type.current_text,
89 :workdir => workdir.text }
95 class EnginePrefs < KDE::Dialog
96 def initialize(loader, parent)
99 self.caption = KDE.i18n("Configure Engines")
100 self.buttons = KDE::Dialog::Ok | KDE::Dialog::Cancel
101 widget = Qt::Frame.new(self)
103 layout = Qt::HBoxLayout.new(widget)
105 @list = Qt::ListView.new(widget)
106 @list.model = Qt::StringListModel.new(
107 @loader.map{|name, engine| name }, self)
111 @loader.each do |name, engine|
112 @engines[name] = engine
115 layout.add_widget(@list)
117 buttons = Qt::VBoxLayout.new
118 @add_engine = KDE::PushButton.new(
119 KDE::Icon.new('list-add'), KDE.i18n("&New..."), widget)
120 buttons.add_widget(@add_engine)
121 @edit_engine = KDE::PushButton.new(
122 KDE::Icon.new('configure'), KDE.i18n("&Edit..."), widget)
123 buttons.add_widget(@edit_engine)
124 @delete_engine = KDE::PushButton.new(
125 KDE::Icon.new('list-remove'), KDE.i18n("&Delete"), widget)
126 buttons.add_widget(@delete_engine)
129 layout.add_layout(buttons)
131 @add_engine.on(:pressed) { add_engine }
132 @edit_engine.on(:pressed) { edit_engine }
133 @delete_engine.on(:pressed) { delete_engine }
134 # @list.on('itemDoubleClicked(QListWidgetItem*)') { edit_engine }
136 self.main_widget = widget
139 @loader.update_entries(@engines)
146 @list.model.remove_rows(index.row, 1)
151 dialog = EngineData.new(KDE.i18n("New Engine"), self)
152 dialog.observe(:ok) do |data|
153 engine = @loader.engine.new(data)
154 @engines[engine.name] = engine
155 index = @list.model.row_count
156 @list.model.insert_rows(index, 1)
157 @list.model.set_data(@list.model.index(index, 0),
167 old_name = @list.model.data(index, Qt::DisplayRole).toString
168 old_engine = @engines[old_name]
169 dialog = EngineData.new(KDE.i18n("Edit Engine"), self, old_engine)
170 dialog.observe(:ok) do |data|
171 engine = @loader.engine.new(data)
172 if engine.name != old_name
173 @engines.delete(old_name)
175 @engines[engine.name] = engine
176 @list.model.set_data(index, engine.name, Qt::DisplayRole)
183 indexes = @list.selection_model.selection.indexes
184 unless indexes.empty?