From 3b8176535b1cb36d8938d368cbeaa211b14d94f0 Mon Sep 17 00:00:00 2001 From: tanderson Date: Thu, 12 Jan 2012 18:29:28 -0500 Subject: [PATCH 1/4] implemented --- src/Gui/Action.cpp | 1 + src/Gui/CommandView.cpp | 134 ++++++++++++++++++++++++++++--- src/Gui/Document.cpp | 13 +++ src/Gui/View3DInventorViewer.cpp | 25 +++++- src/Gui/View3DInventorViewer.h | 13 +++ src/Gui/ViewProvider.cpp | 33 ++++++-- src/Gui/ViewProvider.h | 4 + 7 files changed, 203 insertions(+), 20 deletions(-) diff --git a/src/Gui/Action.cpp b/src/Gui/Action.cpp index 5cdc6d412..4c6dd3d25 100644 --- a/src/Gui/Action.cpp +++ b/src/Gui/Action.cpp @@ -296,6 +296,7 @@ int ActionGroup::checkedAction() const void ActionGroup::setCheckedAction(int i) { _group->actions()[i]->setChecked(true); + this->setIcon(_group->actions()[i]->icon()); } /** diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index e31c8f898..547aaeb6e 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -31,6 +31,7 @@ # include # include # include +# include #endif #include "Command.h" @@ -524,7 +525,22 @@ bool StdCmdToggleClipPlane::isActive(void) #endif } -DEF_STD_CMD_ACL(StdCmdDrawStyle); +//=========================================================================== +// StdCmdDrawStyle +//=========================================================================== +class StdCmdDrawStyle : public Gui::Command +{ +public: + StdCmdDrawStyle(); + virtual ~StdCmdDrawStyle(){} + virtual void languageChange(); + virtual const char* className() const {return "StdCmdDrawStyle";} + void updateIcon(const Gui::MDIView* view); +protected: + virtual void activated(int iMsg); + virtual bool isActive(void); + virtual Gui::Action * createAction(void); +}; StdCmdDrawStyle::StdCmdDrawStyle() : Command("Std_DrawStyle") @@ -534,6 +550,8 @@ StdCmdDrawStyle::StdCmdDrawStyle() sToolTipText = QT_TR_NOOP("Draw style"); sStatusTip = QT_TR_NOOP("Draw style"); eType = Alter3DView; + + this->getGuiApplication()->signalActivateView.connect(boost::bind(&StdCmdDrawStyle::updateIcon, this, _1)); } Gui::Action * StdCmdDrawStyle::createAction(void) @@ -542,8 +560,17 @@ Gui::Action * StdCmdDrawStyle::createAction(void) pcAction->setDropDownMenu(true); applyCommandData(pcAction); - pcAction->addAction(QString()); - pcAction->addAction(QString()); + QAction* a0 = pcAction->addAction(QString()); + a0->setCheckable(true); + QAction* a1 = pcAction->addAction(QString()); + a1->setCheckable(true); + QAction* a2 = pcAction->addAction(QString()); + a2->setCheckable(true); + QAction* a3 = pcAction->addAction(QString()); + a3->setCheckable(true); + QAction* a4 = pcAction->addAction(QString()); + a4->setCheckable(true); + _pcAction = pcAction; languageChange(); return pcAction; @@ -566,23 +593,106 @@ void StdCmdDrawStyle::languageChange() QCoreApplication::CodecForTr)); a[1]->setText(QCoreApplication::translate( - "Std_DrawStyle", "Wireframe", 0, + "Std_DrawStyle", "Flat lines", 0, QCoreApplication::CodecForTr)); a[1]->setToolTip(QCoreApplication::translate( + "Std_DrawStyle", "Flat lines mode", 0, + QCoreApplication::CodecForTr)); + + a[2]->setText(QCoreApplication::translate( + "Std_DrawStyle", "Shaded", 0, + QCoreApplication::CodecForTr)); + a[2]->setToolTip(QCoreApplication::translate( + "Std_DrawStyle", "Shaded mode", 0, + QCoreApplication::CodecForTr)); + + a[3]->setText(QCoreApplication::translate( + "Std_DrawStyle", "Wireframe", 0, + QCoreApplication::CodecForTr)); + a[3]->setToolTip(QCoreApplication::translate( "Std_DrawStyle", "Wireframe mode", 0, QCoreApplication::CodecForTr)); + + a[4]->setText(QCoreApplication::translate( + "Std_DrawStyle", "Points", 0, + QCoreApplication::CodecForTr)); + a[4]->setToolTip(QCoreApplication::translate( + "Std_DrawStyle", "Points mode", 0, + QCoreApplication::CodecForTr)); +} + +void StdCmdDrawStyle::updateIcon(const MDIView *view) +{ + const Gui::View3DInventor *view3d = dynamic_cast(view); + if (!view3d) + return; + Gui::View3DInventorViewer *viewer = view3d->getViewer(); + if (!viewer) + return; + std::string mode(viewer->getOverrideMode()); + Gui::ActionGroup *actionGroup = dynamic_cast(_pcAction); + if (!actionGroup) + return; + + if (mode == "Flat Lines") + { + actionGroup->setCheckedAction(1); + return; + } + if (mode == "Shaded") + { + actionGroup->setCheckedAction(2); + return; + } + if (mode == "Wireframe") + { + actionGroup->setCheckedAction(3); + return; + } + if (mode == "Point") + { + actionGroup->setCheckedAction(4); + return; + } + actionGroup->setCheckedAction(0); } void StdCmdDrawStyle::activated(int iMsg) { - View3DInventor* view = qobject_cast(getMainWindow()->activeWindow()); - if (view) { - SoQtViewer::DrawStyle style = SoQtViewer::VIEW_AS_IS; - if (iMsg == 0) - style = SoQtViewer::VIEW_AS_IS; - else if (iMsg == 1) - style = SoQtViewer::VIEW_LINE; - view->getViewer()->setDrawStyle(SoQtViewer::STILL, style); + Gui::Document *doc = this->getActiveGuiDocument(); + std::list views = doc->getMDIViews(); + std::list::iterator viewIt; + bool oneChangedSignal(false); + for (viewIt = views.begin(); viewIt != views.end(); viewIt++) + { + View3DInventor* view = qobject_cast(*viewIt); + if (view) + { + View3DInventorViewer* viewer; + viewer = view->getViewer(); + if (viewer) + { + switch (iMsg) + { + case 1: + (oneChangedSignal) ? viewer->updateOverrideMode("Flat Lines") : viewer->setOverrideMode("Flat Lines"); + break; + case 2: + (oneChangedSignal) ? viewer->updateOverrideMode("Shaded") : viewer->setOverrideMode("Shaded"); + break; + case 3: + (oneChangedSignal) ? viewer->updateOverrideMode("Wireframe") : viewer->setOverrideMode("Wireframe"); + break; + case 4: + (oneChangedSignal) ? viewer->updateOverrideMode("Point") : viewer->setOverrideMode("Point"); + break; + default: + (oneChangedSignal) ? viewer->updateOverrideMode("As Is") : viewer->setOverrideMode("As Is"); + break; + } + oneChangedSignal = true; + } + } } } diff --git a/src/Gui/Document.cpp b/src/Gui/Document.cpp index ccbc5e3f7..3732f082f 100644 --- a/src/Gui/Document.cpp +++ b/src/Gui/Document.cpp @@ -893,6 +893,19 @@ void Document::createView(const char* sType) { View3DInventor* view3D = new View3DInventor(this, getMainWindow()); + //get first view override mode and copy + std::list theViews = this->getMDIViews(); + std::list::iterator viewIt; + for (viewIt = theViews.begin(); viewIt != theViews.end(); ++viewIt) + { + View3DInventor *tempView = dynamic_cast(*viewIt); + if (!tempView) + continue; + std::string overrideMode = tempView->getViewer()->getOverrideMode(); + view3D->getViewer()->setOverrideMode(overrideMode); + break; + } + // attach the viewprovider std::map::const_iterator It1; for (It1=d->_ViewProviderMap.begin();It1!=d->_ViewProviderMap.end();++It1) diff --git a/src/Gui/View3DInventorViewer.cpp b/src/Gui/View3DInventorViewer.cpp index 6aa1192d1..5159fdacf 100644 --- a/src/Gui/View3DInventorViewer.cpp +++ b/src/Gui/View3DInventorViewer.cpp @@ -141,9 +141,9 @@ SOQT_OBJECT_ABSTRACT_SOURCE(View3DInventorViewer); // ************************************************************************* View3DInventorViewer::View3DInventorViewer (QWidget *parent, const char *name, - SbBool embed, Type type, SbBool build) - : inherited (parent, name, embed, type, build), editViewProvider(0), navigation(0), - framebuffer(0), editing(FALSE), redirected(FALSE), allowredir(FALSE),axisCross(0),axisGroup(0) + SbBool embed, Type type, SbBool build) + : inherited (parent, name, embed, type, build), editViewProvider(0),navigation(0), + editing(FALSE), redirected(FALSE), overrideMode("As Is") { Gui::Selection().Attach(this); @@ -360,6 +360,7 @@ void View3DInventorViewer::addViewProvider(ViewProvider* pcProvider) SoSeparator* back = pcProvider->getBackRoot (); if (back) backgroundroot->addChild(back); + pcProvider->setOverrideMode(this->getOverrideMode()); _ViewProviderSet.insert(pcProvider); } @@ -412,6 +413,24 @@ SbBool View3DInventorViewer::isEditingViewProvider() const return this->editViewProvider ? true : false; } +/// display override mode +void View3DInventorViewer::setOverrideMode(const std::string &mode) +{ + if (mode == overrideMode) + return; + overrideMode = mode; + for (std::set::iterator it = _ViewProviderSet.begin(); it != _ViewProviderSet.end(); ++it) + (*it)->setOverrideMode(mode); +} + +/// update override mode. doesn't affect providers +void View3DInventorViewer::updateOverrideMode(const std::string &mode) +{ + if (mode == overrideMode) + return; + overrideMode = mode; +} + void View3DInventorViewer::clearBuffer(void * userdata, SoAction * action) { if (action->isOfType(SoGLRenderAction::getClassTypeId())) { diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index 1728e381f..8ff411891 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -159,6 +159,10 @@ public: SbBool isEditingViewProvider() const; /// reset from edit mode void resetEditingViewProvider(); + /// display override mode + void setOverrideMode(const std::string &mode); + void updateOverrideMode(const std::string &mode); + std::string getOverrideMode() {return overrideMode;} //@} /** @name Making pictures */ @@ -359,6 +363,15 @@ private: SbBool redirected; SbBool allowredir; + void setCursorRepresentation(int mode); + +public: + void addFlag(Flag*, FlagLayout::Position); + +private: + QPointer _flaglayout; + std::string overrideMode; + // friends friend class NavigationStyle; friend class GLPainter; diff --git a/src/Gui/ViewProvider.cpp b/src/Gui/ViewProvider.cpp index f148fafae..bee3e9dfc 100644 --- a/src/Gui/ViewProvider.cpp +++ b/src/Gui/ViewProvider.cpp @@ -61,7 +61,7 @@ using namespace Gui; PROPERTY_SOURCE_ABSTRACT(Gui::ViewProvider, App::PropertyContainer) ViewProvider::ViewProvider() - : pcAnnotation(0), pyViewObject(0), _iActualMode(-1), _iEditMode(-1), _updateData(true) + : pcAnnotation(0), pyViewObject(0), _iActualMode(-1), _iEditMode(-1), _updateData(true), viewOverrideMode(-1) { pcRoot = new SoSeparator(); pcRoot->ref(); @@ -261,10 +261,10 @@ void ViewProvider::setDisplayMaskMode( const char* type ) { std::map::const_iterator it = _sDisplayMaskModes.find( type ); if (it != _sDisplayMaskModes.end()) - pcModeSwitch->whichChild = it->second; + _iActualMode = it->second; else - pcModeSwitch->whichChild = -1; - _iActualMode = pcModeSwitch->whichChild.getValue(); + _iActualMode = -1; + setModeSwitch(); } std::vector ViewProvider::getDisplayMaskModes() const @@ -298,7 +298,7 @@ void ViewProvider::hide(void) void ViewProvider::show(void) { - pcModeSwitch->whichChild = _iActualMode; + setModeSwitch(); } bool ViewProvider::isShow(void) const @@ -316,6 +316,29 @@ bool ViewProvider::isVisible() const return isShow(); } +void ViewProvider::setOverrideMode(const std::string &mode) +{ + if (mode == "As Is") + viewOverrideMode = -1; + else { + std::map::const_iterator it = _sDisplayMaskModes.find(mode); + if (it == _sDisplayMaskModes.end()) + return; //view style not supported + viewOverrideMode = (*it).second; + } + if (pcModeSwitch->whichChild.getValue() != -1) + setModeSwitch(); +} + +void ViewProvider::setModeSwitch() +{ + if (viewOverrideMode == -1) + pcModeSwitch->whichChild = _iActualMode; + else + if (viewOverrideMode < pcModeSwitch->getNumChildren()) + pcModeSwitch->whichChild = viewOverrideMode; +} + void ViewProvider::setDefaultMode(int val) { _iActualMode = val; diff --git a/src/Gui/ViewProvider.h b/src/Gui/ViewProvider.h index 3d2ae6dbf..a1f3e5e1a 100644 --- a/src/Gui/ViewProvider.h +++ b/src/Gui/ViewProvider.h @@ -192,6 +192,8 @@ public: virtual bool isShow(void) const; void setVisible(bool); bool isVisible() const; + /// Overrides the display mode with mode. + void setOverrideMode(const std::string &mode); //@} @@ -307,8 +309,10 @@ protected: ViewProviderPy* pyViewObject; private: + void setModeSwitch(); int _iActualMode; int _iEditMode; + int viewOverrideMode; std::string _sCurrentMode; std::map _sDisplayMaskModes; bool _updateData; From 6f914269303cef80b386fc772c82ec153d15c619 Mon Sep 17 00:00:00 2001 From: tanderson Date: Sat, 14 Jan 2012 01:19:19 -0500 Subject: [PATCH 2/4] adding drawstyle icons --- src/Gui/CommandView.cpp | 8 + src/Gui/Icons/DrawStyleAsIs.svg | 281 ++++++++++++++++++++++++ src/Gui/Icons/DrawStyleFlatLines.svg | 265 +++++++++++++++++++++++ src/Gui/Icons/DrawStylePoints.svg | 312 +++++++++++++++++++++++++++ src/Gui/Icons/DrawStyleShaded.svg | 265 +++++++++++++++++++++++ src/Gui/Icons/DrawStyleWireFrame.svg | 260 ++++++++++++++++++++++ src/Gui/Icons/resource.qrc | 17 +- 7 files changed, 1402 insertions(+), 6 deletions(-) create mode 100644 src/Gui/Icons/DrawStyleAsIs.svg create mode 100644 src/Gui/Icons/DrawStyleFlatLines.svg create mode 100644 src/Gui/Icons/DrawStylePoints.svg create mode 100644 src/Gui/Icons/DrawStyleShaded.svg create mode 100644 src/Gui/Icons/DrawStyleWireFrame.svg diff --git a/src/Gui/CommandView.cpp b/src/Gui/CommandView.cpp index 547aaeb6e..ca5027dc0 100644 --- a/src/Gui/CommandView.cpp +++ b/src/Gui/CommandView.cpp @@ -549,6 +549,7 @@ StdCmdDrawStyle::StdCmdDrawStyle() sMenuText = QT_TR_NOOP("Draw style"); sToolTipText = QT_TR_NOOP("Draw style"); sStatusTip = QT_TR_NOOP("Draw style"); + sPixmap = "DrawStyleAsIs"; eType = Alter3DView; this->getGuiApplication()->signalActivateView.connect(boost::bind(&StdCmdDrawStyle::updateIcon, this, _1)); @@ -562,14 +563,21 @@ Gui::Action * StdCmdDrawStyle::createAction(void) QAction* a0 = pcAction->addAction(QString()); a0->setCheckable(true); + a0->setIcon(BitmapFactory().pixmap("DrawStyleAsIs")); + a0->setChecked(true); QAction* a1 = pcAction->addAction(QString()); a1->setCheckable(true); + a1->setIcon(BitmapFactory().pixmap("DrawStyleFlatLines")); QAction* a2 = pcAction->addAction(QString()); a2->setCheckable(true); + a2->setIcon(BitmapFactory().pixmap("DrawStyleShaded")); QAction* a3 = pcAction->addAction(QString()); a3->setCheckable(true); + a3->setIcon(BitmapFactory().pixmap("DrawStyleWireFrame")); QAction* a4 = pcAction->addAction(QString()); a4->setCheckable(true); + a4->setIcon(BitmapFactory().pixmap("DrawStylePoints")); + pcAction->setIcon(a0->icon()); _pcAction = pcAction; languageChange(); diff --git a/src/Gui/Icons/DrawStyleAsIs.svg b/src/Gui/Icons/DrawStyleAsIs.svg new file mode 100644 index 000000000..c66aa6153 --- /dev/null +++ b/src/Gui/Icons/DrawStyleAsIs.svg @@ -0,0 +1,281 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Gui/Icons/DrawStyleFlatLines.svg b/src/Gui/Icons/DrawStyleFlatLines.svg new file mode 100644 index 000000000..97931c5ba --- /dev/null +++ b/src/Gui/Icons/DrawStyleFlatLines.svg @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Gui/Icons/DrawStylePoints.svg b/src/Gui/Icons/DrawStylePoints.svg new file mode 100644 index 000000000..993dc54ac --- /dev/null +++ b/src/Gui/Icons/DrawStylePoints.svg @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Gui/Icons/DrawStyleShaded.svg b/src/Gui/Icons/DrawStyleShaded.svg new file mode 100644 index 000000000..0e9d2cadd --- /dev/null +++ b/src/Gui/Icons/DrawStyleShaded.svg @@ -0,0 +1,265 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Gui/Icons/DrawStyleWireFrame.svg b/src/Gui/Icons/DrawStyleWireFrame.svg new file mode 100644 index 000000000..f351a870b --- /dev/null +++ b/src/Gui/Icons/DrawStyleWireFrame.svg @@ -0,0 +1,260 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/Gui/Icons/resource.qrc b/src/Gui/Icons/resource.qrc index dc5128f77..f9378563a 100644 --- a/src/Gui/Icons/resource.qrc +++ b/src/Gui/Icons/resource.qrc @@ -95,11 +95,16 @@ Part_Measure_Clear_All.svg Part_Measure_Toggle_All.svg spaceball_button.svg - SpNav-PanLR.svg - SpNav-PanUD.svg - SpNav-Roll.svg - SpNav-Spin.svg - SpNav-Tilt.svg - SpNav-Zoom.svg + SpNav-PanLR.png + SpNav-PanUD.png + SpNav-Roll.png + SpNav-Spin.png + SpNav-Tilt.png + SpNav-Zoom.png + DrawStyleAsIs.svg + DrawStyleFlatLines.svg + DrawStylePoints.svg + DrawStyleShaded.svg + DrawStyleWireFrame.svg From 46c1f7835c115fada5dd2ba3da5dfbd7f72df047 Mon Sep 17 00:00:00 2001 From: tanderson Date: Wed, 18 Apr 2012 21:16:07 -0400 Subject: [PATCH 3/4] adding to menus and toolbars --- src/Gui/Workbench.cpp | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/src/Gui/Workbench.cpp b/src/Gui/Workbench.cpp index 30c38ce35..ee3be9a39 100644 --- a/src/Gui/Workbench.cpp +++ b/src/Gui/Workbench.cpp @@ -403,7 +403,7 @@ void StdWorkbench::setupContextMenu(const char* recipient, MenuItem* item) const measure->setCommand("Measure"); *measure << "View_Measure_Toggle_All" << "View_Measure_Clear_All"; - *item << "Std_ViewFitAll" << "Std_ViewFitSelection" << StdViews << measure + *item << "Std_ViewFitAll" << "Std_ViewFitSelection" << "Std_DrawStyle" << StdViews << measure << "Separator" << "Std_ViewDockUndockFullscreen"; if (Gui::Selection().countObjectsOfType(App::DocumentObject::getClassTypeId()) > 0 ) @@ -482,7 +482,7 @@ MenuItem* StdWorkbench::setupMenuBar() const MenuItem* view = new MenuItem( menuBar ); view->setCommand("&View"); *view << "Std_ViewCreate" << "Std_OrthographicCamera" << "Std_PerspectiveCamera" << "Separator" - << stdviews << "Std_FreezeViews" << "Separator" << view3d << zoom + << stdviews << "Std_FreezeViews" << "Std_DrawStyle" << "Separator" << view3d << zoom << "Std_ViewDockUndockFullscreen" << "Std_AxisCross" << "Std_ToggleClipPlane" << "Std_TextureMapping" << "Separator" << visu << "Std_ToggleVisibility" << "Std_ToggleNavigation" @@ -549,10 +549,9 @@ ToolBarItem* StdWorkbench::setupToolBars() const // View ToolBarItem* view = new ToolBarItem( root ); view->setCommand("View"); - *view << "Std_ViewFitAll" << "Separator" << "Std_ViewAxo" << "Separator" << "Std_ViewFront" + *view << "Std_ViewFitAll" << "Std_DrawStyle" << "Separator" << "Std_ViewAxo" << "Separator" << "Std_ViewFront" << "Std_ViewTop" << "Std_ViewRight" << "Separator" << "Std_ViewRear" << "Std_ViewBottom" << "Std_ViewLeft" << "Separator" << "Std_MeasureDistance" ; - return root; } From 0972be8e72c09b3018982ac1ac979a4c1275941a Mon Sep 17 00:00:00 2001 From: Yorik van Havre Date: Thu, 16 Jan 2014 10:26:31 -0200 Subject: [PATCH 4/4] Merge of tanderson-viewoverride4 branch --- src/Gui/View3DInventorViewer.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/src/Gui/View3DInventorViewer.h b/src/Gui/View3DInventorViewer.h index 8ff411891..f00d36da6 100644 --- a/src/Gui/View3DInventorViewer.h +++ b/src/Gui/View3DInventorViewer.h @@ -363,13 +363,6 @@ private: SbBool redirected; SbBool allowredir; - void setCursorRepresentation(int mode); - -public: - void addFlag(Flag*, FlagLayout::Position); - -private: - QPointer _flaglayout; std::string overrideMode; // friends