zoomedit: Use toolbox for polygon adder.
This commit is contained in:
parent
d389dce3ef
commit
19690f0304
12 changed files with 193 additions and 80 deletions
|
@ -41,23 +41,30 @@ EditManager::EditManager(Window *window) {
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditManager::addRoom() {
|
void EditManager::addRoom() {
|
||||||
|
if(mode == VIEW) {
|
||||||
newRoom = Room(idManager.generate("room"));
|
newRoom = Room(idManager.generate("room"));
|
||||||
mode = ADD;
|
mode = ADD;
|
||||||
|
|
||||||
activeRoom = &newRoom;
|
activeRoom = &newRoom;
|
||||||
|
|
||||||
window->update();
|
window->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditManager::finishRoom() {
|
void EditManager::finishRoom() {
|
||||||
|
if(mode == ADD) {
|
||||||
mode = VIEW;
|
mode = VIEW;
|
||||||
|
|
||||||
if(newRoom.size() > 2 && polygonOk(newRoom)) {
|
if(newRoom.size() > 2 && polygonOk(newRoom)) {
|
||||||
window->getLevel().push_back(newRoom);
|
window->getLevel().push_back(newRoom);
|
||||||
activeRoom = &window->getLevel().back();
|
activeRoom = &window->getLevel().back();
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
activeRoom = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
window->update();
|
window->update();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditManager::addVertex(const Vertex &v) {
|
void EditManager::addVertex(const Vertex &v) {
|
||||||
|
|
|
@ -4,6 +4,6 @@ zoomedit_SOURCES = zoomedit.cpp UIManager.cpp Renderer.cpp Vertex.cpp \
|
||||||
IdManager.cpp WindowManager.cpp SidebarManager.cpp \
|
IdManager.cpp WindowManager.cpp SidebarManager.cpp \
|
||||||
Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \
|
Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \
|
||||||
EditManager.cpp FileManager.cpp SidebarToolbox.cpp \
|
EditManager.cpp FileManager.cpp SidebarToolbox.cpp \
|
||||||
ToolAddPolygon.cpp
|
ToolSelector.cpp ToolAddPolygon.cpp
|
||||||
zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@
|
zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@
|
||||||
zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@
|
zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@
|
18
Makefile.in
18
Makefile.in
|
@ -59,6 +59,7 @@ am_zoomedit_OBJECTS = zoomedit-zoomedit.$(OBJEXT) \
|
||||||
zoomedit-Drawer.$(OBJEXT) zoomedit-EditManager.$(OBJEXT) \
|
zoomedit-Drawer.$(OBJEXT) zoomedit-EditManager.$(OBJEXT) \
|
||||||
zoomedit-FileManager.$(OBJEXT) \
|
zoomedit-FileManager.$(OBJEXT) \
|
||||||
zoomedit-SidebarToolbox.$(OBJEXT) \
|
zoomedit-SidebarToolbox.$(OBJEXT) \
|
||||||
|
zoomedit-ToolSelector.$(OBJEXT) \
|
||||||
zoomedit-ToolAddPolygon.$(OBJEXT)
|
zoomedit-ToolAddPolygon.$(OBJEXT)
|
||||||
zoomedit_OBJECTS = $(am_zoomedit_OBJECTS)
|
zoomedit_OBJECTS = $(am_zoomedit_OBJECTS)
|
||||||
zoomedit_DEPENDENCIES =
|
zoomedit_DEPENDENCIES =
|
||||||
|
@ -186,7 +187,7 @@ zoomedit_SOURCES = zoomedit.cpp UIManager.cpp Renderer.cpp Vertex.cpp \
|
||||||
IdManager.cpp WindowManager.cpp SidebarManager.cpp \
|
IdManager.cpp WindowManager.cpp SidebarManager.cpp \
|
||||||
Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \
|
Window.cpp SidebarView.cpp SidebarAdd.cpp Drawer.cpp \
|
||||||
EditManager.cpp FileManager.cpp SidebarToolbox.cpp \
|
EditManager.cpp FileManager.cpp SidebarToolbox.cpp \
|
||||||
ToolAddPolygon.cpp
|
ToolSelector.cpp ToolAddPolygon.cpp
|
||||||
|
|
||||||
zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@
|
zoomedit_CPPFLAGS = @GTK_CFLAGS@ @GTKGLEXT_CFLAGS@ @libxml2_CFLAGS@
|
||||||
zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@
|
zoomedit_LDADD = @GTK_LIBS@ @GTKGLEXT_LIBS@ @libxml2_LIBS@
|
||||||
|
@ -292,6 +293,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-SidebarToolbox.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-SidebarToolbox.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-SidebarView.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-SidebarView.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolAddPolygon.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolAddPolygon.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-ToolSelector.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-Triangle.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-Triangle.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-UIManager.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-UIManager.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-Vertex.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/zoomedit-Vertex.Po@am__quote@
|
||||||
|
@ -579,6 +581,20 @@ zoomedit-SidebarToolbox.obj: SidebarToolbox.cpp
|
||||||
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-SidebarToolbox.obj `if test -f 'SidebarToolbox.cpp'; then $(CYGPATH_W) 'SidebarToolbox.cpp'; else $(CYGPATH_W) '$(srcdir)/SidebarToolbox.cpp'; fi`
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-SidebarToolbox.obj `if test -f 'SidebarToolbox.cpp'; then $(CYGPATH_W) 'SidebarToolbox.cpp'; else $(CYGPATH_W) '$(srcdir)/SidebarToolbox.cpp'; fi`
|
||||||
|
|
||||||
|
zoomedit-ToolSelector.o: ToolSelector.cpp
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-ToolSelector.o -MD -MP -MF $(DEPDIR)/zoomedit-ToolSelector.Tpo -c -o zoomedit-ToolSelector.o `test -f 'ToolSelector.cpp' || echo '$(srcdir)/'`ToolSelector.cpp
|
||||||
|
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-ToolSelector.Tpo $(DEPDIR)/zoomedit-ToolSelector.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ToolSelector.cpp' object='zoomedit-ToolSelector.o' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-ToolSelector.o `test -f 'ToolSelector.cpp' || echo '$(srcdir)/'`ToolSelector.cpp
|
||||||
|
|
||||||
|
zoomedit-ToolSelector.obj: ToolSelector.cpp
|
||||||
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-ToolSelector.obj -MD -MP -MF $(DEPDIR)/zoomedit-ToolSelector.Tpo -c -o zoomedit-ToolSelector.obj `if test -f 'ToolSelector.cpp'; then $(CYGPATH_W) 'ToolSelector.cpp'; else $(CYGPATH_W) '$(srcdir)/ToolSelector.cpp'; fi`
|
||||||
|
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-ToolSelector.Tpo $(DEPDIR)/zoomedit-ToolSelector.Po
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='ToolSelector.cpp' object='zoomedit-ToolSelector.obj' libtool=no @AMDEPBACKSLASH@
|
||||||
|
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
|
||||||
|
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o zoomedit-ToolSelector.obj `if test -f 'ToolSelector.cpp'; then $(CYGPATH_W) 'ToolSelector.cpp'; else $(CYGPATH_W) '$(srcdir)/ToolSelector.cpp'; fi`
|
||||||
|
|
||||||
zoomedit-ToolAddPolygon.o: ToolAddPolygon.cpp
|
zoomedit-ToolAddPolygon.o: ToolAddPolygon.cpp
|
||||||
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-ToolAddPolygon.o -MD -MP -MF $(DEPDIR)/zoomedit-ToolAddPolygon.Tpo -c -o zoomedit-ToolAddPolygon.o `test -f 'ToolAddPolygon.cpp' || echo '$(srcdir)/'`ToolAddPolygon.cpp
|
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(zoomedit_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT zoomedit-ToolAddPolygon.o -MD -MP -MF $(DEPDIR)/zoomedit-ToolAddPolygon.Tpo -c -o zoomedit-ToolAddPolygon.o `test -f 'ToolAddPolygon.cpp' || echo '$(srcdir)/'`ToolAddPolygon.cpp
|
||||||
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-ToolAddPolygon.Tpo $(DEPDIR)/zoomedit-ToolAddPolygon.Po
|
@am__fastdepCXX_TRUE@ mv -f $(DEPDIR)/zoomedit-ToolAddPolygon.Tpo $(DEPDIR)/zoomedit-ToolAddPolygon.Po
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
|
|
||||||
SidebarManager::SidebarManager(EditManager *editor)
|
SidebarManager::SidebarManager(EditManager *editor)
|
||||||
: sidebarView(editor), sidebarAdd(editor), tool(editor)
|
: sidebarToolbox(editor), sidebarView(editor), sidebarAdd(editor), toolAddPolygon(editor)
|
||||||
{
|
{
|
||||||
this->editor = editor;
|
this->editor = editor;
|
||||||
activeSidebar = NULL;
|
activeSidebar = NULL;
|
||||||
|
@ -21,7 +21,7 @@ SidebarManager::SidebarManager(EditManager *editor)
|
||||||
gtk_container_add(GTK_CONTAINER(scrolledWindow), viewport);
|
gtk_container_add(GTK_CONTAINER(scrolledWindow), viewport);
|
||||||
gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
|
gtk_viewport_set_shadow_type(GTK_VIEWPORT(viewport), GTK_SHADOW_NONE);
|
||||||
|
|
||||||
sidebarToolbox.addTool(&tool);
|
sidebarToolbox.addTool(&toolAddPolygon);
|
||||||
|
|
||||||
gtk_widget_show(sidebar);
|
gtk_widget_show(sidebar);
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "SidebarView.h"
|
#include "SidebarView.h"
|
||||||
#include "SidebarAdd.h"
|
#include "SidebarAdd.h"
|
||||||
#include "EditManager.h"
|
#include "EditManager.h"
|
||||||
|
#include "ToolSelector.h"
|
||||||
#include "ToolAddPolygon.h"
|
#include "ToolAddPolygon.h"
|
||||||
|
|
||||||
|
|
||||||
|
@ -23,7 +24,7 @@ class SidebarManager {
|
||||||
|
|
||||||
EditManager *editor;
|
EditManager *editor;
|
||||||
|
|
||||||
ToolAddPolygon tool;
|
ToolAddPolygon toolAddPolygon;
|
||||||
|
|
||||||
// prevent shallow copy
|
// prevent shallow copy
|
||||||
SidebarManager(const SidebarManager &w);
|
SidebarManager(const SidebarManager &w);
|
||||||
|
|
|
@ -1,73 +1,27 @@
|
||||||
#include "SidebarToolbox.h"
|
#include "SidebarToolbox.h"
|
||||||
|
|
||||||
|
|
||||||
void SidebarToolbox::toolAction(GtkWidget *button, Tool *tool) {
|
void SidebarToolbox::buttonToggled(GtkWidget *button, SidebarToolbox *toolbox) {
|
||||||
tool->action();
|
if(!gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button)))
|
||||||
|
return;
|
||||||
|
|
||||||
|
toolbox->activateTool(toolbox->buttonsRev[button]);
|
||||||
}
|
}
|
||||||
|
|
||||||
void SidebarToolbox::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation, SidebarToolbox *toolbox) {
|
void SidebarToolbox::sizeAllocate(GtkWidget *widget, GtkAllocation *allocation, SidebarToolbox *toolbox) {
|
||||||
toolbox->updateRows(false);
|
toolbox->updateRows(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
SidebarToolbox::SidebarToolbox() {
|
|
||||||
|
|
||||||
cols = 1; rows = 0;
|
|
||||||
|
|
||||||
widget = gtk_table_new(1, 1, TRUE);
|
|
||||||
g_object_ref_sink(G_OBJECT(widget));
|
|
||||||
|
|
||||||
g_signal_connect(G_OBJECT(widget), "size-allocate", G_CALLBACK(sizeAllocate), this);
|
|
||||||
|
|
||||||
gtk_widget_show(widget);
|
|
||||||
}
|
|
||||||
|
|
||||||
SidebarToolbox::~SidebarToolbox() {
|
|
||||||
for(std::map<Tool*, GtkWidget*>::iterator button = buttons.begin(); button != buttons.end(); button++) {
|
|
||||||
g_object_unref(G_OBJECT(button->second));
|
|
||||||
}
|
|
||||||
|
|
||||||
g_object_unref(G_OBJECT(widget));
|
|
||||||
}
|
|
||||||
|
|
||||||
void SidebarToolbox::addTool(Tool *tool) {
|
|
||||||
tools.push_back(tool);
|
|
||||||
|
|
||||||
GtkWidget *button = gtk_button_new();
|
|
||||||
g_object_ref_sink(G_OBJECT(button));
|
|
||||||
gtk_button_set_image(GTK_BUTTON(button), tool->getImage());
|
|
||||||
gtk_widget_show(button);
|
|
||||||
g_signal_connect(G_OBJECT(button), "clicked", G_CALLBACK(toolAction), tool);
|
|
||||||
|
|
||||||
buttons.insert(std::pair<Tool*, GtkWidget*>(tool, button));
|
|
||||||
|
|
||||||
updateRows(true);
|
|
||||||
update();
|
|
||||||
}
|
|
||||||
|
|
||||||
void SidebarToolbox::removeTool(Tool *tool) {
|
|
||||||
tools.remove(tool);
|
|
||||||
|
|
||||||
g_object_unref(G_OBJECT(buttons[tool]));
|
|
||||||
buttons.erase(tool);
|
|
||||||
|
|
||||||
updateRows(true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void SidebarToolbox::updateRows(bool changed) {
|
void SidebarToolbox::updateRows(bool changed) {
|
||||||
int cols, rows;
|
GtkRequisition requisition;
|
||||||
GtkRequisition requisition = {0, 0};
|
|
||||||
|
|
||||||
if(tools.empty()) {
|
|
||||||
cols = 1; rows = 0;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
gtk_widget_size_request(buttons[tools.front()], &requisition);
|
gtk_widget_size_request(buttons[tools.front()], &requisition);
|
||||||
|
|
||||||
cols = MAX(1, widget->allocation.width/requisition.width);
|
int cols = MAX(1, widget->allocation.width/requisition.width);
|
||||||
rows = (tools.size()+cols-1)/cols;
|
int rows = (tools.size()+cols-1)/cols;
|
||||||
}
|
|
||||||
|
|
||||||
if(this->cols != cols || this->rows != rows || changed) {
|
if(changed || this->cols != cols || this->rows != rows) {
|
||||||
this->cols = cols;
|
this->cols = cols;
|
||||||
this->rows = rows;
|
this->rows = rows;
|
||||||
|
|
||||||
|
@ -93,6 +47,74 @@ void SidebarToolbox::updateRows(bool changed) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void SidebarToolbox::activateTool(Tool *tool) {
|
||||||
|
if(activeTool == tool)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if(activeTool)
|
||||||
|
activeTool->deactivate();
|
||||||
|
|
||||||
|
activeTool = tool;
|
||||||
|
tool->activate();
|
||||||
|
}
|
||||||
|
|
||||||
|
SidebarToolbox::SidebarToolbox(EditManager *editManager) : toolSelector(editManager) {
|
||||||
|
widget = gtk_table_new(1, 1, TRUE);
|
||||||
|
g_object_ref_sink(G_OBJECT(widget));
|
||||||
|
|
||||||
|
g_signal_connect(G_OBJECT(widget), "size-allocate", G_CALLBACK(sizeAllocate), this);
|
||||||
|
|
||||||
|
addTool(&toolSelector);
|
||||||
|
activeTool = NULL;
|
||||||
|
activateTool(&toolSelector);
|
||||||
|
|
||||||
|
gtk_widget_show(widget);
|
||||||
|
}
|
||||||
|
|
||||||
|
SidebarToolbox::~SidebarToolbox() {
|
||||||
|
for(std::map<Tool*, GtkWidget*>::iterator button = buttons.begin(); button != buttons.end(); button++) {
|
||||||
|
g_object_unref(G_OBJECT(button->second));
|
||||||
|
}
|
||||||
|
|
||||||
|
g_object_unref(G_OBJECT(widget));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SidebarToolbox::addTool(Tool *tool) {
|
||||||
|
GtkWidget *button;
|
||||||
|
if(tools.empty())
|
||||||
|
button = gtk_radio_button_new(NULL);
|
||||||
|
else
|
||||||
|
button = gtk_radio_button_new_from_widget(GTK_RADIO_BUTTON(buttons[tools.front()]));
|
||||||
|
g_object_ref_sink(G_OBJECT(button));
|
||||||
|
gtk_toggle_button_set_mode(GTK_TOGGLE_BUTTON(button), FALSE);
|
||||||
|
gtk_button_set_relief(GTK_BUTTON(button), GTK_RELIEF_NONE);
|
||||||
|
gtk_button_set_image(GTK_BUTTON(button), tool->getImage());
|
||||||
|
|
||||||
|
gtk_widget_show(button);
|
||||||
|
g_signal_connect(G_OBJECT(button), "toggled", G_CALLBACK(buttonToggled), this);
|
||||||
|
|
||||||
|
tools.push_back(tool);
|
||||||
|
buttons.insert(std::pair<Tool*, GtkWidget*>(tool, button));
|
||||||
|
buttonsRev.insert(std::pair<GtkWidget*, Tool*>(button, tool));
|
||||||
|
|
||||||
|
updateRows(true);
|
||||||
|
update();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SidebarToolbox::removeTool(Tool *tool) {
|
||||||
|
if(tool == activeTool) {
|
||||||
|
activateTool(&toolSelector);
|
||||||
|
}
|
||||||
|
|
||||||
|
tools.remove(tool);
|
||||||
|
|
||||||
|
buttonsRev.erase(buttons[tool]);
|
||||||
|
g_object_unref(G_OBJECT(buttons[tool]));
|
||||||
|
buttons.erase(tool);
|
||||||
|
|
||||||
|
updateRows(true);
|
||||||
|
}
|
||||||
|
|
||||||
void SidebarToolbox::update() {
|
void SidebarToolbox::update() {
|
||||||
for(std::list<Tool*>::iterator tool = tools.begin(); tool != tools.end(); tool++) {
|
for(std::list<Tool*>::iterator tool = tools.begin(); tool != tools.end(); tool++) {
|
||||||
gtk_widget_set_tooltip_text(buttons[*tool], (*tool)->getName());
|
gtk_widget_set_tooltip_text(buttons[*tool], (*tool)->getName());
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include "EditManager.h"
|
#include "EditManager.h"
|
||||||
#include "Sidebar.h"
|
#include "Sidebar.h"
|
||||||
#include "Tool.h"
|
#include "Tool.h"
|
||||||
|
#include "ToolSelector.h"
|
||||||
|
|
||||||
class SidebarToolbox : Sidebar {
|
class SidebarToolbox : Sidebar {
|
||||||
private:
|
private:
|
||||||
|
@ -14,20 +15,26 @@ class SidebarToolbox : Sidebar {
|
||||||
|
|
||||||
std::list<Tool*> tools;
|
std::list<Tool*> tools;
|
||||||
std::map<Tool*, GtkWidget*> buttons;
|
std::map<Tool*, GtkWidget*> buttons;
|
||||||
|
std::map<GtkWidget*, Tool*> buttonsRev;
|
||||||
|
|
||||||
|
Tool *activeTool;
|
||||||
|
|
||||||
|
ToolSelector toolSelector;
|
||||||
|
|
||||||
int cols, rows;
|
int cols, rows;
|
||||||
|
|
||||||
void updateRows(bool changed);
|
void updateRows(bool changed);
|
||||||
|
void activateTool(Tool *tool);
|
||||||
|
|
||||||
// prevent shallow copy
|
// prevent shallow copy
|
||||||
SidebarToolbox(const SidebarToolbox &w);
|
SidebarToolbox(const SidebarToolbox &w);
|
||||||
const SidebarToolbox& operator=(const SidebarToolbox &w);
|
const SidebarToolbox& operator=(const SidebarToolbox &w);
|
||||||
|
|
||||||
static void toolAction(GtkWidget *button, Tool *tool);
|
static void buttonToggled(GtkWidget *button, SidebarToolbox *toolbox);
|
||||||
static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation, SidebarToolbox *toolbox);
|
static void sizeAllocate(GtkWidget *widget, GtkAllocation *allocation, SidebarToolbox *toolbox);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
SidebarToolbox();
|
SidebarToolbox(EditManager *editManager);
|
||||||
virtual ~SidebarToolbox();
|
virtual ~SidebarToolbox();
|
||||||
|
|
||||||
GtkWidget* getWidget() {
|
GtkWidget* getWidget() {
|
||||||
|
|
3
Tool.h
3
Tool.h
|
@ -8,7 +8,8 @@ class Tool {
|
||||||
public:
|
public:
|
||||||
virtual ~Tool() {}
|
virtual ~Tool() {}
|
||||||
|
|
||||||
virtual void action() = 0;
|
virtual void activate() {};
|
||||||
|
virtual void deactivate() {};
|
||||||
|
|
||||||
virtual const gchar *getName() = 0;
|
virtual const gchar *getName() = 0;
|
||||||
virtual GtkWidget *getImage() = 0;
|
virtual GtkWidget *getImage() = 0;
|
||||||
|
|
|
@ -15,10 +15,14 @@ ToolAddPolygon::~ToolAddPolygon() {
|
||||||
g_object_unref(G_OBJECT(image));
|
g_object_unref(G_OBJECT(image));
|
||||||
}
|
}
|
||||||
|
|
||||||
void ToolAddPolygon::action() {
|
void ToolAddPolygon::activate() {
|
||||||
editManager->addRoom();
|
editManager->addRoom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ToolAddPolygon::deactivate() {
|
||||||
|
editManager->finishRoom();
|
||||||
|
}
|
||||||
|
|
||||||
GtkWidget *ToolAddPolygon::getImage() {
|
GtkWidget *ToolAddPolygon::getImage() {
|
||||||
return image;
|
return image;
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,14 +20,15 @@ class ToolAddPolygon : public Tool {
|
||||||
ToolAddPolygon(EditManager *editManager);
|
ToolAddPolygon(EditManager *editManager);
|
||||||
virtual ~ToolAddPolygon();
|
virtual ~ToolAddPolygon();
|
||||||
|
|
||||||
virtual void action();
|
virtual void activate();
|
||||||
|
virtual void deactivate();
|
||||||
|
|
||||||
virtual const gchar *getName() {
|
virtual const gchar *getName() {
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isSensitive() {
|
bool isSensitive() {
|
||||||
return (editManager->getMode() != EditManager::ADD);
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual GtkWidget *getImage();
|
virtual GtkWidget *getImage();
|
||||||
|
|
20
ToolSelector.cpp
Normal file
20
ToolSelector.cpp
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
#include "ToolSelector.h"
|
||||||
|
|
||||||
|
|
||||||
|
const gchar *ToolSelector::name = (const gchar*)"Select";
|
||||||
|
|
||||||
|
|
||||||
|
ToolSelector::ToolSelector(EditManager *editManager) {
|
||||||
|
this->editManager = editManager;
|
||||||
|
|
||||||
|
image = gtk_image_new_from_stock(GTK_STOCK_MISSING_IMAGE, GTK_ICON_SIZE_BUTTON);
|
||||||
|
g_object_ref_sink(G_OBJECT(image));
|
||||||
|
}
|
||||||
|
|
||||||
|
ToolSelector::~ToolSelector() {
|
||||||
|
g_object_unref(G_OBJECT(image));
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *ToolSelector::getImage() {
|
||||||
|
return image;
|
||||||
|
}
|
34
ToolSelector.h
Normal file
34
ToolSelector.h
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
#ifndef TOOLSELECTOR_H_
|
||||||
|
#define TOOLSELECTOR_H_
|
||||||
|
|
||||||
|
#include "Tool.h"
|
||||||
|
#include "EditManager.h"
|
||||||
|
|
||||||
|
class ToolSelector : public Tool {
|
||||||
|
private:
|
||||||
|
GtkWidget *image;
|
||||||
|
|
||||||
|
EditManager *editManager;
|
||||||
|
|
||||||
|
static const gchar* name;
|
||||||
|
|
||||||
|
// prevent shallow copy
|
||||||
|
ToolSelector(const ToolSelector &t);
|
||||||
|
const ToolSelector& operator=(const ToolSelector &t);
|
||||||
|
|
||||||
|
public:
|
||||||
|
ToolSelector(EditManager *editManager);
|
||||||
|
virtual ~ToolSelector();
|
||||||
|
|
||||||
|
virtual const gchar *getName() {
|
||||||
|
return name;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isSensitive() {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual GtkWidget *getImage();
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /*TOOLSELECTOR_H_*/
|
Reference in a new issue