You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
143 lines
4.1 KiB
143 lines
4.1 KiB
#include "SidebarToolbar.h" |
|
|
|
#include "control/Control.h" |
|
#include "undo/CopyUndoAction.h" |
|
#include "undo/SwapUndoAction.h" |
|
|
|
|
|
SidebarToolbar::SidebarToolbar(Control* control, GladeGui* gui) |
|
{ |
|
XOJ_INIT_TYPE(SidebarToolbar); |
|
|
|
this->control = control; |
|
|
|
this->btUp = GTK_BUTTON(gui->get("btUp")); |
|
this->btDown = GTK_BUTTON(gui->get("btDown")); |
|
this->btCopy = GTK_BUTTON(gui->get("btCopy")); |
|
this->btDelete = GTK_BUTTON(gui->get("btDelete")); |
|
|
|
g_signal_connect(this->btUp, "clicked", G_CALLBACK(&btUpClicked), this); |
|
g_signal_connect(this->btDown, "clicked", G_CALLBACK(&btDownClicked), this); |
|
g_signal_connect(this->btCopy, "clicked", G_CALLBACK(&btCopyClicked), this); |
|
g_signal_connect(this->btDelete, "clicked", G_CALLBACK(&btDeleteClicked), this); |
|
} |
|
|
|
SidebarToolbar::~SidebarToolbar() |
|
{ |
|
XOJ_CHECK_TYPE(SidebarToolbar); |
|
|
|
this->control = NULL; |
|
XOJ_RELEASE_TYPE(SidebarToolbar); |
|
} |
|
|
|
void SidebarToolbar::btUpClicked(GtkToolButton* toolbutton, SidebarToolbar* toolbar) |
|
{ |
|
XOJ_CHECK_TYPE_OBJ(toolbar, SidebarToolbar); |
|
|
|
Document* doc = toolbar->control->getDocument(); |
|
doc->lock(); |
|
|
|
size_t page = doc->indexOf(toolbar->currentPage); |
|
PageRef swappedPage = toolbar->currentPage; |
|
PageRef otherPage = doc->getPage(page - 1); |
|
if (page != size_t_npos) |
|
{ |
|
doc->deletePage(page); |
|
doc->insertPage(toolbar->currentPage, page - 1); |
|
} |
|
doc->unlock(); |
|
|
|
UndoRedoHandler* undo = toolbar->control->getUndoRedoHandler(); |
|
undo->addUndoAction(new SwapUndoAction(page - 1, true, swappedPage, otherPage)); |
|
|
|
toolbar->control->firePageDeleted(page); |
|
toolbar->control->firePageInserted(page - 1); |
|
toolbar->control->firePageSelected(page - 1); |
|
|
|
toolbar->control->getScrollHandler()->scrollToPage(page - 1); |
|
} |
|
|
|
void SidebarToolbar::btDownClicked(GtkToolButton* toolbutton, SidebarToolbar* toolbar) |
|
{ |
|
XOJ_CHECK_TYPE_OBJ(toolbar, SidebarToolbar); |
|
|
|
Document* doc = toolbar->control->getDocument(); |
|
PageRef swapped_page, other_page; |
|
doc->lock(); |
|
|
|
size_t page = doc->indexOf(toolbar->currentPage); |
|
swapped_page = toolbar->currentPage; |
|
other_page = doc->getPage(page + 1); |
|
if (page != size_t_npos) |
|
{ |
|
doc->deletePage(page); |
|
doc->insertPage(toolbar->currentPage, page + 1); |
|
} |
|
doc->unlock(); |
|
|
|
UndoRedoHandler* undo = toolbar->control->getUndoRedoHandler(); |
|
undo->addUndoAction(new SwapUndoAction(page, false, swapped_page, other_page)); |
|
|
|
toolbar->control->firePageDeleted(page); |
|
toolbar->control->firePageInserted(page + 1); |
|
toolbar->control->firePageSelected(page + 1); |
|
|
|
toolbar->control->getScrollHandler()->scrollToPage(page + 1); |
|
} |
|
|
|
void SidebarToolbar::btCopyClicked(GtkToolButton* toolbutton, SidebarToolbar* toolbar) |
|
{ |
|
XOJ_CHECK_TYPE_OBJ(toolbar, SidebarToolbar); |
|
|
|
Document* doc = toolbar->control->getDocument(); |
|
doc->lock(); |
|
|
|
int page = doc->indexOf(toolbar->currentPage); |
|
if (page < 0) |
|
{ |
|
return; |
|
} |
|
|
|
PageRef newPage = toolbar->currentPage.clone(); |
|
doc->insertPage(newPage, page + 1); |
|
|
|
doc->unlock(); |
|
|
|
UndoRedoHandler* undo = toolbar->control->getUndoRedoHandler(); |
|
undo->addUndoAction(new CopyUndoAction(newPage, page + 1)); |
|
|
|
toolbar->control->firePageInserted(page + 1); |
|
toolbar->control->firePageSelected(page + 1); |
|
|
|
toolbar->control->getScrollHandler()->scrollToPage(page + 1); |
|
} |
|
|
|
void SidebarToolbar::btDeleteClicked(GtkToolButton* toolbutton, SidebarToolbar* toolbar) |
|
{ |
|
XOJ_CHECK_TYPE_OBJ(toolbar, SidebarToolbar); |
|
|
|
toolbar->control->deletePage(); |
|
} |
|
|
|
void SidebarToolbar::setHidden(bool hidden) |
|
{ |
|
XOJ_CHECK_TYPE(SidebarToolbar); |
|
|
|
gtk_widget_set_visible(GTK_WIDGET(this->btUp), !hidden); |
|
gtk_widget_set_visible(GTK_WIDGET(this->btDown), !hidden); |
|
gtk_widget_set_visible(GTK_WIDGET(this->btCopy), !hidden); |
|
gtk_widget_set_visible(GTK_WIDGET(this->btDelete), !hidden); |
|
} |
|
|
|
void SidebarToolbar::setButtonEnabled(bool enableUp, bool enableDown, bool enableCopy, bool enableDelete, PageRef currentPage) |
|
{ |
|
XOJ_CHECK_TYPE(SidebarToolbar); |
|
|
|
gtk_widget_set_sensitive(GTK_WIDGET(this->btUp), enableUp); |
|
gtk_widget_set_sensitive(GTK_WIDGET(this->btDown), enableDown); |
|
gtk_widget_set_sensitive(GTK_WIDGET(this->btCopy), enableCopy); |
|
gtk_widget_set_sensitive(GTK_WIDGET(this->btDelete), enableDelete); |
|
|
|
this->currentPage = currentPage; |
|
} |
|
|
|
|