2
* Copyright (C) 2002-4 by the Widelands Development Team
4
* This program is free software; you can redistribute it and/or
5
* modify it under the terms of the GNU General Public License
6
* as published by the Free Software Foundation; either version 2
7
* of the License, or (at your option) any later version.
9
* This program is distributed in the hope that it will be useful,
10
* but WITHOUT ANY WARRANTY; without even the implied warranty of
11
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
* GNU General Public License for more details.
14
* You should have received a copy of the GNU General Public License
15
* along with this program; if not, write to the Free Software
16
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20
#include "editor_event_menu_choose_trigger.h"
21
#include "editorinteractive.h"
22
#include "ui_unique_window.h"
23
#include "ui_textarea.h"
24
#include "ui_button.h"
25
#include "ui_listselect.h"
29
#include "editor_event_menu_new_event.h"
32
#include "event_factory.h"
36
Editor_Event_Menu_Choose_Trigger::Editor_Event_Menu_Choose_Trigger
38
Create all the buttons etc...
41
Editor_Event_Menu_Choose_Trigger::Editor_Event_Menu_Choose_Trigger(Editor_Interactive *parent, Event* event)
42
: UIWindow(parent, 0, 0, 380, 270, "Choose Triggers")
48
UITextarea* tt=new UITextarea(this, 0, 0, "Choose Triggers for Event", Align_Left);
49
tt->set_pos((get_inner_w()-tt->get_w())/2, 5);
58
new UITextarea(this, spacing, offsy, "Registered Triggers: ", Align_Left);
59
m_selected=new UIListselect(this, spacing, offsy+20, (get_inner_w()/2)-2*spacing-20, get_inner_h()-offsy-85);
60
m_selected->selected.set(this, &Editor_Event_Menu_Choose_Trigger::selected_list_selected);
61
m_selected->double_clicked.set(this, &Editor_Event_Menu_Choose_Trigger::selected_list_double_clicked);
64
new UITextarea(this, (get_inner_w()/2)+spacing, offsy, "Available Triggers", Align_Left);
65
m_available=new UIListselect(this, (get_inner_w()/2)+spacing+20, offsy+20, (get_inner_w()/2)-2*spacing-20, get_inner_h()-offsy-85);
66
m_available->selected.set(this, &Editor_Event_Menu_Choose_Trigger::available_list_selected);
67
m_available->double_clicked.set(this, &Editor_Event_Menu_Choose_Trigger::available_list_double_clicked);
69
// Toggle when to run button
70
new UITextarea(this, spacing, get_inner_h()-60+spacing, 200, 20, "Event runs when trigger is: ", Align_Center);
72
m_btn_toggle_event=new UIButton(this, spacing+200, get_inner_h()-60+spacing, 60, 20, 1, 5);
73
m_btn_toggle_event->set_title("---");
74
m_btn_toggle_event->clickedid.set(this, &Editor_Event_Menu_Choose_Trigger::clicked);
77
posy=get_inner_h()-30;
78
posx=(get_inner_w()/2)-120-spacing;
79
UIButton* b=new UIButton(this, posx, posy, 80, 20, 0, 1);
81
b->clickedid.set(this, &Editor_Event_Menu_Choose_Trigger::clicked);
84
posx=(get_inner_w()/2)+40+spacing;
85
b=new UIButton(this, posx, posy, 80, 20, 1, 0);
86
b->set_title("Cancel");
87
b->clickedid.set(this, &Editor_Event_Menu_Choose_Trigger::clicked);
91
posx=(get_inner_w()/2)-40;
92
b=new UIButton(this, posx, posy, 80, 20, 1, 4);
93
b->set_title("Options");
94
b->clickedid.set(this, &Editor_Event_Menu_Choose_Trigger::clicked);
96
// Left to right button
97
posx=get_inner_w()/2-20;
99
m_btn_ltor=new UIButton(this, posx, posy, 40, 20, 1, 2);
100
m_btn_ltor->set_title("->");
101
m_btn_ltor->clickedid.set(this, &Editor_Event_Menu_Choose_Trigger::clicked);
103
// Right to left button
104
posx=get_inner_w()/2-20;
105
posy=offsy+70+spacing;
106
m_btn_rtol=new UIButton(this, posx, posy, 40, 20, 1, 3);
107
m_btn_rtol->set_title("<-");
108
m_btn_rtol->clickedid.set(this, &Editor_Event_Menu_Choose_Trigger::clicked);
112
// Fill the list boxes, construct our data
114
Map* map=m_parent->get_map();
115
for(i=0; i<map->get_number_of_triggers(); i++) {
116
Trigger_Data* data=new Trigger_Data();
117
data->trig=map->get_trigger(i);
118
data->run_enabled=true;
119
if(m_event->trigger_exists(data->trig)) {
120
data->run_enabled=m_event->reacts_when_trigger_is_set(data->trig);
121
m_selected->add_entry(data->trig->get_name(), data);
123
m_available->add_entry(data->trig->get_name(), data);
132
Editor_Event_Menu_Choose_Trigger::~Editor_Event_Menu_Choose_Trigger
134
Unregister from the registry pointer
137
Editor_Event_Menu_Choose_Trigger::~Editor_Event_Menu_Choose_Trigger()
139
m_available->selected.unset();
140
m_selected->selected.unset();
142
for(i=0; i<m_selected->get_nr_entries(); i++) {
143
m_selected->select(i);
144
delete static_cast<Trigger_Data*>(m_selected->get_selection());
146
for(i=0; i<m_available->get_nr_entries(); i++) {
147
m_available->select(i);
148
delete static_cast<Trigger_Data*>(m_available->get_selection());
153
* update all user interface stuff
155
void Editor_Event_Menu_Choose_Trigger::update(void) {
160
if(m_available->get_selection()==0)
161
m_btn_rtol->set_enabled(false);
162
if(m_selected->get_selection()==0) {
163
m_btn_ltor->set_enabled(false);
164
m_btn_toggle_event->set_enabled(false);
165
m_btn_toggle_event->set_title("---");
167
Trigger_Data* t=static_cast<Trigger_Data*>(m_selected->get_selection());
169
m_btn_toggle_event->set_title("set");
171
m_btn_toggle_event->set_title("unset");
176
* handle mouseclick, so that we can be run as
179
bool Editor_Event_Menu_Choose_Trigger::handle_mouseclick(uint btn, bool down, int mx, int my) {
180
if(btn == MOUSE_RIGHT && down) {
184
return false; // we're not dragable
188
* a button has been clicked
190
void Editor_Event_Menu_Choose_Trigger::clicked(int id) {
202
for(i=0; i<m_selected->get_nr_entries(); i++) {
203
m_selected->select(i);
204
Trigger_Data* t=static_cast<Trigger_Data*>(m_selected->get_selection());
205
if(!m_event->trigger_exists(t->trig))
206
m_event->register_trigger(t->trig, m_parent->get_map(), t->run_enabled);
207
m_event->set_reacts_when_trigger_is_set(t->trig, t->run_enabled);
209
for(i=0; i<m_available->get_nr_entries(); i++) {
210
m_available->select(i);
211
Trigger_Data* t=static_cast<Trigger_Data*>(m_available->get_selection());
212
if(m_event->trigger_exists(t->trig))
213
m_event->unregister_trigger(t->trig, m_parent->get_map());
222
// Left to right button
223
Trigger_Data* t=static_cast<Trigger_Data*>(m_selected->get_selection());
224
m_selected->remove_entry(m_selected->get_selection_index());
225
m_available->add_entry(t->trig->get_name(), t);
232
// Right to left button
233
Trigger_Data* t=static_cast<Trigger_Data*>(m_available->get_selection());
234
m_available->remove_entry(m_available->get_selection_index());
235
m_selected->add_entry(t->trig->get_name(), t);
243
Event_Factory::make_event_with_option_dialog(m_event->get_id(), m_parent, m_event);
250
Trigger_Data* t=static_cast<Trigger_Data*>(m_selected->get_selection());
251
t->run_enabled=!t->run_enabled;
258
* listbox was selected
260
void Editor_Event_Menu_Choose_Trigger::available_list_selected(int i) {
261
m_btn_rtol->set_enabled(true);
264
void Editor_Event_Menu_Choose_Trigger::selected_list_selected(int i) {
265
m_btn_toggle_event->set_enabled(true);
266
m_btn_ltor->set_enabled(true);
271
* listbox was double clicked
273
void Editor_Event_Menu_Choose_Trigger::available_list_double_clicked(int i) {
274
// click right to left button
277
void Editor_Event_Menu_Choose_Trigger::selected_list_double_clicked(int i) {
278
// click left to right button