Merge pull request #828 from andreasb242/master

Toolbar handling
presentation
andreasb242 7 years ago committed by GitHub
commit 71e74b996d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
  1. 33
      src/control/Control.cpp
  2. 89
      src/gui/dialog/ToolbarManageDialog.cpp
  3. 6
      src/gui/dialog/ToolbarManageDialog.h
  4. 15
      src/gui/toolbarMenubar/model/ToolbarData.cpp
  5. 2
      src/gui/toolbarMenubar/model/ToolbarData.h
  6. 2
      src/gui/toolbarMenubar/model/ToolbarEntry.h
  7. 1
      src/gui/toolbarMenubar/model/ToolbarItem.cpp
  8. 4
      src/gui/toolbarMenubar/model/ToolbarItem.h
  9. 42
      src/gui/toolbarMenubar/model/ToolbarModel.cpp
  10. 5
      src/gui/toolbarMenubar/model/ToolbarModel.h

@ -1029,38 +1029,7 @@ void Control::customizeToolbars()
ToolbarData* data = new ToolbarData(*this->win->getSelectedToolbar());
ToolbarModel* model = this->win->getToolbarModel();
for (int i = 0; i < 100; i++)
{
string id = data->getId() + " Copy";
if (i != 0)
{
id += " ";
id += std::to_string(i);
}
if (!model->existsId(id))
{
if (i != 0)
{
string filename = data->getName();
filename += " ";
filename += _("Copy");
filename += " ";
filename += std::to_string(i);
data->setName(filename);
}
else
{
data->setName(data->getName() + " " + _("Copy"));
}
data->setId(id);
break;
}
}
model->initCopyNameId(data);
model->add(data);
this->win->toolbarSelected(data);
this->win->updateToolbarMenu();

@ -12,13 +12,11 @@ enum
};
ToolbarManageDialog::ToolbarManageDialog(GladeSearchpath* gladeSearchPath, ToolbarModel* model)
: GladeGui(gladeSearchPath, "toolbarManageDialog.glade", "DialogManageToolbar")
: GladeGui(gladeSearchPath, "toolbarManageDialog.glade", "DialogManageToolbar"),
tbModel(model)
{
XOJ_INIT_TYPE(ToolbarManageDialog);
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);
@ -60,7 +58,6 @@ ToolbarManageDialog::ToolbarManageDialog(GladeSearchpath* gladeSearchPath, Toolb
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);
@ -91,6 +88,8 @@ void ToolbarManageDialog::buttonNewCallback(GtkButton* button, ToolbarManageDial
ToolbarData* data = new ToolbarData(false);
data->setName(_("New"));
data->setId("custom");
dlg->tbModel->initCopyNameId(data);
dlg->addToolbarData(data);
}
@ -98,39 +97,47 @@ void ToolbarManageDialog::buttonDeleteCallback(GtkButton* button, ToolbarManageD
{
XOJ_CHECK_TYPE_OBJ(dlg, ToolbarManageDialog);
if (dlg->selected)
ToolbarData* selected = dlg->getSelectedEntry();
if (selected == NULL)
{
return;
}
dlg->tbModel->remove(selected);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dlg->model), &iter))
{
dlg->tbModel->remove(dlg->selected);
GtkTreeIter iter;
if (gtk_tree_model_get_iter_first(GTK_TREE_MODEL(dlg->model), &iter))
do
{
do
ToolbarData* data = NULL;
gtk_tree_model_get(GTK_TREE_MODEL(dlg->model), &iter, COLUMN_POINTER, &data, -1);
if (data == selected)
{
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;
}
gtk_list_store_remove(dlg->model, &iter);
break;
}
while (gtk_tree_model_iter_next(GTK_TREE_MODEL(dlg->model), &iter));
}
dlg->entrySelected(NULL);
while (gtk_tree_model_iter_next(GTK_TREE_MODEL(dlg->model), &iter));
}
dlg->updateSelectionData();
delete selected;
}
void ToolbarManageDialog::buttonCopyCallback(GtkButton* button, ToolbarManageDialog* dlg)
{
XOJ_CHECK_TYPE_OBJ(dlg, ToolbarManageDialog);
if (dlg->selected)
ToolbarData* selected = dlg->getSelectedEntry();
if (selected == NULL)
{
ToolbarData* data = new ToolbarData(*dlg->selected);
dlg->addToolbarData(data);
return;
}
ToolbarData* data = new ToolbarData(*selected);
dlg->tbModel->initCopyNameId(data);
dlg->addToolbarData(data);
}
void ToolbarManageDialog::addToolbarData(ToolbarData* data)
@ -185,25 +192,49 @@ void ToolbarManageDialog::entrySelected(ToolbarData* data)
gtk_widget_set_sensitive(btCopy, true);
gtk_widget_set_sensitive(btDelete, !data->isPredefined());
}
this->selected = data;
}
void ToolbarManageDialog::treeSelectionChangedCallback(GtkTreeSelection* selection, ToolbarManageDialog* dlg)
ToolbarData* ToolbarManageDialog::getSelectedEntry()
{
XOJ_CHECK_TYPE_OBJ(dlg, ToolbarManageDialog);
XOJ_CHECK_TYPE(ToolbarManageDialog);
GtkTreeIter iter;
GtkTreeModel* model = NULL;
ToolbarData* data = NULL;
GtkWidget* tree = get("toolbarList");
GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(tree));
if (selection == NULL)
{
return NULL;
}
if (gtk_tree_selection_get_selected(selection, &model, &iter))
{
gtk_tree_model_get(model, &iter, COLUMN_POINTER, &data, -1);
dlg->entrySelected(data);
return data;
}
else
{
return NULL;
}
}
void ToolbarManageDialog::updateSelectionData()
{
XOJ_CHECK_TYPE(ToolbarManageDialog);
entrySelected(getSelectedEntry());
}
void ToolbarManageDialog::treeSelectionChangedCallback(GtkTreeSelection* selection, ToolbarManageDialog* dlg)
{
XOJ_CHECK_TYPE_OBJ(dlg, ToolbarManageDialog);
dlg->updateSelectionData();
}
void ToolbarManageDialog::show(GtkWindow* parent)
{
XOJ_CHECK_TYPE(ToolbarManageDialog);

@ -37,11 +37,13 @@ private:
void addToolbarData(ToolbarData* data);
void entrySelected(ToolbarData* data);
void updateSelectionData();
ToolbarData* getSelectedEntry();
private:
XOJ_TYPE_ATTRIB;
ToolbarModel* tbModel;
GtkListStore* model;
ToolbarData* selected;
};

@ -21,6 +21,21 @@ ToolbarData::ToolbarData(const ToolbarData& data)
this->predefined = false;
}
void ToolbarData::operator=(const ToolbarData& other)
{
XOJ_CHECK_TYPE(ToolbarData);
this->id = other.id;
this->name = other.name;
this->predefined = other.predefined;
contents.clear();
for (const ToolbarEntry* e : other.contents)
{
contents.push_back(new ToolbarEntry(*e));
}
}
ToolbarData::~ToolbarData()
{
XOJ_CHECK_TYPE(ToolbarData);

@ -22,6 +22,8 @@ public:
ToolbarData(const ToolbarData& data);
virtual ~ToolbarData();
void operator=(const ToolbarData& other);
public:
string getName();
void setName(string name);

@ -24,9 +24,9 @@ public:
void operator=(const ToolbarEntry& e);
public:
void clearList();
public:
string getName();
void setName(string name);

@ -21,7 +21,6 @@ ToolbarItem::ToolbarItem(const ToolbarItem& item)
this->id = item.id;
this->name = item.name;
this->sid = item.sid;
}
ToolbarItem::ToolbarItem()

@ -21,6 +21,10 @@ public:
ToolbarItem();
virtual ~ToolbarItem();
private:
void operator=(const ToolbarItem& other);
public:
string getName();
bool operator==(ToolbarItem& other);

@ -2,6 +2,7 @@
#include "ToolbarData.h"
#include <XojMsgBox.h>
#include <i18n.h>
#include <fstream>
@ -90,13 +91,52 @@ bool ToolbarModel::parse(string filename, bool predefined)
return true;
}
void ToolbarModel::initCopyNameId(ToolbarData* data)
{
XOJ_CHECK_TYPE(ToolbarModel);
for (int i = 0; i < 100; i++)
{
string id = data->getId() + " Copy";
if (i != 0)
{
id += " ";
id += std::to_string(i);
}
if (!existsId(id))
{
if (i != 0)
{
string filename = data->getName();
filename += " ";
filename += _("Copy");
filename += " ";
filename += std::to_string(i);
data->setName(filename);
}
else
{
data->setName(data->getName() + " " + _("Copy"));
}
data->setId(id);
break;
}
}
}
bool ToolbarModel::existsId(string id)
{
XOJ_CHECK_TYPE(ToolbarModel);
for (ToolbarData* data : this->toolbars)
{
if (data->getId() == id) return true;
if (data->getId() == id)
{
return true;
}
}
return false;
}

@ -22,6 +22,10 @@ public:
ToolbarModel();
virtual ~ToolbarModel();
private:
ToolbarModel(const ToolbarModel& other);
void operator=(const ToolbarModel& other);
public:
vector<ToolbarData*>* getToolbars();
bool parse(string filename, bool predefined);
@ -29,6 +33,7 @@ public:
void remove(ToolbarData* data);
void save(Path filename);
bool existsId(string id);
void initCopyNameId(ToolbarData* data);
private:
void parseGroup(GKeyFile* config, const char* group, bool predefined);

Loading…
Cancel
Save