...
 
Commits (6)
......@@ -88,6 +88,8 @@
#include <OpenFlipper/widgets/messageBox/StaysOnTopMessageBox.hh>
#include <OpenFlipper/common/PluginStorage.hh>
#define WIDGET_HEIGHT 800
#define WIDGET_WIDTH 800
......@@ -236,7 +238,7 @@ Core::init() {
Qt::AlignBottom | Qt::AlignLeft , Qt::white);
}
coreWidget_ = new CoreWidget(viewModes_ , plugins_, coreSlots_);
coreWidget_ = new CoreWidget(viewModes_ , coreSlots_);
spinBoxEventFilter_.registerScrollArea(coreWidget_->getToolboxScrollArea());
spinBoxEventFilter_.registerScrollArea(coreWidget_->getToolboxArea());
......@@ -718,6 +720,12 @@ Core::~Core()
//-----------------------------------------------------------------------------
std::vector<PluginInfo>& Core::plugins() {
return PluginStorage::plugins();
};
//-----------------------------------------------------------------------------
void
Core::slotMouseEventIdentify( QMouseEvent* _event )
{
......@@ -1169,8 +1177,8 @@ void Core::slotExit() {
clearAll();
// Notify plugins of imminent exit.
for ( uint i = 0 ; i < plugins_.size() ; ++i ){
BaseInterface* basePlugin = qobject_cast< BaseInterface * >(plugins_[i].plugin);
for ( uint i = 0 ; i < plugins().size() ; ++i ){
BaseInterface* basePlugin = qobject_cast< BaseInterface * >(plugins()[i].plugin);
// Dont call exit if we cannot get the Plugin
if ( basePlugin )
......@@ -1178,7 +1186,7 @@ void Core::slotExit() {
}
// Delete Plugins to actually call their destructor
for(PluginInfo p : plugins_)
for(PluginInfo p : plugins())
delete p.plugin;
// close the log file to ensure everything is writeen correctly
......@@ -1300,9 +1308,9 @@ void Core::slotSetSlotDescription(QString _slotName, QString _slotDescrip
//find plugin
PluginInfo* pluginInfo = 0;
for (uint i=0; i < plugins_.size(); i++)
if (plugins_[i].plugin == sender())
pluginInfo = &plugins_[i];
for (uint i=0; i < plugins().size(); i++)
if (plugins()[i].plugin == sender())
pluginInfo = &plugins()[i];
if (pluginInfo == 0){
emit log(LOGERR, tr("Unable to set slot-description. Plugin not found!"));
......@@ -1378,9 +1386,9 @@ void Core::slotGetDescription(QString _function, QString& _fnDescript
//find plugin
PluginInfo* pluginInfo = 0;
for (uint i=0; i < plugins_.size(); i++)
if (plugins_[i].rpcName == pluginName)
pluginInfo = &plugins_[i];
for (uint i=0; i < plugins().size(); i++)
if (plugins()[i].rpcName == pluginName)
pluginInfo = &plugins()[i];
if (pluginInfo == 0){
emit log(LOGERR, tr("Unable to get slot-description. Plugin not found!"));
......@@ -1524,12 +1532,12 @@ void Core::writeVersionNumbers(QString _filename){
ini.add_entry( "Core" , "VersionLinux" , OpenFlipper::Options::coreVersion() );
//add pluginVersions
for (uint i=0; i < plugins_.size(); i++){
for (uint i=0; i < plugins().size(); i++){
if ( OpenFlipper::Options::isWindows() )
ini.add_entry( plugins_[i].name , "VersionWindows" , plugins_[i].version );
ini.add_entry( plugins()[i].name , "VersionWindows" , plugins()[i].version );
else
ini.add_entry( plugins_[i].name , "VersionLinux" , plugins_[i].version );
ini.add_entry( plugins()[i].name , "VersionLinux" , plugins()[i].version );
}
ini.disconnect();
......
......@@ -121,7 +121,6 @@
#include <OpenFlipper/threads/JobInfo.hh>
#include <OpenFlipper/common/FileTypes.hh>
#include <OpenFlipper/common/InformationPlugins.hh>
#include "SpinBoxEventFilter.hh"
......@@ -1214,17 +1213,19 @@ private slots:
//===========================================================================
public :
const std::vector<PluginInfo> plugins() const {return plugins_; };
std::vector<PluginInfo>& plugins();
private:
/// List of all loaded plugins_
std::vector<PluginInfo> plugins_;
/// Index of Plugins toolbox widget
int toolboxindex_;
/// Load all plugins from default plugin directory and from INI-File
void loadPlugins();
/// Print all info collected about plugin during loading
void printPluginLoadLog(const QString& errors,const QString& warnings);
private slots:
/// Show Plugins Dialog
void slotShowPlugins();
......
......@@ -467,11 +467,11 @@ void connectPlugins( Core* c, const std::vector<PluginInfo>& plugins_, QString _
}
void Core::slotCrossPluginConnect( QString _pluginName1, const char* _signal, QString _pluginName2, const char* _slot) {
connectPlugins(this, plugins_, _pluginName1, _signal, _pluginName2, _slot, false);
connectPlugins(this, plugins(), _pluginName1, _signal, _pluginName2, _slot, false);
}
void Core::slotCrossPluginConnectQueued( QString _pluginName1, const char* _signal, QString _pluginName2, const char* _slot) {
connectPlugins(this, plugins_, _pluginName1, _signal, _pluginName2, _slot, true);
connectPlugins(this, plugins(), _pluginName1, _signal, _pluginName2, _slot, true);
}
//========================================================================================
......
......@@ -85,6 +85,8 @@ class PluginInfo{
version(""),
path(""),
rpcName(""),
errors(""),
warnings(""),
optionsWidget(0),
buildIn(true),
status(FAILED)
......@@ -108,6 +110,8 @@ class PluginInfo{
version(_i.version),
path(_i.path),
rpcName(_i.rpcName),
errors(_i.errors),
warnings(_i.warnings),
rpcFunctions(_i.rpcFunctions),
slotInfos(_i.slotInfos),
keys(_i.keys),
......@@ -141,6 +145,12 @@ class PluginInfo{
/// Clean rpc name of the plugin
QString rpcName;
/// Store errors encountered during plugin loading
QString errors;
/// Store warnings encountered during plugin loading
QString warnings;
/// List of exported rpc slots
QStringList rpcFunctions;
......
This diff is collapsed.
......@@ -68,8 +68,8 @@
void Core::slotPluginExists( QString _pluginName , bool& _exists ) {
for ( int i = 0 ; i < (int)plugins_.size(); ++i ) {
if ( plugins_[i].rpcName == _pluginName ) {
for ( int i = 0 ; i < (int)plugins().size(); ++i ) {
if ( plugins()[i].rpcName == _pluginName ) {
_exists = true;
return;
}
......@@ -82,8 +82,8 @@ void Core::slotFunctionExists( QString _pluginName , QString _functionName , boo
//Find plugin
int plugin = -1;
for ( int i = 0 ; i < (int)plugins_.size(); ++i ) {
if ( plugins_[i].rpcName == _pluginName ) {
for ( int i = 0 ; i < (int)plugins().size(); ++i ) {
if ( plugins()[i].rpcName == _pluginName ) {
plugin = i;
break;
}
......@@ -94,15 +94,15 @@ void Core::slotFunctionExists( QString _pluginName , QString _functionName , boo
return;
}
_exists = plugins_[plugin].rpcFunctions.contains(_functionName);
_exists = plugins()[plugin].rpcFunctions.contains(_functionName);
}
void Core::slotCall( QString _pluginName , QString _functionName , bool& _success ) {
//Find plugin
int plugin = -1;
for ( int i = 0 ; i < (int)plugins_.size(); ++i ) {
if ( plugins_[i].rpcName == _pluginName ) {
for ( int i = 0 ; i < (int)plugins().size(); ++i ) {
if ( plugins()[i].rpcName == _pluginName ) {
plugin = i;
break;
}
......@@ -114,7 +114,7 @@ void Core::slotCall( QString _pluginName , QString _functionName , bool& _succes
return;
}
if ( !plugins_[plugin].rpcFunctions.contains(_functionName) ) {
if ( !plugins()[plugin].rpcFunctions.contains(_functionName) ) {
_success = false;
emit log(LOGERR, tr("Unable to call function from Plugin : ") + _pluginName);
emit log(LOGERR, tr("Function ") + _functionName + tr(" not found!"));
......
......@@ -52,6 +52,9 @@
//#include <ObjectTypes/Light/Light.hh>
#include <OpenFlipper/common/FileTypes.hh>
/// Save Settings (slot is called from CoreWidget's File-Menu)
void Core::saveSettings(){
......
......@@ -231,13 +231,13 @@ void Core::setToolBoxSide(QString _side) {
//-----------------------------------------------------------------------------
QWidget *Core::getToolbox(QString _pluginName, QString _toolboxName) {
std::vector<PluginInfo>::const_iterator pluginIt = plugins_.end();
for (std::vector<PluginInfo>::const_iterator it = plugins_.begin(), it_end = plugins_.end(); it != it_end; ++it) {
std::vector<PluginInfo>::const_iterator pluginIt = plugins().end();
for (std::vector<PluginInfo>::const_iterator it = plugins().begin(), it_end = plugins().end(); it != it_end; ++it) {
if (it->name == _pluginName) {
pluginIt = it;
}
}
if (pluginIt == plugins_.end()) return 0;
if (pluginIt == plugins().end()) return 0;
for (std::vector<std::pair<QString , QWidget*> >::const_iterator it = pluginIt->toolboxWidgets.begin(), it_end = pluginIt->toolboxWidgets.end();
it != it_end; ++it) {
......@@ -266,8 +266,8 @@ void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon,
int id = -1;
// Find the plugin which added this Toolbox
for ( uint i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].plugin == sender() ) {
for ( uint i = 0 ; i < plugins().size(); ++i ) {
if ( plugins()[i].plugin == sender() ) {
id = i;
break;
}
......@@ -275,8 +275,8 @@ void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon,
// Find the scripting plugin because we assign this toolBox to it as we did not find the original sender
if ( id == -1 ) {
for ( uint i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].name == "Scripting" ) {
for ( uint i = 0 ; i < plugins().size(); ++i ) {
if ( plugins()[i].name == "Scripting" ) {
id = i;
break;
}
......@@ -290,9 +290,9 @@ void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon,
}
spinBoxEventFilter_.hookUpToWidgetTree(_widget);
plugins_[id].toolboxWidgets.push_back( std::pair< QString,QWidget* >( _name , _widget) );
plugins_[id].toolboxIcons.push_back( _icon );
plugins_[id].headerAreaWidgets.push_back( std::pair< QString,QWidget* >( _name , _headerAreaWidget) );
plugins()[id].toolboxWidgets.push_back( std::pair< QString,QWidget* >( _name , _widget) );
plugins()[id].toolboxIcons.push_back( _icon );
plugins()[id].headerAreaWidgets.push_back( std::pair< QString,QWidget* >( _name , _headerAreaWidget) );
// add widget name to viewMode 'all'
if ( !viewModes_[0]->visibleToolboxes.contains(_name) ){
......
......@@ -58,7 +58,7 @@
/**
* \file FileTypes.cc
* This File contains the management of file plugins.
* This File contains the file type management vectors
*/
......@@ -66,14 +66,12 @@
#include <OpenFlipper/common/FileTypes.hh>
// Stores information about file types supported by the file plugins.
static std::vector<fileTypes> supportedTypes_;
std::vector<fileTypes>& supportedTypes() {
return supportedTypes_;
}
//=============================================================================
//=============================================================================
......@@ -58,12 +58,11 @@
/**
* \file FileTypes.hh
* This File contains the management of file plugins.
* This File contains the file type management vectors
*/
#ifndef FILETYPES_HH
#define FILETYPES_HH
#pragma once
#include <QString>
#include <OpenFlipper/common/GlobalDefines.hh>
......@@ -84,10 +83,8 @@ struct fileTypes {
// Get vector of supported types
DLLEXPORT
std::vector<fileTypes>&
supportedTypes();
std::vector<fileTypes>& supportedTypes();
//=============================================================================
#endif // FILETYPES_HH defined
//=============================================================================
/*===========================================================================*\
* *
* OpenFlipper *
* Copyright (c) 2001-2015, RWTH-Aachen University *
* Department of Computer Graphics and Multimedia *
* All rights reserved. *
* www.openflipper.org *
* *
*---------------------------------------------------------------------------*
* This file is part of OpenFlipper. *
*---------------------------------------------------------------------------*
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* *
* 1. Redistributions of source code must retain the above copyright notice, *
* this list of conditions and the following disclaimer. *
* *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* *
* 3. Neither the name of the copyright holder nor the names of its *
* contributors may be used to endorse or promote products derived from *
* this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $LastChangedBy$ *
* $Date$ *
* *
\*===========================================================================*/
//=============================================================================
//
// Types
//
//=============================================================================
/**
* \file PluginStorage.cc
* This File contains the management of plugins.
*/
//== INCLUDES =================================================================
#include <OpenFlipper/common/PluginStorage.hh>
namespace PluginStorage {
/// reference to Core plugin list
static std::vector<PluginInfo> plugins_;
/// reference to failed plugin list
static std::vector<PluginInfo> pluginsFailed_;
std::vector<PluginInfo>& plugins() {
return plugins_;
}
std::vector<PluginInfo>& pluginsFailed() {
return pluginsFailed_;
}
}
//=============================================================================
//=============================================================================
/*===========================================================================*\
* *
* OpenFlipper *
* Copyright (c) 2001-2015, RWTH-Aachen University *
* Department of Computer Graphics and Multimedia *
* All rights reserved. *
* www.openflipper.org *
* *
*---------------------------------------------------------------------------*
* This file is part of OpenFlipper. *
*---------------------------------------------------------------------------*
* *
* Redistribution and use in source and binary forms, with or without *
* modification, are permitted provided that the following conditions *
* are met: *
* *
* 1. Redistributions of source code must retain the above copyright notice, *
* this list of conditions and the following disclaimer. *
* *
* 2. Redistributions in binary form must reproduce the above copyright *
* notice, this list of conditions and the following disclaimer in the *
* documentation and/or other materials provided with the distribution. *
* *
* 3. Neither the name of the copyright holder nor the names of its *
* contributors may be used to endorse or promote products derived from *
* this software without specific prior written permission. *
* *
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
* *
\*===========================================================================*/
/*===========================================================================*\
* *
* $Revision$ *
* $LastChangedBy$ *
* $Date$ *
* *
\*===========================================================================*/
//=============================================================================
//
// Types
//
//=============================================================================
/**
* \file PluginStorage.hh
* This File contains the management vector for the plugins.
*/
#pragma once
#include <OpenFlipper/common/GlobalDefines.hh>
#include <OpenFlipper/Core/PluginInfo.hh>
//== INCLUDES =================================================================
namespace PluginStorage {
/// Get the vector of all PluginInfos
DLLEXPORT
std::vector<PluginInfo>& plugins();
/// Get the vector of all PluginInfos for plugins that failed to load at startup
DLLEXPORT
std::vector<PluginInfo>& pluginsFailed();
}
//=============================================================================
//=============================================================================
......@@ -6,7 +6,7 @@
<rect>
<x>0</x>
<y>0</y>
<width>653</width>
<width>994</width>
<height>699</height>
</rect>
</property>
......@@ -57,7 +57,7 @@
<string>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;
&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;
p, li { white-space: pre-wrap; }
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:'Noto Sans'; font-size:10pt; font-weight:400; font-style:normal;&quot;&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'DejaVu Sans'; font-size:11pt;&quot;&gt;%1 is developed by:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'DejaVu Sans'; font-size:11pt; font-weight:600;&quot;&gt;Department of Computer Science VIII&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-family:'DejaVu Sans'; font-size:11pt; font-weight:600;&quot;&gt;Aachen University of Technology (RWTH)&lt;/span&gt;&lt;/p&gt;
......
......@@ -61,8 +61,10 @@
#include <common/glew_wrappers.hh>
#include "CoreWidget.hh"
#include <OpenFlipper/common/PluginStorage.hh>
#include <OpenFlipper/common/FileTypes.hh>
#include <QGLFormat>
#ifndef WIN32
......@@ -744,6 +746,69 @@ void CoreWidget::showAboutWidget( ) {
aboutWidget_->OpenFlipperAbout->append( "\t\t Save: " + supportedTypes()[i].saveFilters );
}
// =====================================================================================
// List all Plugins
// =====================================================================================
aboutWidget_->OpenFlipperAbout->append("\n");
aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
aboutWidget_->OpenFlipperAbout->append(tr("Loaded Plugins:"));
aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
for ( uint i = 0 ; i < plugins().size() ; ++i ) {
aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
aboutWidget_->OpenFlipperAbout->append( "\t" + plugins()[i].name );
aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
aboutWidget_->OpenFlipperAbout->append( "\t\t Version: \t\t" + plugins()[i].version );
aboutWidget_->OpenFlipperAbout->append( "\t\t Description: \t" + plugins()[i].description );
aboutWidget_->OpenFlipperAbout->append( "\t\t Path \t\t" + plugins()[i].path );
if ( !plugins()[i].warnings.isEmpty() ) {
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::darkYellow);
aboutWidget_->OpenFlipperAbout->append( "\t\t Warnings: \t\t" + plugins()[i].warnings );
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::black);
}
if ( !plugins()[i].errors.isEmpty() ) {
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::darkRed);
aboutWidget_->OpenFlipperAbout->append( "\t\t Errors: \t\t" + plugins()[i].errors );
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::black);
}
}
// =====================================================================================
// List failed Plugins
// =====================================================================================
aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
aboutWidget_->OpenFlipperAbout->append(tr("Failed Plugins:"));
aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
for ( unsigned i = 0 ; i < PluginStorage::pluginsFailed().size() ; ++i ) {
aboutWidget_->OpenFlipperAbout->setCurrentFont(boldFont);
aboutWidget_->OpenFlipperAbout->append( "\t" + PluginStorage::pluginsFailed()[i].name );
aboutWidget_->OpenFlipperAbout->setCurrentFont(standardFont);
aboutWidget_->OpenFlipperAbout->append( "\t\t Version: \t\t" + PluginStorage::pluginsFailed()[i].version );
aboutWidget_->OpenFlipperAbout->append( "\t\t Description: \t" + PluginStorage::pluginsFailed()[i].description );
aboutWidget_->OpenFlipperAbout->append( "\t\t Path \t\t" + PluginStorage::pluginsFailed()[i].path );
if ( !PluginStorage::pluginsFailed()[i].warnings.isEmpty() ) {
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::darkYellow);
aboutWidget_->OpenFlipperAbout->append( "\t\t Warnings: \t\t" + PluginStorage::pluginsFailed()[i].warnings );
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::black);
}
if ( !PluginStorage::pluginsFailed()[i].errors.isEmpty() ) {
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::darkRed);
aboutWidget_->OpenFlipperAbout->append( "\t\t Errors: \t\t" + PluginStorage::pluginsFailed()[i].errors );
aboutWidget_->OpenFlipperAbout->setTextColor(Qt::black);
}
}
// =====================================================================================
// List of build-in resources
// =====================================================================================
......
......@@ -58,7 +58,7 @@
//== INCLUDES =================================================================
// -------------------- mview
#include "CoreWidget.hh"
//== IMPLEMENTATION ==========================================================
......@@ -773,8 +773,8 @@ void CoreWidget::slotAddContextItem( QAction* _entry , DataType _dataType ,Conte
void CoreWidget::slotAddContextItemToViewMode( QAction* _entry ) {
int id = -1;
// Find the plugin which added this Context Menu
for ( uint i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].plugin == sender() ) {
for ( uint i = 0 ; i < plugins().size(); ++i ) {
if ( plugins()[i].plugin == sender() ) {
id = i;
break;
}
......@@ -782,8 +782,8 @@ void CoreWidget::slotAddContextItemToViewMode( QAction* _entry ) {
// Find the scripting plugin because we assign this context menu to it as we did not find the original sender
if ( id == -1 ) {
for ( uint i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].name == "Scripting" ) {
for ( uint i = 0 ; i < plugins().size(); ++i ) {
if ( plugins()[i].name == "Scripting" ) {
id = i;
break;
}
......@@ -796,11 +796,11 @@ void CoreWidget::slotAddContextItemToViewMode( QAction* _entry ) {
}
}
plugins_[id].contextMenus.push_back( std::pair< QString,QAction* >( plugins_[id].name + "->" + _entry->text(), _entry) );
plugins()[id].contextMenus.push_back( std::pair< QString,QAction* >( plugins()[id].name + "->" + _entry->text(), _entry) );
// add widget name to viewMode 'all'
if ( !viewModes_[0]->visibleContextMenus.contains(plugins_[id].name + "->" + _entry->text()) ){
viewModes_[0]->visibleContextMenus << plugins_[id].name + "->" + _entry->text();
if ( !viewModes_[0]->visibleContextMenus.contains(plugins()[id].name + "->" + _entry->text()) ){
viewModes_[0]->visibleContextMenus << plugins()[id].name + "->" + _entry->text();
viewModes_[0]->visibleContextMenus.sort();
}
......
......@@ -69,6 +69,8 @@
#include <ACG/Scenegraph/SceneGraphAnalysis.hh>
#include <ACG/GL/ShaderCache.hh>
#include <OpenFlipper/common/PluginStorage.hh>
// -------------------- Qt event Includes
#include <QGLFormat>
......@@ -136,7 +138,6 @@ QToolBar * PickMode::toolbar() const {
*/
CoreWidget::
CoreWidget( QVector<ViewMode*>& _viewModes,
std::vector<PluginInfo>& _plugins,
QList< SlotInfo >& _coreSlots ) :
QMainWindow(),
coreSlots_(_coreSlots),
......@@ -187,7 +188,6 @@ CoreWidget( QVector<ViewMode*>& _viewModes,
stereoSettingsWidget_(0),
aboutWidget_(0),
optionsWidget_(0),
plugins_(_plugins),
stereoActive_(false),
actionMode_(Viewer::PickingMode),
lastActionMode_(Viewer::ExamineMode),
......@@ -661,6 +661,13 @@ CoreWidget::~CoreWidget() {
//-----------------------------------------------------------------------------
std::vector<PluginInfo>& CoreWidget::plugins() {
return PluginStorage::plugins();
};
//-----------------------------------------------------------------------------
/** Set viewer to Fullscreen Mode and back
*/
void
......@@ -782,10 +789,10 @@ void CoreWidget::showToolBar( bool _state )
if ( ! viewerToolbar_->isFloating() )
viewerToolbar_->hide();
for (uint p=0; p < plugins_.size(); p++)
for ( uint j = 0 ; j < plugins_[p].toolbars.size(); ++j ) {
if ( ! plugins_[p].toolbars[j].second->isFloating() )
plugins_[p].toolbars[j].second->hide();
for (uint p=0; p < plugins().size(); p++)
for ( uint j = 0 ; j < plugins()[p].toolbars.size(); ++j ) {
if ( ! plugins()[p].toolbars[j].second->isFloating() )
plugins()[p].toolbars[j].second->hide();
}
}
else
......@@ -911,7 +918,7 @@ void CoreWidget::showOptionsWidget() {
return;
if ( optionsWidget_ == 0 ) {
optionsWidget_ = new OptionsWidget(plugins_, coreKeys_, invKeys_, 0);
optionsWidget_ = new OptionsWidget(plugins(), coreKeys_, invKeys_, 0);
connect(optionsWidget_,SIGNAL(applyOptions()),this,SIGNAL(applyOptions()));
connect(optionsWidget_,SIGNAL(saveOptions()),this,SIGNAL(saveOptions()));
connect(optionsWidget_,SIGNAL(addKeyMapping(int,Qt::KeyboardModifiers,QObject*,int)),
......
......@@ -292,7 +292,7 @@ public:
friend class Core;
/// constructor
CoreWidget( QVector<ViewMode*>& _viewModes, std::vector<PluginInfo>& _plugins, QList< SlotInfo >& _coreSlots );
CoreWidget( QVector<ViewMode*>& _viewModes, QList< SlotInfo >& _coreSlots );
/// destructor
~CoreWidget();
......@@ -451,6 +451,19 @@ public:
/** @} */
//===========================================================================
/** @name GUI creation
* @{ */
//===========================================================================
private:
/// Convenient way to access plugin list
std::vector<PluginInfo>& plugins();
/** @} */
//===========================================================================
/** @name Video Capturing
* @{ */
......@@ -1278,11 +1291,6 @@ public:
/** @} */
private :
std::vector<PluginInfo>& plugins_;
//===========================================================================
/** @name Viewer Controls
* @{ */
......
......@@ -58,11 +58,8 @@
//== INCLUDES =================================================================
// -------------------- mview
#include "CoreWidget.hh"
// -------------------- ACG
// -------------------- Qt
#include "CoreWidget.hh"
//== IMPLEMENTATION ==========================================================
......@@ -71,8 +68,8 @@ void CoreWidget::slotAddToolbar(QToolBar* _toolbar) {
int id = -1;
// Find the plugin which added this Toolbox
for ( unsigned int i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].plugin == sender() ) {
for ( unsigned int i = 0 ; i < plugins().size(); ++i ) {
if ( plugins()[i].plugin == sender() ) {
id = i;
break;
}
......@@ -80,8 +77,8 @@ void CoreWidget::slotAddToolbar(QToolBar* _toolbar) {
// Find the scripting plugin because we assign this toolBox to it as we did not find the original sender
if ( id == -1 ) {
for ( unsigned int i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].name == "Scripting" ) {
for ( unsigned int i = 0 ; i < plugins().size(); ++i ) {
if ( plugins()[i].name == "Scripting" ) {
id = i;
break;
}
......@@ -108,7 +105,7 @@ void CoreWidget::slotAddToolbar(QToolBar* _toolbar) {
// Remember which plugin this toolbar belongs to
if ( id != -1 )
plugins_[id].toolbars.push_back( std::pair< QString,QToolBar* >( _toolbar->windowTitle() , _toolbar) );
plugins()[id].toolbars.push_back( std::pair< QString,QToolBar* >( _toolbar->windowTitle() , _toolbar) );
// add widget name to viewMode 'all'
if ( !viewModes_[0]->visibleToolbars.contains( _toolbar->windowTitle() ) ){
......
......@@ -57,9 +57,9 @@ KeyBinding CoreWidget::getKeyBinding(QObject* _plugin, int _keyIndex ){
if (_plugin == 0)
return coreKeys_[_keyIndex];
for (uint i=0; i < plugins_.size(); i++){
if (plugins_[i].plugin == _plugin)
return plugins_[i].keys[_keyIndex];
for (uint i=0; i < plugins().size(); i++){
if (plugins()[i].plugin == _plugin)
return plugins()[i].keys[_keyIndex];
}
emit log(LOGERR,tr("ERROR: could not get KeyBinding"));
......@@ -70,9 +70,9 @@ QString CoreWidget::getRPCName(QObject* _plugin ){
if (_plugin == 0)
return "";
for (uint i=0; i < plugins_.size(); i++){
if (plugins_[i].plugin == _plugin)
return plugins_[i].rpcName;
for (uint i=0; i < plugins().size(); i++){
if (plugins()[i].plugin == _plugin)
return plugins()[i].rpcName;
}
emit log(LOGERR,tr("ERROR: could not get rpcname"));
......@@ -225,13 +225,13 @@ void CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QSt
//then check if the key is already registered by a different plugin
if (!found)
for (uint i=0; i < plugins_.size(); i++)
for (int k=0; k < plugins_[i].keys.count(); k++)
if (plugins_[i].keys[k].key == _key
&& plugins_[i].keys[k].modifiers == _modifiers){
for (uint i=0; i < plugins().size(); i++)
for (int k=0; k < plugins()[i].keys.count(); k++)
if (plugins()[i].keys[k].key == _key
&& plugins()[i].keys[k].modifiers == _modifiers){
found = true;
multi = plugins_[i].keys[k].multiUse;
name = plugins_[i].name;
multi = plugins()[i].keys[k].multiUse;
name = plugins()[i].name;
break;
}
......@@ -260,9 +260,9 @@ void CoreWidget::slotRegisterKey(int _key, Qt::KeyboardModifiers _modifiers, QSt
//find plugin
PluginInfo* pluginInfo = 0;
for (uint i=0; i < plugins_.size(); i++)
if (plugins_[i].plugin == sender())
pluginInfo = &plugins_[i];
for (uint i=0; i < plugins().size(); i++)
if (plugins()[i].plugin == sender())
pluginInfo = &plugins()[i];
if (pluginInfo == 0){
emit log(LOGERR, tr("Unable to register key. Plugin not found!"));
......@@ -309,26 +309,26 @@ void CoreWidget::slotRegisterSlotKeyBindings(){
}
//check all plugins
for (uint i=0; i < plugins_.size(); i++)
for (uint i=0; i < plugins().size(); i++)
for (int j=0; j < plugins_[i].rpcFunctions.count(); j++){
for (int j=0; j < plugins()[i].rpcFunctions.count(); j++){
//only consider functions without arguments
if ( !plugins_[i].rpcFunctions[j].contains( "()" )
|| plugins_[i].rpcFunctions[j] == "version()")
if ( !plugins()[i].rpcFunctions[j].contains( "()" )
|| plugins()[i].rpcFunctions[j] == "version()")
continue;
KeyBinding kb;
kb.key = -1;
kb.modifiers = 0;
kb.description = plugins_[i].rpcFunctions[j];
kb.description = plugins()[i].rpcFunctions[j];
kb.multiUse = true;
kb.slot = true;
plugins_[i].keys.append( kb );
plugins()[i].keys.append( kb );
keys_.insert( std::make_pair( std::make_pair(-1, (QFlags<Qt::KeyboardModifier>)0) , std::make_pair(plugins_[i].plugin, plugins_[i].keys.size()-1) ) );
invKeys_.insert( std::make_pair( std::make_pair(plugins_[i].plugin, plugins_[i].keys.size()-1) , std::make_pair(-1, (QFlags<Qt::KeyboardModifier>)0) ) );
keys_.insert( std::make_pair( std::make_pair(-1, (QFlags<Qt::KeyboardModifier>)0) , std::make_pair(plugins()[i].plugin, plugins()[i].keys.size()-1) ) );
invKeys_.insert( std::make_pair( std::make_pair(plugins()[i].plugin, plugins()[i].keys.size()-1) , std::make_pair(-1, (QFlags<Qt::KeyboardModifier>)0) ) );
}
}
......@@ -440,9 +440,9 @@ void CoreWidget::loadKeyBindings(INIFile& _ini){
if (pluginNames[i] != "Core" ){
//search for the plugin
for (uint i=0; i < plugins_.size(); i++)
if (plugins_[i].rpcName == pluginNames[i] ){
plugin = plugins_[i].plugin;
for (uint i=0; i < plugins().size(); i++)
if (plugins()[i].rpcName == pluginNames[i] ){
plugin = plugins()[i].plugin;
break;
}
......
......@@ -370,12 +370,12 @@ void CoreWidget::slotChangeView(QString _mode, QStringList _toolboxWidgets, QStr
//find all widgets that should be visible
for (int i=0; i < _toolboxWidgets.size(); i++) {
for (uint p=0; p < plugins_.size(); p++){
for ( uint j = 0 ; j < plugins_[p].toolboxWidgets.size(); ++j )
if (_toolboxWidgets[i] == plugins_[p].toolboxWidgets[j].first ) {
for (uint p=0; p < plugins().size(); p++){
for ( uint j = 0 ; j < plugins()[p].toolboxWidgets.size(); ++j )
if (_toolboxWidgets[i] == plugins()[p].toolboxWidgets[j].first ) {
bool skip = false;
if (toolBox_->plugins().contains(plugins_[p].plugin)) {
if (toolBox_->plugins().contains(plugins()[p].plugin)) {
// account for the case, where a plugin can have several
// toolboxes, for example 'Scripting'
if (toolBox_->names().contains(_toolboxWidgets[i]))
......@@ -384,17 +384,17 @@ void CoreWidget::slotChangeView(QString _mode, QStringList _toolboxWidgets, QStr
// only add items that have not been added yet
if (!skip) {
toolBox_->addItem (plugins_[p].plugin, plugins_[p].toolboxWidgets[j].second, plugins_[p].toolboxWidgets[j].first, plugins_[p].toolboxIcons[j], plugins_[p].headerAreaWidgets[j].second );
toolBox_->addItem (plugins()[p].plugin, plugins()[p].toolboxWidgets[j].second, plugins()[p].toolboxWidgets[j].first, plugins()[p].toolboxIcons[j], plugins()[p].headerAreaWidgets[j].second );
// move item to the correct position
if (i < toolBox_->lastPos_) {
toolBox_->moveItemToPosition(plugins_[p].plugin, _toolboxWidgets[i], i);
toolBox_->moveItemToPosition(plugins()[p].plugin, _toolboxWidgets[i], i);
} else
toolBox_->lastPos_ = i;
// check if we have to restore the state
// of toolboxes added via scripts
if (plugins_[p].name == "Scripting") {
if (plugins()[p].name == "Scripting") {
QFile statesFile(OpenFlipper::Options::configDirStr() + OpenFlipper::Options::dirSeparator() + "WindowStates.dat");
......@@ -428,12 +428,12 @@ void CoreWidget::slotChangeView(QString _mode, QStringList _toolboxWidgets, QStr
if ( ! OpenFlipperSettings().value("Core/Gui/Toolbar/hidden",false).toBool())
{
//find all Toolbars that should be visible and hide the others
for (uint p=0; p < plugins_.size(); p++)
for ( uint j = 0 ; j < plugins_[p].toolbars.size(); ++j )
if (_toolbars.contains( plugins_[p].toolbars[j].first ) )
plugins_[p].toolbars[j].second->show();
for (uint p=0; p < plugins().size(); p++)
for ( uint j = 0 ; j < plugins()[p].toolbars.size(); ++j )
if (_toolbars.contains( plugins()[p].toolbars[j].first ) )
plugins()[p].toolbars[j].second->show();
else
plugins_[p].toolbars[j].second->hide();
plugins()[p].toolbars[j].second->hide();
// Check the Main Toolbar:
......
......@@ -52,7 +52,7 @@
#include <QtWidgets>
#include <OpenFlipper/common/FileTypes.hh>
class FileOptionsDialog : public QDialog
{
......
......@@ -56,6 +56,9 @@
#include <map>
#include <OpenFlipper/common/FileTypes.hh>
class LoadWidget : public QFileDialog
{
Q_OBJECT
......