Working on editable Toolbars

git-svn-id: https://xournal.svn.sourceforge.net/svnroot/xournal/trunk/xournalpp@76 9fe2bcd3-a095-4d8b-a836-9b85dc8d7627
presentation
andreasb123 15 years ago
parent efd8af6eef
commit a82d0800a6
  1. 4
      po/POTFILES.in
  2. 3
      src/Makefile.am
  3. 51
      src/Makefile.in
  4. 5
      src/control/Control.cpp
  5. 56
      src/gui/MainWindow.cpp
  6. 10
      src/gui/MainWindow.h
  7. 6
      src/gui/dialog/ImagesDialog.cpp
  8. 13
      src/gui/dialog/ImagesDialog.h
  9. 2
      src/gui/dialog/SettingsDialog.cpp
  10. 165
      src/gui/dialog/ToolbarDialog.cpp
  11. 46
      src/gui/dialog/ToolbarDialog.h
  12. 149
      src/gui/toolbarMenubar/ToolMenuHandler.cpp
  13. 44
      src/gui/toolbarMenubar/ToolMenuHandler.h
  14. 58
      src/gui/toolbarMenubar/model/ToolbarData.cpp
  15. 44
      src/gui/toolbarMenubar/model/ToolbarData.h
  16. 0
      src/gui/toolbarMenubar/model/ToolbarEntry.h
  17. 103
      src/gui/toolbarMenubar/model/ToolbarModel.cpp
  18. 41
      src/gui/toolbarMenubar/model/ToolbarModel.h
  19. 1
      ui/Makefile.am
  20. 1
      ui/Makefile.in
  21. 129
      ui/toolbar.glade

@ -9,6 +9,7 @@
[type: gettext/glade]ui/pagesize.glade
[type: gettext/glade]ui/pdfpages.glade
[type: gettext/glade]ui/settings.glade
[type: gettext/glade]ui/toolbar.glade
src/Xournalpp.cpp
src/util/OutputStream.cpp
src/util/Range.cpp
@ -48,6 +49,8 @@ src/gui/GladeSearchpath.cpp
src/gui/MainWindow.cpp
src/gui/sidebar/SidebarPreview.cpp
src/gui/sidebar/Sidebar.cpp
src/gui/toolbarMenubar/model/ToolbarData.cpp
src/gui/toolbarMenubar/model/ToolbarModel.cpp
src/gui/toolbarMenubar/AbstractItem.cpp
src/gui/toolbarMenubar/ColorToolItem.cpp
src/gui/toolbarMenubar/ToolButton.cpp
@ -74,6 +77,7 @@ src/gui/dialog/SettingsDialog.cpp
src/gui/dialog/AboutDialog.cpp
src/gui/dialog/ButtonConfigGui.cpp
src/gui/dialog/ExportDialog.cpp
src/gui/dialog/ToolbarDialog.cpp
src/gui/Shadow.cpp
src/control/LoadHandler.cpp
src/control/jobs/AutosaveJob.cpp

@ -59,12 +59,15 @@ xournalpp_SOURCES = \
gui/dialog/ButtonConfigGui.cpp \
gui/dialog/ExportDialog.cpp \
gui/dialog/FormatDialog.cpp \
gui/dialog/ToolbarDialog.cpp \
gui/dialog/ImagesDialog.cpp \
gui/dialog/PdfPagesDialog.cpp \
gui/dialog/SelectBackgroundColorDialog.cpp \
gui/dialog/SettingsDialog.cpp \
gui/sidebar/Sidebar.cpp \
gui/sidebar/SidebarPreview.cpp \
gui/toolbarMenubar/model/ToolbarModel.cpp \
gui/toolbarMenubar/model/ToolbarData.cpp \
gui/toolbarMenubar/AbstractItem.cpp \
gui/toolbarMenubar/AbstractToolItem.cpp \
gui/toolbarMenubar/ColorToolItem.cpp \

@ -91,11 +91,14 @@ am_xournalpp_OBJECTS = xournalpp-AutosaveJob.$(OBJEXT) \
xournalpp-ButtonConfigGui.$(OBJEXT) \
xournalpp-ExportDialog.$(OBJEXT) \
xournalpp-FormatDialog.$(OBJEXT) \
xournalpp-ToolbarDialog.$(OBJEXT) \
xournalpp-ImagesDialog.$(OBJEXT) \
xournalpp-PdfPagesDialog.$(OBJEXT) \
xournalpp-SelectBackgroundColorDialog.$(OBJEXT) \
xournalpp-SettingsDialog.$(OBJEXT) xournalpp-Sidebar.$(OBJEXT) \
xournalpp-SidebarPreview.$(OBJEXT) \
xournalpp-ToolbarModel.$(OBJEXT) \
xournalpp-ToolbarData.$(OBJEXT) \
xournalpp-AbstractItem.$(OBJEXT) \
xournalpp-AbstractToolItem.$(OBJEXT) \
xournalpp-ColorToolItem.$(OBJEXT) \
@ -373,12 +376,15 @@ xournalpp_SOURCES = \
gui/dialog/ButtonConfigGui.cpp \
gui/dialog/ExportDialog.cpp \
gui/dialog/FormatDialog.cpp \
gui/dialog/ToolbarDialog.cpp \
gui/dialog/ImagesDialog.cpp \
gui/dialog/PdfPagesDialog.cpp \
gui/dialog/SelectBackgroundColorDialog.cpp \
gui/dialog/SettingsDialog.cpp \
gui/sidebar/Sidebar.cpp \
gui/sidebar/SidebarPreview.cpp \
gui/toolbarMenubar/model/ToolbarModel.cpp \
gui/toolbarMenubar/model/ToolbarData.cpp \
gui/toolbarMenubar/AbstractItem.cpp \
gui/toolbarMenubar/AbstractToolItem.cpp \
gui/toolbarMenubar/ColorToolItem.cpp \
@ -677,6 +683,9 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-ToolPageSpinner.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-ToolSelectCombocontrol.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-ToolZoomSlider.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-ToolbarData.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-ToolbarDialog.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-ToolbarModel.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-UndoAction.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-UndoRedoHandler.Po@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xournalpp-UpdateRef.Po@am__quote@
@ -1474,6 +1483,20 @@ xournalpp-FormatDialog.obj: gui/dialog/FormatDialog.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-FormatDialog.obj `if test -f 'gui/dialog/FormatDialog.cpp'; then $(CYGPATH_W) 'gui/dialog/FormatDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialog/FormatDialog.cpp'; fi`
xournalpp-ToolbarDialog.o: gui/dialog/ToolbarDialog.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ToolbarDialog.o -MD -MP -MF $(DEPDIR)/xournalpp-ToolbarDialog.Tpo -c -o xournalpp-ToolbarDialog.o `test -f 'gui/dialog/ToolbarDialog.cpp' || echo '$(srcdir)/'`gui/dialog/ToolbarDialog.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ToolbarDialog.Tpo $(DEPDIR)/xournalpp-ToolbarDialog.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gui/dialog/ToolbarDialog.cpp' object='xournalpp-ToolbarDialog.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-ToolbarDialog.o `test -f 'gui/dialog/ToolbarDialog.cpp' || echo '$(srcdir)/'`gui/dialog/ToolbarDialog.cpp
xournalpp-ToolbarDialog.obj: gui/dialog/ToolbarDialog.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ToolbarDialog.obj -MD -MP -MF $(DEPDIR)/xournalpp-ToolbarDialog.Tpo -c -o xournalpp-ToolbarDialog.obj `if test -f 'gui/dialog/ToolbarDialog.cpp'; then $(CYGPATH_W) 'gui/dialog/ToolbarDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialog/ToolbarDialog.cpp'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ToolbarDialog.Tpo $(DEPDIR)/xournalpp-ToolbarDialog.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gui/dialog/ToolbarDialog.cpp' object='xournalpp-ToolbarDialog.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-ToolbarDialog.obj `if test -f 'gui/dialog/ToolbarDialog.cpp'; then $(CYGPATH_W) 'gui/dialog/ToolbarDialog.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/dialog/ToolbarDialog.cpp'; fi`
xournalpp-ImagesDialog.o: gui/dialog/ImagesDialog.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ImagesDialog.o -MD -MP -MF $(DEPDIR)/xournalpp-ImagesDialog.Tpo -c -o xournalpp-ImagesDialog.o `test -f 'gui/dialog/ImagesDialog.cpp' || echo '$(srcdir)/'`gui/dialog/ImagesDialog.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ImagesDialog.Tpo $(DEPDIR)/xournalpp-ImagesDialog.Po
@ -1558,6 +1581,34 @@ xournalpp-SidebarPreview.obj: gui/sidebar/SidebarPreview.cpp
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-SidebarPreview.obj `if test -f 'gui/sidebar/SidebarPreview.cpp'; then $(CYGPATH_W) 'gui/sidebar/SidebarPreview.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/sidebar/SidebarPreview.cpp'; fi`
xournalpp-ToolbarModel.o: gui/toolbarMenubar/model/ToolbarModel.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ToolbarModel.o -MD -MP -MF $(DEPDIR)/xournalpp-ToolbarModel.Tpo -c -o xournalpp-ToolbarModel.o `test -f 'gui/toolbarMenubar/model/ToolbarModel.cpp' || echo '$(srcdir)/'`gui/toolbarMenubar/model/ToolbarModel.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ToolbarModel.Tpo $(DEPDIR)/xournalpp-ToolbarModel.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gui/toolbarMenubar/model/ToolbarModel.cpp' object='xournalpp-ToolbarModel.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-ToolbarModel.o `test -f 'gui/toolbarMenubar/model/ToolbarModel.cpp' || echo '$(srcdir)/'`gui/toolbarMenubar/model/ToolbarModel.cpp
xournalpp-ToolbarModel.obj: gui/toolbarMenubar/model/ToolbarModel.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ToolbarModel.obj -MD -MP -MF $(DEPDIR)/xournalpp-ToolbarModel.Tpo -c -o xournalpp-ToolbarModel.obj `if test -f 'gui/toolbarMenubar/model/ToolbarModel.cpp'; then $(CYGPATH_W) 'gui/toolbarMenubar/model/ToolbarModel.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/toolbarMenubar/model/ToolbarModel.cpp'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ToolbarModel.Tpo $(DEPDIR)/xournalpp-ToolbarModel.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gui/toolbarMenubar/model/ToolbarModel.cpp' object='xournalpp-ToolbarModel.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-ToolbarModel.obj `if test -f 'gui/toolbarMenubar/model/ToolbarModel.cpp'; then $(CYGPATH_W) 'gui/toolbarMenubar/model/ToolbarModel.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/toolbarMenubar/model/ToolbarModel.cpp'; fi`
xournalpp-ToolbarData.o: gui/toolbarMenubar/model/ToolbarData.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ToolbarData.o -MD -MP -MF $(DEPDIR)/xournalpp-ToolbarData.Tpo -c -o xournalpp-ToolbarData.o `test -f 'gui/toolbarMenubar/model/ToolbarData.cpp' || echo '$(srcdir)/'`gui/toolbarMenubar/model/ToolbarData.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ToolbarData.Tpo $(DEPDIR)/xournalpp-ToolbarData.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gui/toolbarMenubar/model/ToolbarData.cpp' object='xournalpp-ToolbarData.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-ToolbarData.o `test -f 'gui/toolbarMenubar/model/ToolbarData.cpp' || echo '$(srcdir)/'`gui/toolbarMenubar/model/ToolbarData.cpp
xournalpp-ToolbarData.obj: gui/toolbarMenubar/model/ToolbarData.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-ToolbarData.obj -MD -MP -MF $(DEPDIR)/xournalpp-ToolbarData.Tpo -c -o xournalpp-ToolbarData.obj `if test -f 'gui/toolbarMenubar/model/ToolbarData.cpp'; then $(CYGPATH_W) 'gui/toolbarMenubar/model/ToolbarData.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/toolbarMenubar/model/ToolbarData.cpp'; fi`
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-ToolbarData.Tpo $(DEPDIR)/xournalpp-ToolbarData.Po
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='gui/toolbarMenubar/model/ToolbarData.cpp' object='xournalpp-ToolbarData.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCXX_FALSE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -c -o xournalpp-ToolbarData.obj `if test -f 'gui/toolbarMenubar/model/ToolbarData.cpp'; then $(CYGPATH_W) 'gui/toolbarMenubar/model/ToolbarData.cpp'; else $(CYGPATH_W) '$(srcdir)/gui/toolbarMenubar/model/ToolbarData.cpp'; fi`
xournalpp-AbstractItem.o: gui/toolbarMenubar/AbstractItem.cpp
@am__fastdepCXX_TRUE@ $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(xournalpp_CXXFLAGS) $(CXXFLAGS) -MT xournalpp-AbstractItem.o -MD -MP -MF $(DEPDIR)/xournalpp-AbstractItem.Tpo -c -o xournalpp-AbstractItem.o `test -f 'gui/toolbarMenubar/AbstractItem.cpp' || echo '$(srcdir)/'`gui/toolbarMenubar/AbstractItem.cpp
@am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/xournalpp-AbstractItem.Tpo $(DEPDIR)/xournalpp-AbstractItem.Po

@ -6,6 +6,7 @@
#include "../gui/dialog/ImagesDialog.h"
#include "../gui/dialog/FormatDialog.h"
#include "../gui/dialog/SelectBackgroundColorDialog.h"
#include "../gui/dialog/ToolbarDialog.h"
#include "../cfg.h"
#include "LoadHandler.h"
#include "PrintHandler.h"
@ -764,7 +765,11 @@ void Control::firePageSelected(int page) {
}
void Control::customizeToolbars() {
ToolbarDialog dlg(this->gladeSearchPath, win->getToolbarModel());
dlg.show();
// TODO: Debug
//win->updateToolbarMenu();
}
void Control::enableFullscreen(bool enabled, bool presentation) {

@ -3,6 +3,8 @@
#include "../cfg.h"
#include "toolbarMenubar/ToolMenuHandler.h"
#include "../gui/GladeSearchpath.h"
#include "toolbarMenubar/model/ToolbarData.h"
#include "toolbarMenubar/model/ToolbarModel.h"
#include <config.h>
#include <glib/gi18n-lib.h>
@ -22,7 +24,8 @@ MainWindow::MainWindow(GladeSearchpath * gladeSearchPath, Control * control) :
this->tbBottom1 = get("tbBottom1");
this->tbBottom2 = get("tbBottom2");
this->maximized = false;
this->toolbarMenuitem = NULL;
this->toolbarMenuData = NULL;
this->toolbarMenuitems = NULL;
this->xournal = new XournalWidget(get("scrolledwindowMain"), control);
@ -37,7 +40,10 @@ MainWindow::MainWindow(GladeSearchpath * gladeSearchPath, Control * control) :
this->toolbar = new ToolMenuHandler(this->control, this->control->getZoomControl(), this, this->control->getToolHandler());
char * file = gladeSearchPath->findFile(NULL, "toolbar.ini");
if (!this->toolbar->parse(file, true)) {
ToolbarModel * tbModel = this->toolbar->getModel();
if (!tbModel->parse(file, true)) {
GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(this->window), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
_("Could not parse general toolbar.ini file: %s\nNo Toolbars will be available"), file);
@ -50,7 +56,7 @@ MainWindow::MainWindow(GladeSearchpath * gladeSearchPath, Control * control) :
file = g_build_filename(g_get_home_dir(), G_DIR_SEPARATOR_S, CONFIG_DIR, G_DIR_SEPARATOR_S, TOOLBAR_CONFIG, NULL);
if (g_file_test(file, G_FILE_TEST_EXISTS)) {
if (!this->toolbar->parse(file, false)) {
if (!tbModel->parse(file, false)) {
GtkWidget* dlg = gtk_message_dialog_new(GTK_WINDOW(this->window), GTK_DIALOG_MODAL, GTK_MESSAGE_ERROR, GTK_BUTTONS_OK,
_("Could not parse custom toolbar.ini file: %s\nToolbars will not be available"), file);
@ -61,7 +67,7 @@ MainWindow::MainWindow(GladeSearchpath * gladeSearchPath, Control * control) :
}
g_free(file);
initToolbar();
initToolbarAndMenu();
g_signal_connect(getSpinPageNo(), "value-changed", G_CALLBACK(pageNrSpinChangedCallback), this);
@ -87,18 +93,21 @@ public:
this->d = d;
}
MainWindow *win;
MainWindow * win;
GtkWidget * item;
ToolbarData * d;
};
MainWindow::~MainWindow() {
for (GList * l = this->toolbarMenuitem; l != NULL; l = l->next) {
for (GList * l = this->toolbarMenuData; l != NULL; l = l->next) {
MenuSelectToolbarData * data = (MenuSelectToolbarData *) l->data;
delete data;
}
g_list_free(this->toolbarMenuitem);
g_list_free(this->toolbarMenuData);
this->toolbarMenuData = NULL;
g_list_free(this->toolbarMenuitems);
this->toolbarMenuitems = NULL;
}
void MainWindow::viewShowSidebar(GtkCheckMenuItem * checkmenuitem, MainWindow * win) {
@ -250,7 +259,7 @@ void MainWindow::toolbarSelected(ToolbarData * d) {
void MainWindow::setControlTmpDisabled(bool disabled) {
toolbar->setTmpDisabled(disabled);
for (GList * l = this->toolbarMenuitem; l != NULL; l = l->next) {
for (GList * l = this->toolbarMenuData; l != NULL; l = l->next) {
MenuSelectToolbarData * data = (MenuSelectToolbarData *) l->data;
gtk_widget_set_sensitive(data->item, !disabled);
}
@ -262,11 +271,28 @@ void MainWindow::setControlTmpDisabled(bool disabled) {
gtk_widget_set_sensitive(w, !disabled);
}
void MainWindow::initToolbar() {
void MainWindow::updateToolbarMenu() {
for (GList * l = this->toolbarMenuitems; l != NULL; l = l->next) {
GtkWidget * w = GTK_WIDGET(l->data);
gtk_widget_destroy(w);
}
for (GList * l = this->toolbarMenuData; l != NULL; l = l->next) {
MenuSelectToolbarData * data = (MenuSelectToolbarData *) l->data;
delete data;
}
g_slist_free(this->toolbarGroup);
this->toolbarGroup = NULL;
initToolbarAndMenu();
}
void MainWindow::initToolbarAndMenu() {
GtkMenuShell * menubar = GTK_MENU_SHELL(get("menuViewToolbar"));
g_return_if_fail(menubar != NULL);
ListIterator<ToolbarData *> it = this->toolbar->iterator();
ListIterator<ToolbarData *> it = this->toolbar->getModel()->iterator();
GtkWidget * item = NULL;
GtkWidget * selectedItem = NULL;
ToolbarData * selectedData = NULL;
@ -291,7 +317,7 @@ void MainWindow::initToolbar() {
MenuSelectToolbarData * data = new MenuSelectToolbarData(this, item, d);
this->toolbarMenuitem = g_list_append(this->toolbarMenuitem, data);
this->toolbarMenuData = g_list_append(this->toolbarMenuData, data);
if (selectedId == d->getId()) {
selectedData = d;
@ -308,10 +334,12 @@ void MainWindow::initToolbar() {
gtk_menu_shell_insert(menubar, separator, menuPos++);
predefined = true;
this->toolbarMenuitems = g_list_append(this->toolbarMenuitems, separator);
}
gtk_menu_shell_insert(menubar, item, menuPos++);
gtk_widget_unrealize(item);
this->toolbarMenuitems = g_list_append(this->toolbarMenuitems, item);
}
if (selectedData) {
@ -401,3 +429,7 @@ void MainWindow::setRedoDescription(String description) {
GtkWidget * MainWindow::getSpinPageNo() {
return toolbar->getPageSpinner();
}
ToolbarModel * MainWindow::getToolbarModel() {
return this->toolbar->getModel();
}

@ -21,6 +21,7 @@ class Control;
class MainWindow;
class ToolMenuHandler;
class ToolbarData;
class ToolbarModel;
class MainWindow: public GladeGui {
public:
@ -56,11 +57,14 @@ public:
void updateLayerCombobox();
GtkWidget * getSpinPageNo();
ToolbarModel * getToolbarModel();
void setControlTmpDisabled(bool disabled);
void updateToolbarMenu();
private:
void initToolbar();
void initToolbarAndMenu();
static void pageNrSpinChangedCallback(GtkSpinButton * spinbutton, MainWindow * win);
static void buttonCloseSidebarClicked(GtkButton * button, MainWindow * win);
@ -87,10 +91,12 @@ private:
// Toolbars
ToolMenuHandler * toolbar;
GSList * toolbarGroup;
GList * toolbarMenuitem;
GList * toolbarMenuData;
ToolbarData * selectedToolbar;
bool toolbarIntialized;
GList * toolbarMenuitems;
bool maximized;
GtkWidget * tbTop1;

@ -2,6 +2,8 @@
#include "../Shadow.h"
#include <math.h>
#include "../../util/Util.h"
#include "../../model/Document.h"
#include "../../control/settings/Settings.h"
#include <config.h>
#include <glib/gi18n-lib.h>
@ -266,11 +268,11 @@ void ImagesDialog::updateOkButton() {
gtk_widget_set_sensitive(get("buttonOk"), p && gtk_widget_get_visible(p->getWidget()));
}
void ImagesDialog::okButtonCallback(GtkButton *button, ImagesDialog * dlg) {
void ImagesDialog::okButtonCallback(GtkButton * button, ImagesDialog * dlg) {
dlg->selectedPage = dlg->selected;
}
void ImagesDialog::filechooserButtonCallback(GtkButton *button, ImagesDialog * dlg) {
void ImagesDialog::filechooserButtonCallback(GtkButton * button, ImagesDialog * dlg) {
dlg->selectedPage = -2;
gtk_widget_hide(dlg->window);
}

@ -8,12 +8,15 @@
*
* @license GPL
*/
#ifndef __IMAGESDIALOG_H__
#define __IMAGESDIALOG_H__
#include "../GladeGui.h"
#include "../../model/Document.h"
#include "../../control/settings/Settings.h"
class Document;
class Settings;
class BackgroundImage;
class ImagesDialog: public GladeGui {
public:
@ -34,9 +37,9 @@ private:
void layout();
void updateOkButton();
static void sizeAllocate(GtkWidget *widget, GtkRequisition *requisition, ImagesDialog * dlg);
static void okButtonCallback(GtkButton *button, ImagesDialog * dlg);
static void filechooserButtonCallback(GtkButton *button, ImagesDialog * dlg);
static void sizeAllocate(GtkWidget * widget, GtkRequisition * requisition, ImagesDialog * dlg);
static void okButtonCallback(GtkButton * button, ImagesDialog * dlg);
static void filechooserButtonCallback(GtkButton * button, ImagesDialog * dlg);
private:
bool backgroundInitialized;

@ -18,8 +18,6 @@
#include "../../util/Util.h"
#include <string.h>
// TODO: Zoom kallibrieren einheitsangabe
SettingsDialog::SettingsDialog(GladeSearchpath * gladeSearchPath, Settings * settings) :
GladeGui(gladeSearchPath, "settings.glade", "settingsDialog") {
this->settings = settings;

@ -0,0 +1,165 @@
#include "ToolbarDialog.h"
#include "../toolbarMenubar/model/ToolbarData.h"
#include "../toolbarMenubar/model/ToolbarModel.h"
#include <config.h>
#include <glib/gi18n-lib.h>
enum {
COLUMN_STRING, COLUMN_BOLD, COLUMN_POINTER, COLUMN_EDITABLE, N_COLUMNS
};
ToolbarDialog::ToolbarDialog(GladeSearchpath * gladeSearchPath, ToolbarModel * model) :
GladeGui(gladeSearchPath, "toolbar.glade", "DialogEditToolbar") {
this->tbModel = model;
this->selected = NULL;
GtkTreeIter iter;
this->model = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING, G_TYPE_INT, G_TYPE_POINTER, G_TYPE_BOOLEAN);
gtk_list_store_append(this->model, &iter);
gtk_list_store_set(this->model, &iter, COLUMN_STRING, _("Predefined"), COLUMN_BOLD, PANGO_WEIGHT_BOLD, COLUMN_POINTER, NULL, COLUMN_EDITABLE, false, -1);
ListIterator<ToolbarData *> it = model->iterator();
while (it.hasNext()) {
ToolbarData * data = it.next();
if (data->isPredefined()) {
gtk_list_store_append(this->model, &iter);
gtk_list_store_set(this->model, &iter, COLUMN_STRING, data->getName().c_str(), COLUMN_BOLD, PANGO_WEIGHT_NORMAL, COLUMN_POINTER, data,
COLUMN_EDITABLE, false, -1);
}
}
gtk_list_store_append(this->model, &iter);
gtk_list_store_set(this->model, &iter, COLUMN_STRING, _("Customized"), COLUMN_BOLD, PANGO_WEIGHT_BOLD, COLUMN_POINTER, NULL, COLUMN_EDITABLE, false, -1);
ListIterator<ToolbarData *> it2 = model->iterator();
while (it2.hasNext()) {
ToolbarData * data = it2.next();
if (!data->isPredefined()) {
gtk_list_store_append(this->model, &iter);
gtk_list_store_set(this->model, &iter, COLUMN_STRING, data->getName().c_str(), COLUMN_BOLD, PANGO_WEIGHT_NORMAL, COLUMN_POINTER, data,
COLUMN_EDITABLE, true, -1);
}
}
GtkWidget * tree = get("toolbarList");
gtk_tree_view_set_model(GTK_TREE_VIEW(tree), GTK_TREE_MODEL(this->model));
GtkCellRenderer * renderer = gtk_cell_renderer_text_new();
GtkTreeViewColumn * column = gtk_tree_view_column_new_with_attributes(_("Toolbars"), renderer, "text", COLUMN_STRING, "weight", COLUMN_BOLD, "editable",
COLUMN_EDITABLE, NULL);
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
//gtk_tree_view_set_column_drag_function
GtkTreeSelection * select = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE);
g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK (treeSelectionChangedCallback), this);
g_signal_connect(renderer, "edited", (GCallback) treeCellEditedCallback, this);
g_signal_connect(get("btNew"), "clicked", G_CALLBACK(buttonNewCallback), this);
g_signal_connect(get("btDelete"), "clicked", G_CALLBACK(buttonDeleteCallback), this);
g_signal_connect(get("btCopy"), "clicked", G_CALLBACK(buttonCopyCallback), this);
entrySelected(NULL);
}
ToolbarDialog::~ToolbarDialog() {
g_object_unref(this->model);
this->tbModel = NULL;
}
void ToolbarDialog::buttonNewCallback(GtkButton * button, ToolbarDialog * dlg) {
ToolbarData * data = new ToolbarData(false);
data->setName(_("New"));
dlg->addToolbarData(data);
}
void ToolbarDialog::buttonDeleteCallback(GtkButton * button, ToolbarDialog * dlg) {
if (dlg->selected) {
dlg->tbModel->remove(dlg->selected);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dlg->model), &iter)) {
do {
ToolbarData * data = NULL;
gtk_tree_model_get(GTK_TREE_MODEL(dlg->model), &iter, COLUMN_POINTER, &data, -1);
if (data == dlg->selected) {
gtk_list_store_remove(dlg->model, &iter);
break;
}
} while (gtk_tree_model_iter_next(GTK_TREE_MODEL(dlg->model), &iter));
}
dlg->entrySelected(NULL);
}
}
void ToolbarDialog::buttonCopyCallback(GtkButton * button, ToolbarDialog * dlg) {
if (dlg->selected) {
ToolbarData * data = new ToolbarData(*dlg->selected);
dlg->addToolbarData(data);
}
}
void ToolbarDialog::addToolbarData(ToolbarData * data) {
this->tbModel->add(data);
GtkTreeIter iter;
gtk_list_store_append(this->model, &iter);
gtk_list_store_set(this->model, &iter, COLUMN_STRING, data->getName().c_str(), COLUMN_BOLD, PANGO_WEIGHT_NORMAL, COLUMN_POINTER, data, COLUMN_EDITABLE,
true, -1);
GtkWidget * tree = get("toolbarList");
GtkTreePath * path = gtk_tree_model_get_path(GTK_TREE_MODEL(this->model), &iter);
GtkTreeViewColumn * column = gtk_tree_view_get_column(GTK_TREE_VIEW(tree), 0);
gtk_tree_view_set_cursor(GTK_TREE_VIEW(tree), path, column, true);
}
void ToolbarDialog::treeCellEditedCallback(GtkCellRendererText * renderer, gchar * pathString, gchar * newText, ToolbarDialog * dlg) {
GtkTreeIter iter;
ToolbarData * data = NULL;
gtk_tree_model_get_iter_from_string(GTK_TREE_MODEL(dlg->model), &iter, pathString);
gtk_tree_model_get(GTK_TREE_MODEL(dlg->model), &iter, COLUMN_POINTER, &data, -1);
if (data) {
gtk_list_store_set(dlg->model, &iter, COLUMN_STRING, newText, -1);
data->setName(newText);
}
}
void ToolbarDialog::entrySelected(ToolbarData * data) {
GtkWidget * btCopy = get("btCopy");
GtkWidget * btDelete = get("btDelete");
if (data == NULL) {
gtk_widget_set_sensitive(btCopy, false);
gtk_widget_set_sensitive(btDelete, false);
} else {
gtk_widget_set_sensitive(btCopy, true);
gtk_widget_set_sensitive(btDelete, !data->isPredefined());
}
this->selected = data;
}
void ToolbarDialog::treeSelectionChangedCallback(GtkTreeSelection * selection, ToolbarDialog * dlg) {
GtkTreeIter iter;
GtkTreeModel * model = NULL;
ToolbarData * data = NULL;
if (gtk_tree_selection_get_selected(selection, &model, &iter)) {
gtk_tree_model_get(model, &iter, COLUMN_POINTER, &data, -1);
dlg->entrySelected(data);
}
}
void ToolbarDialog::show() {
gtk_dialog_run(GTK_DIALOG(this->window));
gtk_widget_hide(this->window);
}

@ -0,0 +1,46 @@
/*
* Xournal++
*
* Toolbar edit dialog
*
* @author Xournal Team
* http://xournal.sf.net
*
* @license GPL
*/
#ifndef __TOOLBARDIALOG_H__
#define __TOOLBARDIALOG_H__
#include "../GladeGui.h"
class ToolbarModel;
class ToolbarData;
class ToolbarDialog: public GladeGui {
public:
ToolbarDialog(GladeSearchpath * gladeSearchPath, ToolbarModel * model);
virtual ~ToolbarDialog();
public:
void show();
private:
static void treeSelectionChangedCallback(GtkTreeSelection * selection, ToolbarDialog * dlg);
static void treeCellEditedCallback(GtkCellRendererText * renderer, gchar * pathString, gchar * newText, ToolbarDialog * dlg);
static void buttonNewCallback(GtkButton * button, ToolbarDialog * dlg);
static void buttonDeleteCallback(GtkButton * button, ToolbarDialog * dlg);
static void buttonCopyCallback(GtkButton * button, ToolbarDialog * dlg);
void addToolbarData(ToolbarData * data);
void entrySelected(ToolbarData * data);
private:
ToolbarModel * tbModel;
GtkListStore * model;
ToolbarData * selected;
};
#endif /* __TOOLBARDIALOG_H__ */

@ -29,60 +29,10 @@
#include "ToolZoomSlider.h"
#include "ToolPageLayer.h"
ToolbarData::ToolbarData(bool predefined) {
this->predefined = predefined;
}
String ToolbarData::getName() {
return this->name;
}
String ToolbarData::getId() {
return this->id;
}
bool ToolbarData::isPredefined() {
return this->predefined;
}
void ToolbarData::load(GKeyFile * config, const char * group) {
gsize length = 0;
gchar ** keys = g_key_file_get_keys(config, group, &length, NULL);
if (keys == NULL) {
return;
}
gchar * name = g_key_file_get_locale_string(config, group, "name", NULL, NULL);
if (name != NULL) {
this->name = name;
g_free(name);
}
for (gsize i = 0; i < length; i++) {
if (strcmp(keys[i], "name") == 0 || strncmp(keys[i], "name[", 5) == 0) {
continue;
}
ToolbarEntry e;
gsize keyLen = 0;
e.name = keys[i];
gchar ** list = g_key_file_get_string_list(config, group, keys[i], &keyLen, NULL);
for (gsize x = 0; x < keyLen; x++) {
String s = list[x];
e.entries.push_back(s.trim());
}
contents.push_back(e);
g_strfreev(list);
}
g_strfreev(keys);
}
#include "model/ToolbarModel.h"
#include "model/ToolbarData.h"
ToolMenuHandler::ToolMenuHandler(ActionHandler * listener, ZoomControl * zoom, GladeGui * gui, ToolHandler * toolHandler) {
this->toolbars = NULL;
this->toolItems = NULL;
this->toolbarColorItems = NULL;
this->menuItems = NULL;
@ -94,97 +44,14 @@ ToolMenuHandler::ToolMenuHandler(ActionHandler * listener, ZoomControl * zoom, G
this->redoButton = NULL;
this->toolPageSpinner = NULL;
this->toolPageLayer = NULL;
this->colorNameTable = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
this->tbModel = new ToolbarModel();
initToolItems();
}
ToolMenuHandler::~ToolMenuHandler() {
for (GList * l = toolbars; l != NULL; l = l->next) {
delete (ToolbarData*) l->data;
}
g_list_free(this->toolbars);
this->toolbars = NULL;
g_hash_table_destroy(this->colorNameTable);
this->colorNameTable = NULL;
}
void ToolMenuHandler::parseGroup(GKeyFile * config, const char * group, bool predefined) {
ToolbarData * data = new ToolbarData(predefined);
String name;
if (predefined) {
name = "predef_";
} else {
name = "custom_";
}
data->name = name;
data->id = group;
data->load(config, group);
this->toolbars = g_list_append(this->toolbars, data);
}
bool ToolMenuHandler::parse(const char * file, bool predefined) {
GKeyFile * config = g_key_file_new();
g_key_file_set_list_separator(config, ',');
if (!g_key_file_load_from_file(config, file, G_KEY_FILE_NONE, NULL)) {
g_key_file_free(config);
return false;
}
gsize lenght = 0;
gchar ** groups = g_key_file_get_groups(config, &lenght);
for (gsize i = 0; i < lenght; i++) {
if (groups[i][0] == '_') {
if (strcmp("_ColorNames", groups[i]) == 0) {
parseColors(config, groups[i]);
}
continue;
}
parseGroup(config, groups[i], predefined);
}
g_strfreev(groups);
g_key_file_free(config);
return true;
}
void ToolMenuHandler::parseColors(GKeyFile * config, const char * group) {
gsize length = 0;
gchar ** keys = g_key_file_get_keys(config, group, &length, NULL);
if (keys == NULL) {
return;
}
for (gsize i = 0; i < length; i++) {
if (strstr(keys[i], "[")) {
// skip localized keys
continue;
}
char * name = g_key_file_get_locale_string(config, group, keys[i], NULL, NULL);
g_hash_table_insert(this->colorNameTable, g_strdup(keys[i]), name);
}
g_strfreev(keys);
}
const char * ToolMenuHandler::getColorName(const char * color) {
const char * name = (char *) g_hash_table_lookup(this->colorNameTable, color);
return name;
}
ListIterator<ToolbarData *> ToolMenuHandler::iterator() {
return ListIterator<ToolbarData *> (this->toolbars);
delete this->tbModel;
this->tbModel = NULL;
}
void ToolMenuHandler::freeToolbar() {
@ -259,7 +126,7 @@ void ToolMenuHandler::load(ToolbarData * d, GtkWidget * toolbar, const char * to
color = color.substring(2);
gint c = g_ascii_strtoll(color.c_str(), NULL, 16);
const char * colorName = getColorName(color.c_str());
const char * colorName = this->tbModel->getColorName(color.c_str());
String name;
if (colorName == NULL) {
g_warning("No color name in toolbar.ini for %s defined!", color.c_str());
@ -600,3 +467,7 @@ void ToolMenuHandler::setLayerCount(int count, int selected) {
toolPageLayer->setLayerCount(count, selected);
}
ToolbarModel * ToolMenuHandler::getModel() {
return this->tbModel;
}

@ -14,42 +14,21 @@
#include <gtk/gtk.h>
#include "../../util/ListIterator.h"
#include "../../control/Actions.h"
#include "../../control/ZoomControl.h"
#include "../../util/String.h"
#include "../GladeGui.h"
#include <vector>
#include "ToolbarEntry.h"
#include "../../control/ToolHandler.h"
class ToolbarData {
public:
ToolbarData(bool predefined);
public:
String getName();
String getId();
void load(GKeyFile * config, const char * group);
bool isPredefined();
private:
String id;
String name;
std::vector<ToolbarEntry> contents;
bool predefined;
friend class ToolMenuHandler;
};
class AbstractToolItem;
class ToolButton;
class ToolPageSpinner;
class ToolPageLayer;
class FontButton;
class ToolbarData;
class ZoomControl;
class ToolHandler;
class XojFont;
class GladeGui;
class ToolbarModel;
class ToolMenuHandler {
public:
@ -57,9 +36,6 @@ public:
virtual ~ToolMenuHandler();
public:
bool parse(const char * file, bool predefined);
ListIterator<ToolbarData *> iterator();
void unloadToolbar(GtkWidget * tBunload);
void freeToolbar();
@ -86,18 +62,14 @@ public:
void setTmpDisabled(bool disabled);
const char * getColorName(const char * color);
ToolbarModel * getModel();
private:
void addToolItem(AbstractToolItem * it);
void parseGroup(GKeyFile * config, const char * group, bool predefined);
void parseColors(GKeyFile * config, const char * group);
void initEraserToolItem();
private:
GList * toolbars;
GList * toolbarColorItems;
GList * toolItems;
@ -115,7 +87,7 @@ private:
GladeGui * gui;
ToolHandler * toolHandler;
GHashTable * colorNameTable;
ToolbarModel * tbModel;
};
#endif /* EDITABLETOOLBAR_H_ */

@ -0,0 +1,58 @@
#include "ToolbarData.h"
#include <string.h>
ToolbarData::ToolbarData(bool predefined) {
this->predefined = predefined;
}
String ToolbarData::getName() {
return this->name;
}
void ToolbarData::setName(String name) {
this->name = name;
}
String ToolbarData::getId() {
return this->id;
}
bool ToolbarData::isPredefined() {
return this->predefined;
}
void ToolbarData::load(GKeyFile * config, const char * group) {
gsize length = 0;
gchar ** keys = g_key_file_get_keys(config, group, &length, NULL);
if (keys == NULL) {
return;
}
gchar * name = g_key_file_get_locale_string(config, group, "name", NULL, NULL);
if (name != NULL) {
this->name = name;
g_free(name);
}
for (gsize i = 0; i < length; i++) {
if (strcmp(keys[i], "name") == 0 || strncmp(keys[i], "name[", 5) == 0) {
continue;
}
ToolbarEntry e;
gsize keyLen = 0;
e.name = keys[i];
gchar ** list = g_key_file_get_string_list(config, group, keys[i], &keyLen, NULL);
for (gsize x = 0; x < keyLen; x++) {
String s = list[x];
e.entries.push_back(s.trim());
}
contents.push_back(e);
g_strfreev(list);
}
g_strfreev(keys);
}

@ -0,0 +1,44 @@
/*
* Xournal++
*
* Toolbar definitions model
*
* @author Xournal Team
* http://xournal.sf.net
*
* @license GPL
*/
#ifndef __TOOLBARDATA_H__
#define __TOOLBARDATA_H__
#include <glib.h>
#include "../../../util/String.h"
#include <vector>
#include "ToolbarEntry.h"
class ToolbarData {
public:
ToolbarData(bool predefined);
public:
String getName();
void setName(String name);
String getId();
void load(GKeyFile * config, const char * group);
bool isPredefined();
private:
String id;
String name;
std::vector<ToolbarEntry> contents;
bool predefined;
friend class ToolbarModel;
friend class ToolMenuHandler;
};
#endif /* __TOOLBARDATA_H__ */

@ -0,0 +1,103 @@
#include "ToolbarModel.h"
#include "ToolbarData.h"
#include <string.h>
ToolbarModel::ToolbarModel() {
this->toolbars = NULL;
this->colorNameTable = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free);
}
ToolbarModel::~ToolbarModel() {
for (GList * l = this->toolbars; l != NULL; l = l->next) {
delete (ToolbarData *) l->data;
}
g_list_free(this->toolbars);
this->toolbars = NULL;
g_hash_table_destroy(this->colorNameTable);
this->colorNameTable = NULL;
}
ListIterator<ToolbarData *> ToolbarModel::iterator() {
return ListIterator<ToolbarData *> (this->toolbars);
}
void ToolbarModel::parseGroup(GKeyFile * config, const char * group, bool predefined) {
ToolbarData * data = new ToolbarData(predefined);
String name;
if (predefined) {
name = "predef_";
} else {
name = "custom_";
}
data->name = name;
data->id = group;
data->load(config, group);
add(data);
}
void ToolbarModel::remove(ToolbarData * data) {
this->toolbars = g_list_remove(this->toolbars, data);
}
void ToolbarModel::add(ToolbarData * data) {
this->toolbars = g_list_append(this->toolbars, data);
}
const char * ToolbarModel::getColorName(const char * color) {
const char * name = (char *) g_hash_table_lookup(this->colorNameTable, color);
return name;
}
bool ToolbarModel::parse(const char * file, bool predefined) {
GKeyFile * config = g_key_file_new();
g_key_file_set_list_separator(config, ',');
if (!g_key_file_load_from_file(config, file, G_KEY_FILE_NONE, NULL)) {
g_key_file_free(config);
return false;
}
gsize lenght = 0;
gchar ** groups = g_key_file_get_groups(config, &lenght);
for (gsize i = 0; i < lenght; i++) {
if (groups[i][0] == '_') {
if (strcmp("_ColorNames", groups[i]) == 0) {
parseColors(config, groups[i]);
}
continue;
}
parseGroup(config, groups[i], predefined);
}
g_strfreev(groups);
g_key_file_free(config);
return true;
}
void ToolbarModel::parseColors(GKeyFile * config, const char * group) {
gsize length = 0;
gchar ** keys = g_key_file_get_keys(config, group, &length, NULL);
if (keys == NULL) {
return;
}
for (gsize i = 0; i < length; i++) {
if (strstr(keys[i], "[")) {
// skip localized keys
continue;
}
char * name = g_key_file_get_locale_string(config, group, keys[i], NULL, NULL);
g_hash_table_insert(this->colorNameTable, g_strdup(keys[i]), name);
}
g_strfreev(keys);
}

@ -0,0 +1,41 @@
/*
* Xournal++
*
* Toolbar definitions model
*
* @author Xournal Team
* http://xournal.sf.net
*
* @license GPL
*/
#ifndef __TOOLBARMODEL_H__
#define __TOOLBARMODEL_H__
#include <glib.h>
#include "../../../util/ListIterator.h"
class ToolbarData;
class ToolbarModel {
public:
ToolbarModel();
virtual ~ToolbarModel();
public:
ListIterator<ToolbarData *> iterator();
bool parse(const char * file, bool predefined);
const char * getColorName(const char * color);
void add(ToolbarData * data);
void remove(ToolbarData * data);
private:
void parseGroup(GKeyFile * config, const char * group, bool predefined);
void parseColors(GKeyFile * config, const char * group);
private:
GList * toolbars;
GHashTable * colorNameTable;
};
#endif /* __TOOLBARMODEL_H__ */

@ -10,6 +10,7 @@ ui_DATA = \
pagesize.glade \
pdfpages.glade \
settings.glade \
toolbar.glade \
toolbar.ini
EXTRA_DIST = ${ui_DATA}

@ -253,6 +253,7 @@ ui_DATA = \
pagesize.glade \
pdfpages.glade \
settings.glade \
toolbar.glade \
toolbar.ini
EXTRA_DIST = ${ui_DATA}

@ -0,0 +1,129 @@
<?xml version="1.0"?>
<glade-interface>
<!-- interface-requires gtk+ 2.16 -->
<!-- interface-naming-policy project-wide -->
<widget class="GtkDialog" id="DialogEditToolbar">
<property name="border_width">5</property>
<property name="title" translatable="yes">Edit Toolbar</property>
<property name="icon">pixmaps/xournalpp.svg</property>
<property name="type_hint">normal</property>
<property name="has_separator">False</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<property name="spacing">2</property>
<child>
<widget class="GtkVBox" id="vbox1">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<widget class="GtkHBox" id="hbox1">
<property name="visible">True</property>
<child>
<widget class="GtkTreeView" id="toolbarList">
<property name="visible">True</property>
<property name="can_focus">True</property>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkVBox" id="vbox2">
<property name="visible">True</property>
<property name="orientation">vertical</property>
<child>
<widget class="GtkButton" id="btNew">
<property name="label">gtk-new</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">2</property>
<property name="position">0</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="btDelete">
<property name="label">gtk-delete</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">3</property>
<property name="position">1</property>
</packing>
</child>
<child>
<widget class="GtkButton" id="btCopy">
<property name="label">gtk-copy</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">2</property>
<property name="position">2</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="padding">5</property>
<property name="position">1</property>
</packing>
</child>
</widget>
<packing>
<property name="position">0</property>
</packing>
</child>
<child>
<placeholder/>
</child>
<child>
<placeholder/>
</child>
</widget>
<packing>
<property name="position">1</property>
</packing>
</child>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area1">
<property name="visible">True</property>
<property name="layout_style">end</property>
<child>
<widget class="GtkButton" id="button4">
<property name="label">gtk-close</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="use_stock">True</property>
</widget>
<packing>
<property name="expand">False</property>
<property name="fill">False</property>
<property name="position">0</property>
</packing>
</child>
</widget>
<packing>
<property name="expand">False</property>
<property name="pack_type">end</property>
<property name="position">0</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>
Loading…
Cancel
Save