2007-10-04 23:38:05 +00:00
|
|
|
#include "SidebarView.h"
|
2007-12-14 02:47:03 +00:00
|
|
|
#include "PlayerStart.h"
|
2007-12-24 00:04:02 +00:00
|
|
|
#include "ToolSelector.h"
|
2007-10-04 23:38:05 +00:00
|
|
|
|
|
|
|
|
2007-12-14 02:47:03 +00:00
|
|
|
void SidebarView::spinButtonChanged(GtkWidget *spinbutton, SidebarView *view) {
|
2007-12-24 00:04:02 +00:00
|
|
|
if(!view->editManager->getSelectedObject())
|
2007-10-30 20:07:00 +00:00
|
|
|
return;
|
|
|
|
|
2007-12-24 00:04:02 +00:00
|
|
|
if(view->editManager->getSelectedObject()->isOfType("Room")) {
|
2007-12-14 02:47:03 +00:00
|
|
|
if(spinbutton == view->spinButtonHeight)
|
2007-12-24 00:04:02 +00:00
|
|
|
((Room*)view->editManager->getSelectedObject())->setHeight(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton)));
|
2007-12-14 02:47:03 +00:00
|
|
|
}
|
2007-12-24 00:04:02 +00:00
|
|
|
else if(view->editManager->getSelectedObject()->isOfType("PlayerStart")) {
|
2007-12-14 02:47:03 +00:00
|
|
|
if(spinbutton == view->spinButtonX)
|
2007-12-24 00:04:02 +00:00
|
|
|
((PlayerStart*)view->editManager->getSelectedObject())->setX(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton)));
|
2007-12-14 02:47:03 +00:00
|
|
|
else if(spinbutton == view->spinButtonY)
|
2007-12-24 00:04:02 +00:00
|
|
|
((PlayerStart*)view->editManager->getSelectedObject())->setY(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton)));
|
2007-12-14 02:47:03 +00:00
|
|
|
else if(spinbutton == view->spinButtonZ)
|
2007-12-24 00:04:02 +00:00
|
|
|
((PlayerStart*)view->editManager->getSelectedObject())->setZ(gtk_spin_button_get_value(GTK_SPIN_BUTTON(spinbutton)));
|
2007-12-14 02:47:03 +00:00
|
|
|
}
|
|
|
|
|
2007-12-24 00:04:02 +00:00
|
|
|
view->editManager->redraw();
|
2007-10-30 20:07:00 +00:00
|
|
|
}
|
|
|
|
|
2007-12-24 00:04:02 +00:00
|
|
|
SidebarView::SidebarView(EditManager *editManager) {
|
|
|
|
this->editManager = editManager;
|
2007-10-04 23:38:05 +00:00
|
|
|
|
|
|
|
sidebar = gtk_vbox_new(FALSE, 0);
|
|
|
|
g_object_ref_sink(G_OBJECT(sidebar));
|
|
|
|
|
2007-12-14 02:47:03 +00:00
|
|
|
labelType = gtk_label_new(NULL);
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelType), 0.0, 0.5);
|
|
|
|
gtk_box_pack_start(GTK_BOX(sidebar), labelType, FALSE, FALSE, 5);
|
2007-10-04 23:38:05 +00:00
|
|
|
|
|
|
|
gtk_box_pack_start(GTK_BOX(sidebar), gtk_hseparator_new(), FALSE, FALSE, 5);
|
|
|
|
|
2007-12-14 02:47:03 +00:00
|
|
|
labelName = gtk_label_new("Name: ");
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelName), 0.0, 0.5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_set_no_show_all(labelName, TRUE);
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_box_pack_start(GTK_BOX(sidebar), labelName, FALSE, FALSE, 0);
|
|
|
|
|
|
|
|
entryName = gtk_entry_new();
|
2007-12-04 21:35:01 +00:00
|
|
|
gtk_widget_set_size_request(entryName, 0, -1);
|
2007-10-04 23:38:05 +00:00
|
|
|
//g_signal_connect(G_OBJECT(entryName), "focus-out-event", G_CALLBACK(sidebarNameFocusOutEvent), NULL);
|
|
|
|
//gtk_widget_add_events(entryName, GDK_FOCUS_CHANGE_MASK);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_set_no_show_all(entryName, TRUE);
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_box_pack_start(GTK_BOX(sidebar), entryName, FALSE, FALSE, 0);
|
|
|
|
|
2007-12-14 02:47:03 +00:00
|
|
|
tableRoomData = gtk_table_new(2, 3, FALSE);
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_table_set_row_spacings(GTK_TABLE(tableRoomData), 5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_set_no_show_all(tableRoomData, TRUE);
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_box_pack_start(GTK_BOX(sidebar), tableRoomData, FALSE, FALSE, 5);
|
|
|
|
|
2007-12-04 21:35:01 +00:00
|
|
|
GtkWidget *labelAreaLabel = gtk_label_new("Room area: ");
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelAreaLabel), 0.0, 0.5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_show(labelAreaLabel);
|
2007-12-04 21:35:01 +00:00
|
|
|
gtk_table_attach(GTK_TABLE(tableRoomData), labelAreaLabel, 0, 1, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
|
2007-10-04 23:38:05 +00:00
|
|
|
|
|
|
|
labelArea = gtk_label_new(NULL);
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelArea), 1.0, 0.5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_show(labelArea);
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_table_attach_defaults(GTK_TABLE(tableRoomData), labelArea, 1, 2, 0, 1);
|
|
|
|
|
2007-12-04 21:35:01 +00:00
|
|
|
GtkWidget *labelPerimeterLabel = gtk_label_new("Room perimeter: ");
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelPerimeterLabel), 0.0, 0.5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_show(labelPerimeterLabel);
|
2007-12-04 21:35:01 +00:00
|
|
|
gtk_table_attach(GTK_TABLE(tableRoomData), labelPerimeterLabel, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
|
2007-10-04 23:38:05 +00:00
|
|
|
|
|
|
|
labelPerimeter = gtk_label_new(NULL);
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelPerimeter), 1.0, 0.5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_show(labelPerimeter);
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_table_attach_defaults(GTK_TABLE(tableRoomData), labelPerimeter, 1, 2, 1, 2);
|
|
|
|
|
2007-12-04 21:35:01 +00:00
|
|
|
GtkWidget *labelHeight = gtk_label_new("Height: ");
|
2007-10-30 20:07:00 +00:00
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelHeight), 0.0, 0.5);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_show(labelHeight);
|
2007-12-04 21:35:01 +00:00
|
|
|
gtk_table_attach(GTK_TABLE(tableRoomData), labelHeight, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
|
2007-10-30 20:07:00 +00:00
|
|
|
|
|
|
|
spinButtonHeight = gtk_spin_button_new_with_range(0, 10000, 0.1f);
|
|
|
|
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spinButtonHeight), 2);
|
|
|
|
gtk_entry_set_alignment(GTK_ENTRY(spinButtonHeight), 1.0);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_show(spinButtonHeight);
|
2007-10-30 20:07:00 +00:00
|
|
|
gtk_table_attach(GTK_TABLE(tableRoomData), spinButtonHeight, 1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND|GTK_SHRINK|GTK_FILL),
|
|
|
|
(GtkAttachOptions)(GTK_EXPAND|GTK_FILL), 0, 0);
|
2007-12-04 21:35:01 +00:00
|
|
|
gtk_widget_set_size_request(spinButtonHeight, 0, -1);
|
2007-12-14 02:47:03 +00:00
|
|
|
g_signal_connect(G_OBJECT(spinButtonHeight), "value-changed", G_CALLBACK(spinButtonChanged), this);
|
|
|
|
|
|
|
|
tablePlayerStart = gtk_table_new(2, 4, FALSE);
|
|
|
|
gtk_table_set_row_spacings(GTK_TABLE(tablePlayerStart), 5);
|
|
|
|
gtk_widget_set_no_show_all(tablePlayerStart, TRUE);
|
|
|
|
gtk_box_pack_start(GTK_BOX(sidebar), tablePlayerStart, FALSE, FALSE, 5);
|
|
|
|
|
|
|
|
GtkWidget *labelCoordinates = gtk_label_new("Coordinates:");
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelCoordinates), 0.0, 0.5);
|
|
|
|
gtk_widget_show(labelCoordinates);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), labelCoordinates, 0, 2, 0, 1, GTK_FILL, GTK_FILL, 0, 0);
|
|
|
|
|
|
|
|
GtkWidget *labelX = gtk_label_new("X: ");
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelX), 0.0, 0.5);
|
|
|
|
gtk_widget_show(labelX);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), labelX, 0, 1, 1, 2, GTK_FILL, GTK_FILL, 0, 0);
|
|
|
|
|
2007-12-14 18:22:04 +00:00
|
|
|
spinButtonX = gtk_spin_button_new_with_range(-10000, 10000, 0.01f);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spinButtonX), 2);
|
|
|
|
gtk_entry_set_alignment(GTK_ENTRY(spinButtonX), 1.0);
|
|
|
|
gtk_widget_show(spinButtonX);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), spinButtonX, 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND|GTK_SHRINK|GTK_FILL),
|
|
|
|
(GtkAttachOptions)(GTK_EXPAND|GTK_FILL), 0, 0);
|
|
|
|
gtk_widget_set_size_request(spinButtonX, 0, -1);
|
|
|
|
g_signal_connect(G_OBJECT(spinButtonX), "value-changed", G_CALLBACK(spinButtonChanged), this);
|
|
|
|
|
|
|
|
GtkWidget *labelY = gtk_label_new("Y: ");
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelY), 0.0, 0.5);
|
|
|
|
gtk_widget_show(labelY);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), labelY, 0, 1, 2, 3, GTK_FILL, GTK_FILL, 0, 0);
|
|
|
|
|
2007-12-14 18:22:04 +00:00
|
|
|
spinButtonY = gtk_spin_button_new_with_range(-10000, 10000, 0.01f);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spinButtonY), 2);
|
|
|
|
gtk_entry_set_alignment(GTK_ENTRY(spinButtonY), 1.0);
|
|
|
|
gtk_widget_show(spinButtonY);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), spinButtonY, 1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND|GTK_SHRINK|GTK_FILL),
|
|
|
|
(GtkAttachOptions)(GTK_EXPAND|GTK_FILL), 0, 0);
|
|
|
|
gtk_widget_set_size_request(spinButtonY, 0, -1);
|
|
|
|
g_signal_connect(G_OBJECT(spinButtonY), "value-changed", G_CALLBACK(spinButtonChanged), this);
|
|
|
|
|
|
|
|
GtkWidget *labelZ = gtk_label_new("Z: ");
|
|
|
|
gtk_misc_set_alignment(GTK_MISC(labelZ), 0.0, 0.5);
|
|
|
|
gtk_widget_show(labelZ);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), labelZ, 0, 1, 3, 4, GTK_FILL, GTK_FILL, 0, 0);
|
|
|
|
|
2007-12-14 18:22:04 +00:00
|
|
|
spinButtonZ = gtk_spin_button_new_with_range(-10000, 10000, 0.01f);
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_spin_button_set_digits(GTK_SPIN_BUTTON(spinButtonZ), 2);
|
|
|
|
gtk_entry_set_alignment(GTK_ENTRY(spinButtonZ), 1.0);
|
|
|
|
gtk_widget_show(spinButtonZ);
|
|
|
|
gtk_table_attach(GTK_TABLE(tablePlayerStart), spinButtonZ, 1, 2, 3, 4, (GtkAttachOptions)(GTK_EXPAND|GTK_SHRINK|GTK_FILL),
|
|
|
|
(GtkAttachOptions)(GTK_EXPAND|GTK_FILL), 0, 0);
|
|
|
|
gtk_widget_set_size_request(spinButtonZ, 0, -1);
|
|
|
|
g_signal_connect(G_OBJECT(spinButtonZ), "value-changed", G_CALLBACK(spinButtonChanged), this);
|
2007-10-30 20:07:00 +00:00
|
|
|
|
2007-10-04 23:38:05 +00:00
|
|
|
gtk_widget_show_all(sidebar);
|
|
|
|
}
|
|
|
|
|
|
|
|
SidebarView::~SidebarView() {
|
|
|
|
g_object_unref(G_OBJECT(sidebar));
|
|
|
|
}
|
|
|
|
|
|
|
|
GtkWidget* SidebarView::getWidget() {
|
|
|
|
return sidebar;
|
|
|
|
}
|
|
|
|
|
|
|
|
void SidebarView::update() {
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_widget_hide(labelName);
|
|
|
|
gtk_widget_hide(entryName);
|
|
|
|
gtk_widget_hide(tableRoomData);
|
|
|
|
gtk_widget_hide(tablePlayerStart);
|
|
|
|
|
2007-12-24 00:04:02 +00:00
|
|
|
if(editManager->getSelectedObject()) {
|
|
|
|
if(editManager->getSelectedObject()->isOfType("Room")) {
|
|
|
|
Room *room = (Room*)editManager->getSelectedObject();
|
2007-12-14 02:47:03 +00:00
|
|
|
|
|
|
|
gtk_label_set_markup(GTK_LABEL(labelType), "<b>Room info:</b>");
|
|
|
|
|
|
|
|
gtk_widget_show(labelName);
|
|
|
|
|
|
|
|
gtk_entry_set_text(GTK_ENTRY(entryName), room->getName().c_str());
|
|
|
|
gtk_widget_show(entryName);
|
|
|
|
|
|
|
|
gchar *string = g_strdup_printf("%.2f", room->area());
|
|
|
|
gtk_label_set_text(GTK_LABEL(labelArea), string);
|
|
|
|
g_free(string);
|
|
|
|
|
|
|
|
string = g_strdup_printf("%.2f", room->perimeter());
|
|
|
|
gtk_label_set_text(GTK_LABEL(labelPerimeter), string);
|
|
|
|
g_free(string);
|
|
|
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinButtonHeight), room->getHeight());
|
|
|
|
|
|
|
|
gtk_widget_show(tableRoomData);
|
|
|
|
}
|
2007-12-24 00:04:02 +00:00
|
|
|
else if(editManager->getSelectedObject()->isOfType("PlayerStart")) {
|
|
|
|
PlayerStart *playerStart = (PlayerStart*)editManager->getSelectedObject();
|
2007-12-14 02:47:03 +00:00
|
|
|
|
|
|
|
gtk_label_set_markup(GTK_LABEL(labelType), "<b>Player start:</b>");
|
|
|
|
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinButtonX), playerStart->getX());
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinButtonY), playerStart->getY());
|
|
|
|
gtk_spin_button_set_value(GTK_SPIN_BUTTON(spinButtonZ), playerStart->getZ());
|
|
|
|
|
|
|
|
gtk_widget_show(tablePlayerStart);
|
|
|
|
}
|
2007-10-04 23:38:05 +00:00
|
|
|
}
|
|
|
|
else {
|
2007-12-14 02:47:03 +00:00
|
|
|
gtk_label_set_markup(GTK_LABEL(labelType), "<b>[Nothing selected]</b>");
|
2007-10-04 23:38:05 +00:00
|
|
|
}
|
|
|
|
}
|