summaryrefslogtreecommitdiff
path: root/main.cpp
diff options
context:
space:
mode:
authorDennis Brentjes <d.brentjes@gmail.com>2014-04-28 15:25:20 +0200
committerDennis Brentjes <d.brentjes@gmail.com>2014-04-28 16:04:45 +0200
commit42442fd5025b69c4b7800c71d6f568ae255e7b00 (patch)
tree8e35f36410e9b9cb7d7e5367a62d24b5c5f181c1 /main.cpp
parentd834eba65c2c65c1540d13c9c39ced51bd87cf83 (diff)
downloadgeneric-gui-42442fd5025b69c4b7800c71d6f568ae255e7b00.tar.gz
generic-gui-42442fd5025b69c4b7800c71d6f568ae255e7b00.tar.bz2
generic-gui-42442fd5025b69c4b7800c71d6f568ae255e7b00.zip
Adds support for a std::map<std::string, T> model.
Diffstat (limited to 'main.cpp')
-rw-r--r--main.cpp75
1 files changed, 46 insertions, 29 deletions
diff --git a/main.cpp b/main.cpp
index 1ca2350..3e9307d 100644
--- a/main.cpp
+++ b/main.cpp
@@ -2,19 +2,23 @@
#include "fusion_model.hpp"
#include "qt_adapter.hpp"
#include "gui_item_delegate.hpp"
+#include "meta_types.hpp"
#include <boost/fusion/adapted.hpp>
#include <iostream>
#include <QMainWindow>
+#include <QHeaderView>
+#include <QVBoxLayout>
#include <QApplication>
+#include <QMdiArea>
struct Data {
std::string name;
uint32_t number;
float ratio;
- bool lolwut;
+ bool boolean;
};
BOOST_FUSION_ADAPT_STRUCT(
@@ -22,7 +26,7 @@ BOOST_FUSION_ADAPT_STRUCT(
(std::string, name)
(uint32_t, number)
(float, ratio)
- (bool, lolwut)
+ (bool, boolean)
)
struct DataModel : public fusion_model<std::vector<Data>> {
@@ -32,49 +36,62 @@ struct DataModel : public fusion_model<std::vector<Data>> {
}
};
+struct DataMapping :public fusion_model<std::map<std::string, Data>> {
+ void add_data(std::string key, Data value)
+ {
+ data.emplace(key, value);
+ }
+};
+
int main()
{
+ Data d1{"Pietje", 2, 3.333f, true};
+ Data d2{"Jantje", 3, 1.5f, false};
+ Data d3{"Sjaakje", 1, 0.1337f, false};
+
DataModel model;
- model.add_data({"Pietje", 2, 3.333f, true});
- model.add_data({"Jantje", 3, 1.5f, false});
- model.add_data({"Sjaakje", 1, 0.1337f, false});
+ model.add_data(d1);
+ model.add_data(d2);
+ model.add_data(d3);
auto adapter = make_qt_adapter(model);
+ DataMapping mapping;
+
+ mapping.add_data("nummer1", d1);
+ mapping.add_data("nummer2", d2);
+ mapping.add_data("nummer3", d3);
+
+ auto&& adapter2 = make_qt_adapter(mapping);
+
int argc = 0;
QApplication qapp(argc, nullptr);
QMainWindow w;
-
- decltype(adapter)::element_type::view view;
- view.setModel(adapter.get());
+ widget_type<decltype(adapter)>::type widget;
+ widget.setFixedSize(640, 480);
+ widget.setModel(adapter.get());
+ //widget.show();
- GuiItemDelegate delegate;
- view.setItemDelegate(&delegate);
+ widget_type<decltype(adapter)>::type widget2;
+ widget2.setFixedSize(640, 480);
+ widget2.verticalHeader()->setEnabled(true);
+ widget2.setModel(adapter2.get());
+ //widget2.show();
- view.show();
+ QMdiArea area;
- qapp.exec();
+ QVBoxLayout layout;
+
+ layout.addWidget(&widget);
+ layout.addWidget(&widget2);
- for(int column = 0; column < model.column_count(); ++column)
- {
- std::cout << model.horizontal_header_data(column) << "\t";
- }
- std::cout << std::endl;
+ area.setLayout(&layout);
- for(int row = 0; row < model.row_count(); ++row)
- {
- for(int column = 0; column < model.column_count(); ++column) {
- if(column == 0) {
- std::cout << boost::any_cast<std::string>(model.get_cell(row, column)) << "\t";
- } else {
- std::cout << boost::any_cast<uint32_t>(model.get_cell(row, column)) << "\t";
- }
- }
- std::cout << std::endl;
- }
+ w.setCentralWidget(&area);
+ w.show();
- return 0;
+ return qapp.exec();
}