# HG changeset patch # User John Tsiombikas # Date 1400034858 -10800 # Node ID 91e3aa1a60c39774c8db46a66b4e8ba0dfa61776 # Parent 022b13ed975bf1d7efc7ec2c018fc1b238388f69 more powerful treeview diff -r 022b13ed975b -r 91e3aa1a60c3 goatview/Makefile --- a/goatview/Makefile Mon May 12 07:37:30 2014 +0300 +++ b/goatview/Makefile Wed May 14 05:34:18 2014 +0300 @@ -2,7 +2,7 @@ src = $(wildcard src/*.cc) csrc = $(wildcard src/*.c) -mochdr = src/goatview.h +mochdr = src/goatview.h src/scenemodel.h mocsrc = $(patsubst src/%.h,src/moc_%.cc,$(mochdr)) obj = $(sort $(csrc:.c=.o) $(src:.cc=.o) $(mocsrc:.cc=.o)) dep = $(obj:.o=.d) diff -r 022b13ed975b -r 91e3aa1a60c3 goatview/src/goatview.cc --- a/goatview/src/goatview.cc Mon May 12 07:37:30 2014 +0300 +++ b/goatview/src/goatview.cc Wed May 14 05:34:18 2014 +0300 @@ -1,17 +1,16 @@ #include +#include #include "opengl.h" #include #include #include "goatview.h" #include "goat3d.h" -static void update_tree(QTreeWidget *tree); -static void add_tree(QTreeWidget *tree, goat3d_node *node, QTreeWidgetItem *parent); - static void draw_node(goat3d_node *node); static void draw_mesh(goat3d_mesh *mesh); goat3d *scene; +static SceneModel *sdata; static long anim_time; static float cam_theta, cam_phi, cam_dist = 8; @@ -23,6 +22,7 @@ GoatView::GoatView() { glview = 0; + scene_model = 0; QSettings settings; resize(settings.value("main/size", QSize(1024, 768)).toSize()); @@ -41,6 +41,8 @@ GoatView::~GoatView() { + delete scene_model; + sdata = 0; } void GoatView::closeEvent(QCloseEvent *ev) @@ -69,7 +71,11 @@ printf("bounds size: %f, cam_dist: %f\n", bsize, cam_dist); } - update_tree(scntree); + scene_model->set_scene(scene); + treeview->expandAll(); + treeview->resizeColumnToContents(0); + + sdata = scene_model; // set the global sdata ptr return true; } @@ -130,20 +136,24 @@ addDockWidget(Qt::LeftDockWidgetArea, dock); // make the tree view widget - scntree = new QTreeWidget; + treeview = new QTreeView; + /* scntree->setColumnCount(1); QStringList hdrstr; hdrstr << "Node";// << "Type"; scntree->setHeaderItem(new QTreeWidgetItem((QTreeWidget*)0, hdrstr)); - scntree->setAlternatingRowColors(true); - dock_vbox->addWidget(scntree); + */ + treeview->setAlternatingRowColors(true); + dock_vbox->addWidget(treeview); - update_tree(scntree); + scene_model = new SceneModel; + connect(scene_model, &SceneModel::dataChanged, [&](){ glview->updateGL(); }); + treeview->setModel(scene_model); // misc QPushButton *bn_quit = new QPushButton("quit"); dock_vbox->addWidget(bn_quit); - connect(bn_quit, &QPushButton::clicked, [&](){qApp->quit();}); + connect(bn_quit, &QPushButton::clicked, [&](){ qApp->quit(); }); // ---- bottom dock ---- dock_cont = new QWidget; @@ -189,43 +199,6 @@ statusBar()->showMessage("opening animation..."); } -static void update_tree(QTreeWidget *tree) -{ - tree->clear(); - - if(!scene) return; - - int num_nodes = goat3d_get_node_count(scene); - for(int i=0; iexpandAll(); -} - -static void add_tree(QTreeWidget *tree, goat3d_node *node, QTreeWidgetItem *parent) -{ - //char icon_name[64]; - //sprintf(icon_name, ":/icons/icons/icon_%s.png", node->get_type()); - - QStringList row; - row << goat3d_get_node_name(node) << "M"; - QTreeWidgetItem *item = new QTreeWidgetItem(parent, row); - //item->setIcon(0, QIcon(icon_name)); - tree->addTopLevelItem(item); - - int num_children = goat3d_get_node_child_count(node); - for(int i=0; iget_node_data(node) : 0; + if(!data) return; + float xform[16]; goat3d_get_node_matrix(node, xform, anim_time); glPushMatrix(); glMultTransposeMatrixf(xform); - if(goat3d_get_node_type(node) == GOAT3D_NODE_MESH) { - goat3d_mesh *mesh = (goat3d_mesh*)goat3d_get_node_object(node); + if(data->visible) { + if(goat3d_get_node_type(node) == GOAT3D_NODE_MESH) { + goat3d_mesh *mesh = (goat3d_mesh*)goat3d_get_node_object(node); - draw_mesh(mesh); + draw_mesh(mesh); + } } int num_child = goat3d_get_node_child_count(node); diff -r 022b13ed975b -r 91e3aa1a60c3 goatview/src/goatview.h --- a/goatview/src/goatview.h Mon May 12 07:37:30 2014 +0300 +++ b/goatview/src/goatview.h Wed May 14 05:34:18 2014 +0300 @@ -5,17 +5,20 @@ #include #include #include "goat3d.h" +#include "scenemodel.h" extern goat3d *scene; class GoatViewport; + class GoatView : public QMainWindow { private: Q_OBJECT GoatViewport *glview; - QTreeWidget *scntree; + QTreeView *treeview; + SceneModel *scene_model; void closeEvent(QCloseEvent *ev); bool make_menu();