OSDN Git Service

オブジェクトリストウィジェット分離
authorqw_fuku <fkhideaki@gmail.com>
Sun, 12 Jun 2016 07:26:25 +0000 (16:26 +0900)
committerqw_fuku <fkhideaki@gmail.com>
Sun, 12 Jun 2016 07:49:43 +0000 (16:49 +0900)
Src/QtGeoViewer/FormMain.cpp
Src/QtGeoViewer/FormMain.h
Src/QtGeoViewer/FormMain.ui
Src/QtGeoViewer/QtGeoViewer.pro
Src/QtGeoViewer/QtGeoViewer.vcxproj
Src/QtGeoViewer/QtGeoViewer.vcxproj.filters
Src/QtGeoViewer/WidgetObjectList.cpp [new file with mode: 0644]
Src/QtGeoViewer/WidgetObjectList.h [new file with mode: 0644]
Src/QtGeoViewer/WidgetObjectList.ui [new file with mode: 0644]

index 4b9157e..8096357 100644 (file)
@@ -30,7 +30,6 @@
 #include "MatcapSelectDlg.h"
 #include "EnvmapSelectDlg.h"
 #include "FileDlgUtil.h"
-#include "TreeUtil.h"
 #include "MaterialPresetDlg.h"
 
 
@@ -57,6 +56,8 @@ FormMain::FormMain(QWidget *parent)
 {
        ui.setupUi(this);
 
+       ui.widgetObjectList->setMainForm(this);
+
        m_EnableAllFeatures = false;
        m_LastFocusedDockDlg = NULL;
 
@@ -744,25 +745,7 @@ void FormMain::InitializeMenu(void)
 
 void FormMain::InitContextMenu(void)
 {
-       QList<QAction*> actions;
-       actions
-               << ui.actionSelObjectVisible
-               << ui.actionSelObjectVertexOnlyMode
-               << ui.actionSelObjectDelete
-               << ui.actionSelObjectReload
-               << ui.actionSelObjectFlipFace
-               << ui.actionSelObjectFlipNormal
-               << ui.actionSelObjectResetNormal
-               << ui.actionSelObjectOpenDir
-               << ui.actionActionSelObjectShowOnlyOnce
-               << ui.actionSelObjectTriangulate
-               << ui.actionTreeCollapseAll
-               << ui.actionTreeExpandAll;
-
-       QTreeWidget* obj_tree = ui.treeObjects;
-
-       obj_tree->setContextMenuPolicy(Qt::ActionsContextMenu);
-       obj_tree->addActions(actions);
+       ui.widgetObjectList->RegisterContextMenu();
 }
 
 void FormMain::ProcArguments(void)
@@ -1283,7 +1266,7 @@ void FormMain::on_actionWindowMaterialList_triggered()
 void FormMain::on_actionWindowObjectList_triggered()
 {
        ShowAndActivateAndRaise(ui.dockObject);
-       ui.treeObjects->setFocus();
+       ui.widgetObjectList->focusList();
 }
 
 void FormMain::on_actionWindowCameraList_triggered()
@@ -1593,7 +1576,7 @@ void FormMain::ClearAllObjects(void)
 
 void FormMain::RebuildObjectList(void)
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
+       QTreeWidget* obj_tree = ui.widgetObjectList->GetTree();
 
        obj_tree->setCurrentItem(NULL);
        obj_tree->blockSignals(true);
@@ -1633,7 +1616,7 @@ void FormMain::RebuildObjectList(void)
 
 void FormMain::ResizeObjectTreeColumns(void)
 {
-       QTreeWidget* t = ui.treeObjects;
+       QTreeWidget* t = ui.widgetObjectList->GetTree();
 
        t->setVisible(false);
        t->resizeColumnToContents(0);
@@ -1645,7 +1628,7 @@ void FormMain::ResizeObjectTreeColumns(void)
 
 void FormMain::InitObjectListHeader(void)
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
+       QTreeWidget* obj_tree = ui.widgetObjectList->GetTree();
 
        QStringList qs;
        qs << "Name" << "Visible" << "Verts" << "Faces";
@@ -1702,7 +1685,7 @@ void FormMain::ApplyGeomStateDataoToGUI(void)
        ui.actionAutoResize ->setChecked( m_Scene.m_Config.m_EnableAutoReisze    );
        ui.actionCentering  ->setChecked( m_Scene.m_Config.m_EnableAutoCentering );
 
-       ui.checkShowOnlySelect->setChecked(m_View3d.m_Config.m_ShowOnlySelect);
+       ui.widgetObjectList->applyConfig();
 }
 
 void FormMain::on_actionGeomClear_triggered()
@@ -1722,65 +1705,6 @@ void FormMain::on_actionSelObjectDelete_triggered()
        DeleteSelectedObject();
 }
 
-void FormMain::on_actionSelObjectReload_triggered()
-{
-       GeomObject* obj = m_Scene.GetPrimaryObject();
-       if (obj == NULL)
-               return;
-
-       if (!obj->IsFileObject())
-       {
-               QMessageBox::information(this, "", "IsNotFileObject");
-               return;
-       }
-
-       m_Scene.ReloadObject(obj);
-
-       RebuildObjectList();
-
-       m_View3d.ClearRenderMap();
-       updateView_All();
-}
-
-void FormMain::on_actionSelObjectVisible_triggered()
-{
-       FlipVisibleSelectedObject();
-}
-
-void FormMain::on_actionSelObjectVertexOnlyMode_triggered()
-{
-       GeomObject* obj = m_Scene.GetPrimaryObject();
-       if (obj == NULL)
-               return;
-
-       obj->m_VertexOnlyMode = !obj->m_VertexOnlyMode;
-
-       ui.actionSelObjectVertexOnlyMode->setChecked(obj->m_VertexOnlyMode);
-
-       updateView_All();
-}
-
-void FormMain::on_actionSelObjectFlipFace_triggered()
-{
-       m_Scene.FlipCurselFace(false);
-
-       RebuildAllGLBuf();
-}
-
-void FormMain::on_actionSelObjectFlipNormal_triggered()
-{
-       m_Scene.FlipCurselFace(true);
-
-       RebuildAllGLBuf();
-}
-
-void FormMain::on_actionSelObjectResetNormal_triggered()
-{
-       m_Scene.RebuildCurselNormal();
-
-       RebuildAllGLBuf();
-}
-
 void FormMain::RebuildAllGLBuf(void)
 {
        ui.GLWidgetMain->makeCurrent();
@@ -1794,49 +1718,11 @@ void FormMain::RebuildAllGLBuf(void)
        updateView_All();
 }
 
-void FormMain::on_actionSelObjectOpenDir_triggered()
-{
-       GeomObject* obj = m_Scene.GetPrimaryObject();
-       if (obj == NULL)
-               return;
-
-       if (!obj->IsFileObject())
-               return;
-
-       QString path = QString::fromLocal8Bit(obj->m_FilePath.c_str());
-       QString p2 = QDir::toNativeSeparators(path);
-       QGui::ShowExplorerFileSel(p2);
-}
-
 void FormMain::on_actionShowOnlySelected_triggered()
 {
        ShowObjectOnlySelected();
 }
 
-void FormMain::on_actionSelObjectTriangulate_triggered()
-{
-       MeshBuf* mbuf = m_Scene.GetPrimaryMeshbuf();
-       if (mbuf == NULL)
-               return;
-
-       mbuf->Triangulate();
-
-       m_View3d.ReleaseAllRenderBuffer();
-
-       RebuildObjectList();
-       updateView_All();
-}
-
-void FormMain::on_actionTreeCollapseAll_triggered()
-{
-       TreeUtil::SetAllTopExpand(ui.treeObjects, false);
-}
-
-void FormMain::on_actionTreeExpandAll_triggered()
-{
-       TreeUtil::SetAllTopExpand(ui.treeObjects, true);
-}
-
 
 void FormMain::on_actionAddSample_triggered()
 {
@@ -1852,7 +1738,7 @@ void FormMain::on_actionAddGroundPlane_triggered()
 
 void FormMain::OnDoneAddGeom(void)
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
+       QTreeWidget* obj_tree = ui.widgetObjectList->GetTree();
 
        const GeomObject& obj = m_Scene.m_Objects.back();
 
@@ -1957,47 +1843,9 @@ bool FormMain::IsAutUVFit(void) const
 }
 
 
-void FormMain::on_pushDeleteSelectedObject_clicked()
-{
-       DeleteSelectedObject();
-}
-
-void FormMain::on_treeObjects_currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem * previous)
-{
-       RefreshObjectSelectState();
-}
-
-void FormMain::on_treeObjects_itemChanged(QTreeWidgetItem * item, int column)
-{
-       if (column != 1)
-               return;
-
-       QTreeWidget* obj_tree = ui.treeObjects;
-
-       QTreeWidgetItem* t = item->parent();
-       bool checked = (item->checkState(1) == Qt::Checked);
-       if (t == NULL)
-       {
-               int sel_idx = obj_tree->indexOfTopLevelItem(item);
-               GeomObject& obj = m_Scene.m_Objects[sel_idx];
-               obj.m_Visible = checked;
-       }
-       else
-       {
-               int sel_idx = obj_tree->indexOfTopLevelItem(t);
-               int midx = t->indexOfChild(item);
-
-               GeomObject& obj = m_Scene.m_Objects[sel_idx];
-               MeshBuf& mb = obj.m_MeshAry[midx];
-               mb.m_Visible = checked;
-       }
-
-       updateView_All();
-}
-
 void FormMain::RefreshObjectSelectState(void)
 {
-       SetPrimayrSelectObjectToScene();
+       ui.widgetObjectList->SetPrimayrSelectObjectToScene();
 
        RebuildMatList();
        UpdateContextmenuState();
@@ -2045,50 +1893,13 @@ void FormMain::RebuildMatList(void)
 
 void FormMain::UpdateContextmenuState(void)
 {
-       GeomObject* obj = m_Scene.GetPrimaryObject();
-       MeshBuf* mbuf = m_Scene.GetPrimaryMeshbuf();
-
-       if (mbuf != NULL)
-       {
-               ui.actionSelObjectVisible->setChecked(mbuf->IsVisible());
-       }
-       else if (obj != NULL)
-       {
-               ui.actionSelObjectVisible->setChecked(obj->m_Visible);
-       }
-
-       if (obj != NULL)
-               ui.actionSelObjectVertexOnlyMode->setChecked(obj->m_VertexOnlyMode);
-}
-
-void FormMain::SetPrimayrSelectObjectToScene(void)
-{
-       Selection3D& sels = m_Scene.m_Sels;
-
-       QTreeWidget* tree = ui.treeObjects;
-
-       QTreeWidgetItem* sel_node = tree->currentItem();
-       if (sel_node == NULL)
-               return;
-
-       QTreeWidgetItem* on = sel_node->parent();
-       if (on == NULL)
-       {
-               int obj_idx = tree->indexOfTopLevelItem(sel_node);
-               sels.SelectObject(obj_idx);
-       }
-       else
-       {
-               int obj_idx = tree->indexOfTopLevelItem(on);
-               int mb_idx = on->indexOfChild(sel_node);
-               sels.SelectMBuf(obj_idx, mb_idx);
-       }
+       ui.widgetObjectList->UpdateContextmenuState();
 }
 
 
 void FormMain::DeleteSelectedObject()
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
+       QTreeWidget* obj_tree = ui.widgetObjectList->GetTree();
        QTreeWidgetItem* ti = obj_tree->currentItem();
        if (ti == NULL)
                return;
@@ -2132,12 +1943,7 @@ void FormMain::DeleteSelectedObject()
 
 void FormMain::FlipVisibleSelectedObject()
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
-       QTreeWidgetItem * item = obj_tree->currentItem();
-       if (item == NULL)
-               return;
-
-       item->setCheckState(1, FilpState(item->checkState(1)));
+       ui.widgetObjectList->FlipVisibleSelectedObject();
 }
 
 Qt::CheckState FormMain::FilpState(Qt::CheckState state) const
@@ -2560,23 +2366,7 @@ void FormMain::on_actionSelectPrev_triggered()
 
 void FormMain::AddSelectObjectIdx(int step)
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
-
-       int num_obj = obj_tree->topLevelItemCount();
-       if (num_obj == 0)
-               return;
-
-       QTreeWidgetItem * i = obj_tree->currentItem();
-       int idx = obj_tree->indexOfTopLevelItem(i);
-       idx += step;
-
-       if (0 > idx)
-               idx = num_obj - 1;
-       else if (idx >= num_obj)
-               idx = 0;
-
-       QTreeWidgetItem * j = obj_tree->topLevelItem(idx);
-       obj_tree->setCurrentItem(j);
+       ui.widgetObjectList->AddSelectObjectIdx(step);
 }
 
 void FormMain::on_actionSwitchVisible_triggered()
@@ -2584,11 +2374,6 @@ void FormMain::on_actionSwitchVisible_triggered()
        FlipVisibleSelectedObject();
 }
 
-void FormMain::on_actionActionSelObjectShowOnlyOnce_triggered()
-{
-       ShowObjectOnlySelected();
-}
-
 void FormMain::on_actionHideAll_triggered()
 {
        m_Scene.HideAllObject();
@@ -2852,11 +2637,6 @@ void FormMain::on_sliderShadowDarkness_valueChanged(int value)
        updateView_All();
 }
 
-void FormMain::on_buttonClearAllGeoms_clicked()
-{
-       ClearAllObjects();
-}
-
 //! \83J\83\81\83\89\88Ê\92u\95\9c\8c³\8b@\94\\8eg\97p\8e\9e\82Ì\83A\83j\83\81\81[\83V\83\87\83\93\97L\96³
 void FormMain::on_checkCameraAnimation_toggled(bool checked)
 {
@@ -2894,17 +2674,7 @@ void FormMain::on_buttonResetGridAxis_clicked()
 
 void FormMain::View3D_SelectedObjectChanged(int sel_obj, int sel_mesh)
 {
-       QTreeWidgetItem* on = ui.treeObjects->topLevelItem(sel_obj);
-
-       if (sel_mesh == -1)
-       {
-               ui.treeObjects->setCurrentItem(on);
-       }
-       else
-       {
-               QTreeWidgetItem* mn = on->child(sel_mesh);
-               ui.treeObjects->setCurrentItem(mn);
-       }
+       ui.widgetObjectList->OnSelectedObjectChanged(sel_obj, sel_mesh);
 }
 
 void FormMain::View3D_SelectedMatChanged(int sel_idx)
@@ -3510,12 +3280,6 @@ void FormMain::OnOpenRecent()
                return;
 }
 
-void FormMain::on_checkShowOnlySelect_toggled(bool checked)
-{
-       m_View3d.m_Config.m_ShowOnlySelect = checked;
-       updateView_All();
-}
-
 void FormMain::PushbackTreeNode(QTreeWidget* tree, QTreeWidgetItem *node)
 {
        int next_idx = tree->topLevelItemCount();
@@ -3562,27 +3326,7 @@ QTreeWidgetItem* FormMain::CreateMeshBufNode(const geom::GeomObject& obj, const
 
 void FormMain::SetPrimayrSelectObjectFromScene(void)
 {
-       QTreeWidget* obj_tree = ui.treeObjects;
-
-       Selection3D& sels = m_Scene.m_Sels;
-       if (!sels.IsObjectSelected())
-               return;
-
-       int sel_idx = sels.GetSelObjectIdx();
-
-       QTreeWidgetItem* on = obj_tree->topLevelItem(sel_idx);
-       if (on == NULL)
-               return;
-
-       if (sels.IsMBufSelected())
-       {
-               QTreeWidgetItem* mn = on->child(sels.GetMBufIdx());
-               obj_tree->setCurrentItem(mn);
-       }
-       else
-       {
-               obj_tree->setCurrentItem(on);
-       }
+       ui.widgetObjectList->SetPrimayrSelectObjectFromScene(m_Scene);
 }
 
 void FormMain::on_actionReleaseShader_triggered()
index 1eb6391..c384f0a 100644 (file)
@@ -43,6 +43,22 @@ public:
 
        bool OpenGeomFile(const QString& path);
 
+       void updateView_All(void);
+       void updateView_2D(void);
+       void updateView_3D(void);
+
+       void RefreshObjectSelectState(void);
+
+       void DeleteSelectedObject();
+
+       void ClearAllObjects(void);
+
+       void RebuildObjectList(void);
+
+       void RebuildAllGLBuf(void);
+
+       void ShowObjectOnlySelected(void);
+
 protected:
        virtual void closeEvent(QCloseEvent *e);
 
@@ -77,10 +93,6 @@ private:
        void InitContextMenu(void);
        void ProcArguments(void);
 
-       void updateView_All(void);
-       void updateView_2D(void);
-       void updateView_3D(void);
-
        bool IsCameraFile(const QString& path) const;
 
        void DropTextureFile(const QString& path, const QPoint& pos);
@@ -102,9 +114,6 @@ private:
 
        void OnDoneAddGeom(void);
 
-       void ClearAllObjects(void);
-
-       void RebuildObjectList(void);
        void ResizeObjectTreeColumns(void);
 
        void ApplyGeomStateFromGUI(void);
@@ -120,14 +129,11 @@ private:
        void OnChangedSelectedMaterial(void);
        void SetMatShininessSliderPos(float shininess);
 
-       void DeleteSelectedObject();
        void FlipVisibleSelectedObject();
-       void ShowObjectOnlySelected(void);
 
        QTreeWidgetItem* CreateObjectTreeNode(const geom::GeomObject& obj) const;
        QTreeWidgetItem* CreateMeshBufNode(const geom::GeomObject& obj, const MeshBuf& mbuf, int idx) const;
 
-       void RefreshObjectSelectState(void);
        void RebuildMatList(void);
        void UpdateContextmenuState(void);
 
@@ -192,7 +198,6 @@ private:
 
        void InitObjectListHeader(void);
        void SetPrimayrSelectObjectFromScene(void);
-       void SetPrimayrSelectObjectToScene(void);
 
        void PushbackTreeNode(QTreeWidget* tree, QTreeWidgetItem *node);
 
@@ -211,7 +216,6 @@ private:
        void ResetSequenceSliderRange(void);
        void UpdateSequence(void);
 
-       void RebuildAllGLBuf(void);
        void UpdateLightPowerText(void);
 
        void SyncTexConfigToGUI(bool silent);
@@ -258,7 +262,6 @@ private slots:
        void on_actionIOOptionPanel_triggered();
 
        void on_listMaterial_currentItemChanged(QListWidgetItem *current, QListWidgetItem *previous);
-       void on_treeObjects_currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem * previous);
 
        virtual void actionGeomStates_Triggered(bool);
        void on_actionGeomClear_triggered();
@@ -266,17 +269,7 @@ private slots:
        void on_actionUVFitView_triggered();
 
        void on_actionSelObjectDelete_triggered();
-       void on_actionSelObjectReload_triggered();
-       void on_actionSelObjectVisible_triggered();
-       void on_actionSelObjectVertexOnlyMode_triggered();
-       void on_actionSelObjectResetNormal_triggered();
-       void on_actionSelObjectFlipFace_triggered();
-       void on_actionSelObjectOpenDir_triggered();
-       void on_actionSelObjectFlipNormal_triggered();
        void on_actionShowOnlySelected_triggered();
-       void on_actionSelObjectTriangulate_triggered();
-       void on_actionTreeCollapseAll_triggered();
-       void on_actionTreeExpandAll_triggered();
 
        void on_actionAddSample_triggered();
 
@@ -290,10 +283,6 @@ private slots:
        void on_actionIntegrateShader_triggered(bool checked);
        void on_actionMatcapShader_triggered(bool checked);
 
-       void on_pushDeleteSelectedObject_clicked();
-
-       void on_treeObjects_itemChanged( QTreeWidgetItem * item, int column);
-
        void on_actionUVResetView_triggered();
 
        void on_actionWireColor_triggered();
@@ -368,8 +357,6 @@ private slots:
 
        void on_sliderShadowDarkness_valueChanged(int value);
 
-       void on_buttonClearAllGeoms_clicked();
-
        void on_checkCameraAnimation_toggled(bool checked);
 
        void on_actionOpenAppdir_triggered();
@@ -382,8 +369,6 @@ private slots:
        void on_buttonIncGridAxis_clicked();
        void on_buttonResetGridAxis_clicked();
 
-       void on_actionActionSelObjectShowOnlyOnce_triggered();
-
        void View3D_SelectedObjectChanged(int sel_obj, int sel_mesh);
        void View3D_SelectedMatChanged(int sel_idx);
        void View3D_CameraMoved(void);
@@ -453,8 +438,6 @@ private slots:
 
        void OnOpenRecent();
 
-       void on_checkShowOnlySelect_toggled(bool checked);
-
        void on_actionReleaseShader_triggered();
 
        void on_combo2DViewSrcType_currentIndexChanged(int index);
@@ -532,14 +515,16 @@ private:
 
        QDockWidget* m_LastFocusedDockDlg;
 
-private:
+public:
        SceneMain m_Scene;
 
+       View3D m_View3d;
+       View2D m_View2d;
+
+private:
        QString m_LastFileDialogDir;
 
        lib_gl::GlContextShare m_ContextShare;
-       View3D       m_View3d;
-       View2D       m_View2d;
        GLWidgetList m_Widgets;
 
        QTimer m_AnimationTimer;
index 9557b27..7d40c2f 100644 (file)
@@ -709,7 +709,7 @@ border: 1px solid black;
    <property name="minimumSize">
     <size>
      <width>160</width>
-     <height>172</height>
+     <height>111</height>
     </size>
    </property>
    <property name="allowedAreas">
@@ -739,53 +739,7 @@ border: 1px solid black;
       <number>1</number>
      </property>
      <item>
-      <widget class="QCheckBox" name="checkShowOnlySelect">
-       <property name="text">
-        <string>ShowOnlySelect</string>
-       </property>
-      </widget>
-     </item>
-     <item>
-      <layout class="QHBoxLayout" name="horizontalLayout_4">
-       <item>
-        <widget class="QPushButton" name="pushDeleteSelectedObject">
-         <property name="text">
-          <string>Del</string>
-         </property>
-        </widget>
-       </item>
-       <item>
-        <widget class="QPushButton" name="buttonClearAllGeoms">
-         <property name="text">
-          <string>Clear</string>
-         </property>
-        </widget>
-       </item>
-      </layout>
-     </item>
-     <item>
-      <widget class="QTreeWidget" name="treeObjects">
-       <property name="editTriggers">
-        <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
-       </property>
-       <property name="tabKeyNavigation">
-        <bool>true</bool>
-       </property>
-       <property name="dragDropOverwriteMode">
-        <bool>true</bool>
-       </property>
-       <property name="selectionMode">
-        <enum>QAbstractItemView::ExtendedSelection</enum>
-       </property>
-       <property name="selectionBehavior">
-        <enum>QAbstractItemView::SelectItems</enum>
-       </property>
-       <column>
-        <property name="text">
-         <string notr="true">1</string>
-        </property>
-       </column>
-      </widget>
+      <widget class="WidgetObjectList" name="widgetObjectList" native="true"/>
      </item>
     </layout>
    </widget>
@@ -1315,7 +1269,7 @@ border: 1px solid black;
         <property name="geometry">
          <rect>
           <x>0</x>
-          <y>-239</y>
+          <y>0</y>
           <width>373</width>
           <height>633</height>
          </rect>
@@ -2599,32 +2553,11 @@ border: 1px solid black;
     <string>Del</string>
    </property>
   </action>
-  <action name="actionSelObjectVisible">
-   <property name="checkable">
-    <bool>true</bool>
-   </property>
-   <property name="text">
-    <string>&amp;Visible</string>
-   </property>
-  </action>
-  <action name="actionSelObjectVertexOnlyMode">
-   <property name="checkable">
-    <bool>true</bool>
-   </property>
-   <property name="text">
-    <string>VertexOnlyMode</string>
-   </property>
-  </action>
   <action name="actionAddSample">
    <property name="text">
     <string>&amp;AddSample</string>
    </property>
   </action>
-  <action name="actionSelObjectReload">
-   <property name="text">
-    <string>&amp;ReloadSelObject</string>
-   </property>
-  </action>
   <action name="actionWindowObjectList">
    <property name="text">
     <string>Object List</string>
@@ -2812,16 +2745,6 @@ border: 1px solid black;
     <string>&amp;Normal(Vert)</string>
    </property>
   </action>
-  <action name="actionSelObjectFlipFace">
-   <property name="text">
-    <string>&amp;FlipFace</string>
-   </property>
-  </action>
-  <action name="actionSelObjectFlipNormal">
-   <property name="text">
-    <string>Flip&amp;Normal</string>
-   </property>
-  </action>
   <action name="actionTumble">
    <property name="checkable">
     <bool>true</bool>
@@ -3272,11 +3195,6 @@ border: 1px solid black;
     <string>Open&amp;Appdir</string>
    </property>
   </action>
-  <action name="actionSelObjectOpenDir">
-   <property name="text">
-    <string>&amp;OpenDir</string>
-   </property>
-  </action>
   <action name="actionHideAll">
    <property name="text">
     <string>HideAll</string>
@@ -3301,11 +3219,6 @@ border: 1px solid black;
     <string>Ctrl+Shift+V</string>
    </property>
   </action>
-  <action name="actionActionSelObjectShowOnlyOnce">
-   <property name="text">
-    <string>&amp;ShowOnlyOnce</string>
-   </property>
-  </action>
   <action name="actionWireVBO">
    <property name="checkable">
     <bool>true</bool>
@@ -3322,21 +3235,6 @@ border: 1px solid black;
     <string>ShowSelVertCoord</string>
    </property>
   </action>
-  <action name="actionSelObjectTriangulate">
-   <property name="text">
-    <string>&amp;Triangulate</string>
-   </property>
-  </action>
-  <action name="actionTreeCollapseAll">
-   <property name="text">
-    <string>&amp;Collapse All</string>
-   </property>
-  </action>
-  <action name="actionTreeExpandAll">
-   <property name="text">
-    <string>&amp;Expand All</string>
-   </property>
-  </action>
   <action name="actionUseFixTexture">
    <property name="checkable">
     <bool>true</bool>
@@ -3957,11 +3855,6 @@ border: 1px solid black;
     <string>IO Option Panel</string>
    </property>
   </action>
-  <action name="actionSelObjectResetNormal">
-   <property name="text">
-    <string>ResetNormal</string>
-   </property>
-  </action>
   <action name="actionHighlightSelectedWire">
    <property name="checkable">
     <bool>true</bool>
@@ -4011,6 +3904,12 @@ border: 1px solid black;
    <header>WidgetIOOption.h</header>
    <container>1</container>
   </customwidget>
+  <customwidget>
+   <class>WidgetObjectList</class>
+   <extends>QWidget</extends>
+   <header>WidgetObjectList.h</header>
+   <container>1</container>
+  </customwidget>
  </customwidgets>
  <tabstops>
   <tabstop>scrollArea</tabstop>
@@ -4045,10 +3944,6 @@ border: 1px solid black;
   <tabstop>buttonOpenMatCapEachMaterial</tabstop>
   <tabstop>buttonClearMatCapEachMaterial</tabstop>
   <tabstop>sliderShininess</tabstop>
-  <tabstop>checkShowOnlySelect</tabstop>
-  <tabstop>pushDeleteSelectedObject</tabstop>
-  <tabstop>treeObjects</tabstop>
-  <tabstop>buttonClearAllGeoms</tabstop>
   <tabstop>pushButtonAddCameraRecord</tabstop>
   <tabstop>pushButtonDeleteCameraRecord</tabstop>
   <tabstop>GLWidgetMain</tabstop>
index f7f6404..e08fa98 100644 (file)
@@ -15,7 +15,8 @@ HEADERS += \
     PresetSelectDlg.h \
     MaterialPresetDlg.h \
     QtFreeScroll.h \
-    WidgetIOOption.h
+    WidgetIOOption.h \
+    WidgetObjectList.h
 
 SOURCES += \
     QtViewBase.cpp \
@@ -34,7 +35,8 @@ SOURCES += \
     PresetSelectDlg.cpp \
     MaterialPresetDlg.cpp \
     QtFreeScroll.cpp \
-    WidgetIOOption.cpp
+    WidgetIOOption.cpp \
+    WidgetObjectList.cpp
 
 FORMS += \
     FormMain.ui \
@@ -51,7 +53,8 @@ FORMS += \
     PresetSelectDlg.ui \
     MaterialPresetDlg.ui \
     QtFreeScroll.ui \
-    WidgetIOOption.ui
+    WidgetIOOption.ui \
+    WidgetObjectList.ui
 
 RESOURCES += \
     FormMain.qrc
index f102e55..d66f27b 100644 (file)
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_WidgetObjectList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="GeneratedFiles\Release\moc_DlgAssociationEdit.cpp">
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
       <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
     </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_WidgetObjectList.cpp">
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</ExcludedFromBuild>
+      <ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild>
+    </ClCompile>
     <ClCompile Include="GeometryRender.cpp" />
     <ClCompile Include="GeometryVBO.cpp" />
     <ClCompile Include="GuiConfig.cpp" />
       <XMLDocumentationFileName Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(IntDir)%(Filename)1.xdc</XMLDocumentationFileName>
     </ClCompile>
     <ClCompile Include="WidgetIOOption.cpp" />
+    <ClCompile Include="WidgetObjectList.cpp" />
   </ItemGroup>
   <ItemGroup>
     <CustomBuild Include="CameraRecords.h">
   <ItemGroup>
     <ClInclude Include="AppVersion.h" />
     <ClInclude Include="BuildInfo.h" />
+    <CustomBuild Include="WidgetObjectList.h">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing WidgetObjectList.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fStdAfx.h" "-f../../WidgetObjectList.h"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_DLL -DQT_XML_LIB -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtXml" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtWidgets" "-I." "-I.\.." "-I$(QTDIR)\include\QtNetwork" "-I.\..\..\LibExt\assimp-3.1.1-WinBuild\include" "-I$(PATH_BOOST)\." "-I.\..\..\LibExt\OpenGlut-0.6.3\Include" "-I.\..\..\LibExt\glew-1.12.0\include" "-I.\..\..\LibExt\SDL2-2.0.3\include" "-I.\..\..\LibExt\SDL2_image-2.0.0\include" "-I.\..\..\LibExt\win-iconv-0.0.6" "-I.\..\..\LibExt\meshio" "-I.\..\..\LibExt" "-I.\..\..\Lib"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Moc%27ing WidgetObjectList.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fStdAfx.h" "-f../../WidgetObjectList.h"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_DLL -DQT_XML_LIB -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtXml" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtWidgets" "-I." "-I.\.." "-I$(QTDIR)\include\QtNetwork" "-I.\..\..\LibExt\assimp-3.1.1-WinBuild\include" "-I$(PATH_BOOST)\." "-I.\..\..\LibExt\OpenGlut-0.6.3\Include" "-I.\..\..\LibExt\glew-1.12.0\include" "-I.\..\..\LibExt\SDL2-2.0.3\include" "-I.\..\..\LibExt\SDL2_image-2.0.0\include" "-I.\..\..\LibExt\win-iconv-0.0.6" "-I.\..\..\LibExt\meshio" "-I.\..\..\LibExt" "-I.\..\..\Lib"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Moc%27ing WidgetObjectList.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fStdAfx.h" "-f../../WidgetObjectList.h"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_DLL -DQT_XML_LIB -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtXml" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtWidgets" "-I." "-I.\.." "-I$(QTDIR)\include\QtNetwork" "-I.\..\..\LibExt\assimp-3.1.1-WinBuild\include" "-I$(PATH_BOOST)\." "-I.\..\..\LibExt\OpenGlut-0.6.3\Include" "-I.\..\..\LibExt\glew-1.12.0\include" "-I.\..\..\LibExt\SDL2-2.0.3\include" "-I.\..\..\LibExt\SDL2_image-2.0.0\include" "-I.\..\..\LibExt\win-iconv-0.0.6" "-I.\..\..\LibExt\meshio" "-I.\..\..\LibExt" "-I.\..\..\Lib"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Moc%27ing WidgetObjectList.h...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\moc.exe"  "%(FullPath)" -o ".\GeneratedFiles\$(ConfigurationName)\moc_%(Filename).cpp" "-fStdAfx.h" "-f../../WidgetObjectList.h"  -DUNICODE -DWIN32 -DQT_LARGEFILE_SUPPORT -DQT_THREAD_SUPPORT -DQT_NO_DEBUG -DNDEBUG -DQT_CORE_LIB -DQT_GUI_LIB -DQT_OPENGL_LIB -DQT_DLL -DQT_XML_LIB -DQT_PRINTSUPPORT_LIB -DQT_WIDGETS_LIB -DQT_NETWORK_LIB "-I.\GeneratedFiles" "-I.\GeneratedFiles\$(Configuration)\." "-I$(QTDIR)\include" "-I$(QTDIR)\include\QtCore" "-I$(QTDIR)\include\QtGui" "-I$(QTDIR)\include\QtOpenGL" "-I$(QTDIR)\include\QtXml" "-I$(QTDIR)\include\QtPrintSupport" "-I$(QTDIR)\include\QtWidgets" "-I." "-I.\.." "-I$(QTDIR)\include\QtNetwork" "-I.\..\..\LibExt\assimp-3.1.1-WinBuild\include" "-I$(PATH_BOOST)\." "-I.\..\..\LibExt\OpenGlut-0.6.3\Include" "-I.\..\..\LibExt\glew-1.12.0\include" "-I.\..\..\LibExt\SDL2-2.0.3\include" "-I.\..\..\LibExt\SDL2_image-2.0.0\include" "-I.\..\..\LibExt\win-iconv-0.0.6" "-I.\..\..\LibExt\meshio" "-I.\..\..\LibExt" "-I.\..\..\Lib"</Command>
+    </CustomBuild>
     <CustomBuild Include="WidgetIOOption.h">
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
       <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Moc%27ing WidgetIOOption.h...</Message>
     <ClInclude Include="GeneratedFiles\ui_QGVAboutDlg.h" />
     <ClInclude Include="GeneratedFiles\ui_QtFreeScroll.h" />
     <ClInclude Include="GeneratedFiles\ui_WidgetIOOption.h" />
+    <ClInclude Include="GeneratedFiles\ui_WidgetObjectList.h" />
     <ClInclude Include="GeometryVBO.h" />
     <CustomBuild Include="QGVAboutDlg.h">
       <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\moc.exe;%(FullPath)</AdditionalInputs>
       <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
       <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
     </CustomBuild>
+    <CustomBuild Include="WidgetObjectList.ui">
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Uic%27ing %(Identity)...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Uic%27ing %(Identity)...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Uic%27ing %(Identity)...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
+      <AdditionalInputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(QTDIR)\bin\uic.exe;%(AdditionalInputs)</AdditionalInputs>
+      <Message Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Uic%27ing %(Identity)...</Message>
+      <Outputs Condition="'$(Configuration)|$(Platform)'=='Release|x64'">.\GeneratedFiles\ui_%(Filename).h;%(Outputs)</Outputs>
+      <Command Condition="'$(Configuration)|$(Platform)'=='Release|x64'">"$(QTDIR)\bin\uic.exe" -o ".\GeneratedFiles\ui_%(Filename).h" "%(FullPath)"</Command>
+    </CustomBuild>
   </ItemGroup>
   <ItemGroup>
     <ProjectReference Include="..\..\Lib\LibGeo\LibGeo_vc11.vcxproj">
index cdbe2af..bc21bd8 100644 (file)
     <ClCompile Include="GeneratedFiles\Release\moc_WidgetIOOption.cpp">
       <Filter>Generated Files\Release</Filter>
     </ClCompile>
+    <ClCompile Include="WidgetObjectList.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Debug\moc_WidgetObjectList.cpp">
+      <Filter>Generated Files\Debug</Filter>
+    </ClCompile>
+    <ClCompile Include="GeneratedFiles\Release\moc_WidgetObjectList.cpp">
+      <Filter>Generated Files\Release</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="QtGeoViewer.rc">
     <CustomBuild Include="WidgetIOOption.ui">
       <Filter>Form Files</Filter>
     </CustomBuild>
+    <CustomBuild Include="WidgetObjectList.h">
+      <Filter>Header Files</Filter>
+    </CustomBuild>
+    <CustomBuild Include="WidgetObjectList.ui">
+      <Filter>Form Files</Filter>
+    </CustomBuild>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="MouseButtons.h">
     <ClInclude Include="GeneratedFiles\ui_WidgetIOOption.h">
       <Filter>Generated Files</Filter>
     </ClInclude>
+    <ClInclude Include="GeneratedFiles\ui_WidgetObjectList.h">
+      <Filter>Generated Files</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <None Include="ShaderCode\Mesh\shadowmap.frag">
diff --git a/Src/QtGeoViewer/WidgetObjectList.cpp b/Src/QtGeoViewer/WidgetObjectList.cpp
new file mode 100644 (file)
index 0000000..aa004ee
--- /dev/null
@@ -0,0 +1,343 @@
+#include "stdafx.h"
+#include "WidgetObjectList.h"
+
+#include "FormMain.h"
+#include "TreeUtil.h"
+
+#include <QMessageBox>
+
+#include <Qt5Utility/QGui.h>
+
+
+
+WidgetObjectList::WidgetObjectList(QWidget *parent)
+       : QWidget(parent)
+{
+       ui.setupUi(this);
+}
+
+WidgetObjectList::~WidgetObjectList()
+{
+
+}
+
+void WidgetObjectList::setMainForm(FormMain* mainFrm_)
+{
+       mainFrm = mainFrm_;
+}
+
+void WidgetObjectList::RegisterContextMenu(void)
+{
+       QList<QAction*> actions;
+       actions
+               << ui.actionSelObjectVisible
+               << ui.actionSelObjectVertexOnlyMode
+               << ui.actionSelObjectDelete
+               << ui.actionSelObjectReload
+               << ui.actionSelObjectFlipFace
+               << ui.actionSelObjectFlipNormal
+               << ui.actionSelObjectResetNormal
+               << ui.actionSelObjectOpenDir
+               << ui.actionActionSelObjectShowOnlyOnce
+               << ui.actionSelObjectTriangulate
+               << ui.actionTreeCollapseAll
+               << ui.actionTreeExpandAll;
+
+       QTreeWidget* obj_tree = ui.treeObjects;
+
+       obj_tree->setContextMenuPolicy(Qt::ActionsContextMenu);
+       obj_tree->addActions(actions);
+}
+
+void WidgetObjectList::focusList(void)
+{
+       ui.treeObjects->setFocus();
+}
+
+void WidgetObjectList::SetPrimayrSelectObjectFromScene(SceneMain& scene)
+{
+       QTreeWidget* obj_tree = ui.treeObjects;
+
+       Selection3D& sels = scene.m_Sels;
+       if (!sels.IsObjectSelected())
+               return;
+
+       int sel_idx = sels.GetSelObjectIdx();
+
+       QTreeWidgetItem* on = obj_tree->topLevelItem(sel_idx);
+       if (on == NULL)
+               return;
+
+       if (sels.IsMBufSelected())
+       {
+               QTreeWidgetItem* mn = on->child(sels.GetMBufIdx());
+               obj_tree->setCurrentItem(mn);
+       }
+       else
+       {
+               obj_tree->setCurrentItem(on);
+       }
+}
+
+void WidgetObjectList::OnSelectedObjectChanged(int sel_obj, int sel_mesh)
+{
+       QTreeWidgetItem* on = ui.treeObjects->topLevelItem(sel_obj);
+
+       if (sel_mesh == -1)
+       {
+               ui.treeObjects->setCurrentItem(on);
+       }
+       else
+       {
+               QTreeWidgetItem* mn = on->child(sel_mesh);
+               ui.treeObjects->setCurrentItem(mn);
+       }
+}
+
+void WidgetObjectList::AddSelectObjectIdx(int step)
+{
+       QTreeWidget* obj_tree = ui.treeObjects;
+
+       int num_obj = obj_tree->topLevelItemCount();
+       if (num_obj == 0)
+               return;
+
+       QTreeWidgetItem * i = obj_tree->currentItem();
+       int idx = obj_tree->indexOfTopLevelItem(i);
+       idx += step;
+
+       if (0 > idx)
+               idx = num_obj - 1;
+       else if (idx >= num_obj)
+               idx = 0;
+
+       QTreeWidgetItem * j = obj_tree->topLevelItem(idx);
+       obj_tree->setCurrentItem(j);
+}
+
+void WidgetObjectList::FlipVisibleSelectedObject()
+{
+       QTreeWidget* obj_tree = ui.treeObjects;
+       QTreeWidgetItem * item = obj_tree->currentItem();
+       if (item == NULL)
+               return;
+
+       item->setCheckState(1, FilpState(item->checkState(1)));
+}
+
+Qt::CheckState WidgetObjectList::FilpState(Qt::CheckState state) const
+{
+       if(state == Qt::Checked)
+               return Qt::Unchecked;
+       else
+               return Qt::Checked;
+}
+
+void WidgetObjectList::SetPrimayrSelectObjectToScene(void)
+{
+       Selection3D& sels = mainFrm->m_Scene.m_Sels;
+
+       QTreeWidget* tree = ui.treeObjects;
+
+       QTreeWidgetItem* sel_node = tree->currentItem();
+       if (sel_node == NULL)
+               return;
+
+       QTreeWidgetItem* on = sel_node->parent();
+       if (on == NULL)
+       {
+               int obj_idx = tree->indexOfTopLevelItem(sel_node);
+               sels.SelectObject(obj_idx);
+       }
+       else
+       {
+               int obj_idx = tree->indexOfTopLevelItem(on);
+               int mb_idx = on->indexOfChild(sel_node);
+               sels.SelectMBuf(obj_idx, mb_idx);
+       }
+}
+
+void WidgetObjectList::on_treeObjects_itemChanged(QTreeWidgetItem * item, int column)
+{
+       if (column != 1)
+               return;
+
+       QTreeWidget* obj_tree = ui.treeObjects;
+
+       QTreeWidgetItem* t = item->parent();
+       bool checked = (item->checkState(1) == Qt::Checked);
+       if (t == NULL)
+       {
+               int sel_idx = obj_tree->indexOfTopLevelItem(item);
+               GeomObject& obj = mainFrm->m_Scene.m_Objects[sel_idx];
+               obj.m_Visible = checked;
+       }
+       else
+       {
+               int sel_idx = obj_tree->indexOfTopLevelItem(t);
+               int midx = t->indexOfChild(item);
+
+               GeomObject& obj = mainFrm->m_Scene.m_Objects[sel_idx];
+               MeshBuf& mb = obj.m_MeshAry[midx];
+               mb.m_Visible = checked;
+       }
+
+       mainFrm->updateView_All();
+}
+
+QTreeWidget* WidgetObjectList::GetTree(void)
+{
+       return ui.treeObjects;
+}
+
+void WidgetObjectList::applyConfig(void)
+{
+       ui.checkShowOnlySelect->setChecked(mainFrm->m_View3d.m_Config.m_ShowOnlySelect);
+}
+
+void WidgetObjectList::on_treeObjects_currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem * previous)
+{
+       mainFrm->RefreshObjectSelectState();
+}
+
+void WidgetObjectList::on_checkShowOnlySelect_toggled(bool checked)
+{
+       mainFrm->m_View3d.m_Config.m_ShowOnlySelect = checked;
+       mainFrm->updateView_All();
+}
+
+void WidgetObjectList::on_buttonClearAllGeoms_clicked()
+{
+       mainFrm->ClearAllObjects();
+}
+
+void WidgetObjectList::on_pushDeleteSelectedObject_clicked()
+{
+       mainFrm->DeleteSelectedObject();
+}
+
+
+void WidgetObjectList::on_actionTreeCollapseAll_triggered()
+{
+       TreeUtil::SetAllTopExpand(GetTree(), false);
+}
+
+void WidgetObjectList::on_actionTreeExpandAll_triggered()
+{
+       TreeUtil::SetAllTopExpand(GetTree(), true);
+}
+
+void WidgetObjectList::on_actionSelObjectVisible_triggered()
+{
+       FlipVisibleSelectedObject();
+}
+
+void WidgetObjectList::on_actionSelObjectVertexOnlyMode_triggered()
+{
+       GeomObject* obj = mainFrm->m_Scene.GetPrimaryObject();
+       if (obj == NULL)
+               return;
+
+       obj->m_VertexOnlyMode = !obj->m_VertexOnlyMode;
+
+       ui.actionSelObjectVertexOnlyMode->setChecked(obj->m_VertexOnlyMode);
+
+       mainFrm->updateView_All();
+}
+
+void WidgetObjectList::UpdateContextmenuState(void)
+{
+       GeomObject* obj = mainFrm->m_Scene.GetPrimaryObject();
+       MeshBuf* mbuf = mainFrm->m_Scene.GetPrimaryMeshbuf();
+
+       if (mbuf != NULL)
+       {
+               ui.actionSelObjectVisible->setChecked(mbuf->IsVisible());
+       }
+       else if (obj != NULL)
+       {
+               ui.actionSelObjectVisible->setChecked(obj->m_Visible);
+       }
+
+       if (obj != NULL)
+               ui.actionSelObjectVertexOnlyMode->setChecked(obj->m_VertexOnlyMode);
+}
+
+void WidgetObjectList::on_actionSelObjectTriangulate_triggered()
+{
+       MeshBuf* mbuf = mainFrm->m_Scene.GetPrimaryMeshbuf();
+       if (mbuf == NULL)
+               return;
+
+       mbuf->Triangulate();
+
+       mainFrm->m_View3d.ReleaseAllRenderBuffer();
+
+       mainFrm->RebuildObjectList();
+       mainFrm->updateView_All();
+}
+
+void WidgetObjectList::on_actionSelObjectResetNormal_triggered()
+{
+       mainFrm->m_Scene.RebuildCurselNormal();
+
+       mainFrm->RebuildAllGLBuf();
+}
+
+void WidgetObjectList::on_actionSelObjectReload_triggered()
+{
+       GeomObject* obj = mainFrm->m_Scene.GetPrimaryObject();
+       if (obj == NULL)
+               return;
+
+       if (!obj->IsFileObject())
+       {
+               QMessageBox::information(mainFrm, "", "IsNotFileObject");
+               return;
+       }
+
+       mainFrm->m_Scene.ReloadObject(obj);
+
+       mainFrm->RebuildObjectList();
+
+       mainFrm->m_View3d.ClearRenderMap();
+       mainFrm->updateView_All();
+}
+
+void WidgetObjectList::on_actionSelObjectOpenDir_triggered()
+{
+       GeomObject* obj = mainFrm->m_Scene.GetPrimaryObject();
+       if (obj == NULL)
+               return;
+
+       if (!obj->IsFileObject())
+               return;
+
+       QString path = QString::fromLocal8Bit(obj->m_FilePath.c_str());
+       QString p2 = QDir::toNativeSeparators(path);
+       QGui::ShowExplorerFileSel(p2);
+}
+
+void WidgetObjectList::on_actionSelObjectFlipNormal_triggered()
+{
+       mainFrm->m_Scene.FlipCurselFace(true);
+
+       mainFrm->RebuildAllGLBuf();
+}
+
+void WidgetObjectList::on_actionSelObjectFlipFace_triggered()
+{
+       mainFrm->m_Scene.FlipCurselFace(false);
+
+       mainFrm->RebuildAllGLBuf();
+}
+
+void WidgetObjectList::on_actionActionSelObjectShowOnlyOnce_triggered()
+{
+       mainFrm->ShowObjectOnlySelected();
+}
+
+void WidgetObjectList::on_actionSelObjectDelete_triggered()
+{
+       mainFrm->DeleteSelectedObject();
+}
diff --git a/Src/QtGeoViewer/WidgetObjectList.h b/Src/QtGeoViewer/WidgetObjectList.h
new file mode 100644 (file)
index 0000000..29660bd
--- /dev/null
@@ -0,0 +1,72 @@
+#pragma once
+
+#include <QWidget>
+#include "ui_WidgetObjectList.h"
+
+#include "../LibQtGeoViewerCore/SceneMain.h"
+
+
+class FormMain;
+
+class WidgetObjectList : public QWidget
+{
+       Q_OBJECT
+
+public:
+       WidgetObjectList(QWidget *parent = 0);
+       ~WidgetObjectList();
+
+       void setMainForm(FormMain* mainFrm_);
+
+       void RegisterContextMenu(void);
+
+       void focusList(void);
+
+       void SetPrimayrSelectObjectFromScene(SceneMain& scene);
+
+       void OnSelectedObjectChanged(int sel_obj, int sel_mesh);
+
+       void AddSelectObjectIdx(int step);
+
+       void FlipVisibleSelectedObject(void);
+
+       Qt::CheckState FilpState(Qt::CheckState state) const;
+
+       void DeleteSelectedObject(void);
+       void SetPrimayrSelectObjectToScene(void);
+
+       QTreeWidget* GetTree(void);
+
+       void applyConfig(void);
+
+       void UpdateContextmenuState(void);
+
+private slots:
+       void on_treeObjects_itemChanged( QTreeWidgetItem * item, int column);
+       void on_treeObjects_currentItemChanged(QTreeWidgetItem * current, QTreeWidgetItem * previous);
+       void on_checkShowOnlySelect_toggled(bool checked);
+
+       void on_pushDeleteSelectedObject_clicked();
+       void on_buttonClearAllGeoms_clicked();
+
+       void on_actionTreeCollapseAll_triggered();
+       void on_actionTreeExpandAll_triggered();
+
+       void on_actionSelObjectVisible_triggered();
+       void on_actionSelObjectVertexOnlyMode_triggered();
+       void on_actionSelObjectTriangulate_triggered();
+
+       void on_actionSelObjectResetNormal_triggered();
+
+       void on_actionSelObjectReload_triggered();
+       void on_actionSelObjectOpenDir_triggered();
+       void on_actionSelObjectFlipNormal_triggered();
+       void on_actionSelObjectFlipFace_triggered();
+       void on_actionActionSelObjectShowOnlyOnce_triggered();
+       void on_actionSelObjectDelete_triggered();
+
+private:
+       Ui::WidgetObjectList ui;
+
+       FormMain* mainFrm;
+};
diff --git a/Src/QtGeoViewer/WidgetObjectList.ui b/Src/QtGeoViewer/WidgetObjectList.ui
new file mode 100644 (file)
index 0000000..7898afc
--- /dev/null
@@ -0,0 +1,155 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>WidgetObjectList</class>
+ <widget class="QWidget" name="WidgetObjectList">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>400</width>
+    <height>300</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>WidgetObjectList</string>
+  </property>
+  <layout class="QVBoxLayout" name="verticalLayout">
+   <property name="spacing">
+    <number>1</number>
+   </property>
+   <property name="leftMargin">
+    <number>1</number>
+   </property>
+   <property name="topMargin">
+    <number>1</number>
+   </property>
+   <property name="rightMargin">
+    <number>1</number>
+   </property>
+   <property name="bottomMargin">
+    <number>1</number>
+   </property>
+   <item>
+    <widget class="QCheckBox" name="checkShowOnlySelect">
+     <property name="text">
+      <string>ShowOnlySelect</string>
+     </property>
+    </widget>
+   </item>
+   <item>
+    <widget class="QTreeWidget" name="treeObjects">
+     <property name="editTriggers">
+      <set>QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed</set>
+     </property>
+     <property name="tabKeyNavigation">
+      <bool>true</bool>
+     </property>
+     <property name="dragDropOverwriteMode">
+      <bool>true</bool>
+     </property>
+     <property name="selectionMode">
+      <enum>QAbstractItemView::ExtendedSelection</enum>
+     </property>
+     <property name="selectionBehavior">
+      <enum>QAbstractItemView::SelectItems</enum>
+     </property>
+     <column>
+      <property name="text">
+       <string notr="true">1</string>
+      </property>
+     </column>
+    </widget>
+   </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_4">
+     <item>
+      <widget class="QPushButton" name="pushDeleteSelectedObject">
+       <property name="text">
+        <string>Del</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="buttonClearAllGeoms">
+       <property name="text">
+        <string>Clear</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+  </layout>
+  <action name="actionTreeCollapseAll">
+   <property name="text">
+    <string>&amp;Collapse All</string>
+   </property>
+  </action>
+  <action name="actionTreeExpandAll">
+   <property name="text">
+    <string>&amp;Expand All</string>
+   </property>
+  </action>
+  <action name="actionSelObjectVisible">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>&amp;Visible</string>
+   </property>
+  </action>
+  <action name="actionSelObjectVertexOnlyMode">
+   <property name="checkable">
+    <bool>true</bool>
+   </property>
+   <property name="text">
+    <string>VertexOnlyMode</string>
+   </property>
+  </action>
+  <action name="actionSelObjectTriangulate">
+   <property name="text">
+    <string>&amp;Triangulate</string>
+   </property>
+  </action>
+  <action name="actionSelObjectResetNormal">
+   <property name="text">
+    <string>ResetNormal</string>
+   </property>
+  </action>
+  <action name="actionSelObjectReload">
+   <property name="text">
+    <string>&amp;ReloadSelObject</string>
+   </property>
+  </action>
+  <action name="actionSelObjectOpenDir">
+   <property name="text">
+    <string>&amp;OpenDir</string>
+   </property>
+  </action>
+  <action name="actionSelObjectFlipNormal">
+   <property name="text">
+    <string>Flip&amp;Normal</string>
+   </property>
+  </action>
+  <action name="actionSelObjectFlipFace">
+   <property name="text">
+    <string>&amp;FlipFace</string>
+   </property>
+  </action>
+  <action name="actionActionSelObjectShowOnlyOnce">
+   <property name="text">
+    <string>&amp;ShowOnlyOnce</string>
+   </property>
+  </action>
+  <action name="actionSelObjectDelete">
+   <property name="text">
+    <string>&amp;DeleteSelected</string>
+   </property>
+   <property name="shortcut">
+    <string>Del</string>
+   </property>
+  </action>
+ </widget>
+ <layoutdefault spacing="6" margin="11"/>
+ <resources/>
+ <connections/>
+</ui>