diff --git a/src/control/Control.cpp b/src/control/Control.cpp index 67fe050d..81831471 100644 --- a/src/control/Control.cpp +++ b/src/control/Control.cpp @@ -155,8 +155,6 @@ Control::~Control() page->unreference(); } - delete this->layerController; - this->layerController = NULL; delete this->clipboardHandler; this->clipboardHandler = NULL; delete this->recent; @@ -193,6 +191,8 @@ Control::~Control() this->audioController = NULL; delete this->pageBackgroundChangeController; this->pageBackgroundChangeController = NULL; + delete this->layerController; + this->layerController = NULL; XOJ_RELEASE_TYPE(Control); } diff --git a/src/gui/sidebar/Sidebar.cpp b/src/gui/sidebar/Sidebar.cpp index 82b9ccf0..3861b59f 100644 --- a/src/gui/sidebar/Sidebar.cpp +++ b/src/gui/sidebar/Sidebar.cpp @@ -141,6 +141,9 @@ void Sidebar::setSelectedPage(size_t page) i++; } + + // Hide the toolbar for all except the page preview + toolbar.setHidden(page != 1); } void Sidebar::updateEnableDisableButtons() @@ -207,26 +210,6 @@ void Sidebar::documentChanged(DocumentChangeType type) } } -void Sidebar::pageSizeChanged(size_t page) -{ -} - -void Sidebar::pageChanged(size_t page) -{ -} - -void Sidebar::pageInserted(size_t page) -{ -} - -void Sidebar::pageDeleted(size_t page) -{ -} - -void Sidebar::pageSelected(size_t page) -{ -} - SidebarPageButton::SidebarPageButton(Sidebar* sidebar, int index, AbstractSidebarPage* page) { this->sidebar = sidebar; diff --git a/src/gui/sidebar/Sidebar.h b/src/gui/sidebar/Sidebar.h index bce8d581..14e77299 100644 --- a/src/gui/sidebar/Sidebar.h +++ b/src/gui/sidebar/Sidebar.h @@ -68,11 +68,6 @@ public: public: // DocumentListener interface virtual void documentChanged(DocumentChangeType type); - virtual void pageSizeChanged(size_t page); - virtual void pageChanged(size_t page); - virtual void pageInserted(size_t page); - virtual void pageDeleted(size_t page); - virtual void pageSelected(size_t page); private: diff --git a/src/gui/sidebar/previews/base/SidebarToolbar.cpp b/src/gui/sidebar/previews/base/SidebarToolbar.cpp index 7848c82c..8a359c41 100644 --- a/src/gui/sidebar/previews/base/SidebarToolbar.cpp +++ b/src/gui/sidebar/previews/base/SidebarToolbar.cpp @@ -119,6 +119,16 @@ void SidebarToolbar::btDeleteClicked(GtkToolButton* toolbutton, 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); diff --git a/src/gui/sidebar/previews/base/SidebarToolbar.h b/src/gui/sidebar/previews/base/SidebarToolbar.h index a7c4342d..bed5daf8 100644 --- a/src/gui/sidebar/previews/base/SidebarToolbar.h +++ b/src/gui/sidebar/previews/base/SidebarToolbar.h @@ -32,6 +32,8 @@ public: */ void setButtonEnabled(bool enableUp, bool enableDown, bool enableCopy, bool enableDelete, PageRef currentPage); + void setHidden(bool hidden); + private: XOJ_TYPE_ATTRIB; diff --git a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp index 3d0c6c71..1a71b453 100644 --- a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp +++ b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.cpp @@ -1,17 +1,21 @@ #include "SidebarPreviewLayers.h" - #include "SidebarPreviewLayerEntry.h" #include "control/Control.h" #include "control/PdfCache.h" +#include "control/layer/LayerController.h" #include SidebarPreviewLayers::SidebarPreviewLayers(Control* control, GladeGui* gui, SidebarToolbar* toolbar) : SidebarPreviewBase(control, gui, toolbar), - displayedPage(0) + lc(control->getLayerController()) { XOJ_INIT_TYPE(SidebarPreviewLayers); + + LayerCtrlListener::registerListener(lc); + + this->toolbar->setButtonEnabled(false, false, false, false, PageRef()); } SidebarPreviewLayers::~SidebarPreviewLayers() @@ -53,16 +57,12 @@ void SidebarPreviewLayers::updatePreviews() } this->previews.clear(); - Document* doc = this->getControl()->getDocument(); - - int len = doc->getPageCount(); - if (displayedPage < 0 || displayedPage >= len) + PageRef page = lc->getCurrentPage(); + if (!page.isValid()) { return; } - PageRef page = doc->getPage(displayedPage); - int layerCount = page->getLayerCount(); size_t index = 0; @@ -79,68 +79,56 @@ void SidebarPreviewLayers::updatePreviews() gtk_layout_put(GTK_LAYOUT(this->iconViewPreview), p->getWidget(), 0, 0); layout(); + updateSelectedLayer(); } -void SidebarPreviewLayers::pageSelected(int page) +void SidebarPreviewLayers::rebuildLayerMenu() { XOJ_CHECK_TYPE(SidebarPreviewLayers); - displayedPage = page; updatePreviews(); } -void SidebarPreviewLayers::pageSizeChanged(int page) +void SidebarPreviewLayers::layerVisibilityChanged() { XOJ_CHECK_TYPE(SidebarPreviewLayers); - - if (displayedPage == page) - { - updatePreviews(); - } + updateSelectedLayer(); } -void SidebarPreviewLayers::layerSelected(size_t layerIndex) +void SidebarPreviewLayers::updateSelectedLayer() { - XOJ_CHECK_TYPE(SidebarPreviewLayers); + size_t layerIndex = lc->getCurrentLayerId(); - if (this->selectedEntry != size_t_npos && this->selectedEntry < this->previews.size()) + if (this->selectedEntry == layerIndex) { - this->previews[this->selectedEntry]->setSelected(false); + return; } this->selectedEntry = layerIndex; + if (this->selectedEntry != size_t_npos && this->selectedEntry < this->previews.size()) { - SidebarPreviewBaseEntry* p = this->previews[this->selectedEntry]; - p->setSelected(true); - scrollToPreview(this); - - // TODO This needs also be implemented seperate for layer - this->toolbar->setButtonEnabled(layerIndex != 0 && this->previews.size() != 0, - layerIndex != this->previews.size() - 1 && this->previews.size() != 0, - true, this->previews.size() > 1, PageRef()); + this->previews[this->selectedEntry]->setSelected(false); } + +// if (this->selectedEntry != size_t_npos && this->selectedEntry < this->previews.size()) +// { +// SidebarPreviewBaseEntry* p = this->previews[this->selectedEntry]; +// p->setSelected(true); +// scrollToPreview(this); +// +// // TODO This needs also be implemented seperate for layer +// this->toolbar->setButtonEnabled(layerIndex != 0 && this->previews.size() != 0, +// layerIndex != this->previews.size() - 1 && this->previews.size() != 0, +// true, this->previews.size() > 1, PageRef()); +// } } -void SidebarPreviewLayers::pageChanged(int page) +void SidebarPreviewLayers::layerSelected(size_t layerIndex) { XOJ_CHECK_TYPE(SidebarPreviewLayers); - if (displayedPage == page) - { - printf("->current page\n"); - -// Document* doc = this->getControl()->getDocument(); -// PageRef page = doc->getPage(displayedPage); -// int layerCount = page->getLayerCount(); -// if (layerCount + 1 == this->previews.size()) -// { -// updatePreviews(); -// } - -// for (SidebarPreviewBaseEntry* p : this->previews) -// { -// p->repaint(); -// } - } + lc->switchToLay(layerIndex); + updateSelectedLayer(); } + diff --git a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h index fcb212ba..e3003912 100644 --- a/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h +++ b/src/gui/sidebar/previews/layer/SidebarPreviewLayers.h @@ -11,18 +11,22 @@ #pragma once +#include "control/layer/LayerCtrlListener.h" #include "gui/sidebar/previews/base/SidebarPreviewBase.h" #include -class SidebarPreviewLayers : public SidebarPreviewBase +class SidebarPreviewLayers : public SidebarPreviewBase, public LayerCtrlListener { public: SidebarPreviewLayers(Control* control, GladeGui* gui, SidebarToolbar* toolbar); virtual ~SidebarPreviewLayers(); public: + virtual void rebuildLayerMenu(); + virtual void layerVisibilityChanged(); +public: /** * @overwrite */ @@ -39,19 +43,19 @@ public: */ virtual void updatePreviews(); + /** + * Select a layer + */ void layerSelected(size_t layerIndex); -public: - // DocumentListener interface (only the part which is not handled by SidebarPreviewBase) - virtual void pageSizeChanged(int page); - virtual void pageChanged(int page); - virtual void pageSelected(int page); +protected: + void updateSelectedLayer(); private: XOJ_TYPE_ATTRIB; /** - * The layers of this page are displayed + * Layer Controller */ - int displayedPage; + LayerController* lc; };