Commit 17bcbe86 authored by Hans-Christian Ebke's avatar Hans-Christian Ebke

Changed the header area widget installation mechanism to something more robust.

parent 1f4d1986
Pipeline #2087 passed with stage
in 77 minutes and 54 seconds
......@@ -111,6 +111,18 @@ class ToolboxInterface {
* @param _icon Icon for the toolbox
*/
virtual void addToolbox( QString _name , QWidget* _widget, QIcon* _icon) {};
/** \brief Add a toolbox widget to the gui with the given name, icon and header area widget.
*
* This signal adds a toolbox widget to the toolbox area on the right. And sets an icon for it
*
* @param _name Visible name of the toolbox
* @param _widget Pointer to the toolbox widget
* @param _icon Icon for the toolbox
* @param _headerAreaWidget Widget displayed in the toolbox header between
* the title and the detach button.
*/
virtual void addToolbox( QString _name , QWidget* _widget, QIcon* _icon, QWidget* _headerAreaWidget) {};
};
......
......@@ -1022,6 +1022,10 @@ private slots:
/// Add a Toolbox from a plugin or from scripting (with icon)
void addToolbox(QString _name ,QWidget* _widget, QIcon* _icon);
/// Add a Toolbox from a plugin or from scripting (with icon)
void addToolbox(QString _name ,QWidget* _widget, QIcon* _icon,
QWidget* _headerAreaWidget);
/**
* Get a toolbox.
*
......
......@@ -93,6 +93,7 @@ class PluginInfo{
slotInfos.clear();
keys.clear();
toolboxWidgets.clear();
headerAreaWidgets.clear();
toolboxIcons.clear();
toolbars.clear();
contextMenus.clear();
......@@ -111,6 +112,7 @@ class PluginInfo{
slotInfos(_i.slotInfos),
keys(_i.keys),
toolboxWidgets(_i.toolboxWidgets),
headerAreaWidgets(_i.headerAreaWidgets),
toolboxIcons(_i.toolboxIcons),
toolbars(_i.toolbars),
contextMenus(_i.contextMenus),
......@@ -151,6 +153,9 @@ class PluginInfo{
/// Pointer to plugins toolbox widget (if available)
std::vector< std::pair< QString , QWidget* > > toolboxWidgets;
/// Pointer to plugins header area widgets (if available)
std::vector< std::pair< QString , QWidget* > > headerAreaWidgets;
/// Pointer to plugins toolbox widget icons (if available)
std::vector< QIcon* > toolboxIcons;
......
......@@ -1069,7 +1069,11 @@ void Core::loadPlugin(const QString& _filename,const bool _silent, QString& _lic
if ( checkSignal(plugin, "addToolbox(QString,QWidget*,QIcon*)"))
connect(plugin, SIGNAL( addToolbox(QString,QWidget*,QIcon*) ),
this, SLOT( addToolbox(QString,QWidget*,QIcon*) ),Qt::DirectConnection );
}
if ( checkSignal(plugin, "addToolbox(QString,QWidget*,QIcon*,QWidget*)"))
connect(plugin, SIGNAL( addToolbox(QString,QWidget*,QIcon*,QWidget*) ),
this, SLOT( addToolbox(QString,QWidget*,QIcon*,QWidget*) ),Qt::DirectConnection );
}
//Check if the plugin supports ViewMode-Interface
ViewModeInterface* viewModePlugin = qobject_cast< ViewModeInterface * >(plugin);
......
......@@ -254,48 +254,15 @@ void Core::activateToolbox(QString _pluginName, QString _toolboxName, bool activ
}
void Core::addToolbox(QString _name ,QWidget* _widget) {
int id = -1;
// Find the plugin which added this Toolbox
for ( uint i = 0 ; i < plugins_.size(); ++i ) {
if ( plugins_[i].plugin == sender() ) {
id = i;
break;
}
}
// 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" ) {
id = i;
break;
}
}
if ( id == -1 ) {
std::cerr << "Unknown sender plugin when adding Toolbox!" << std::endl;
return;
}
}
spinBoxEventFilter_.hookUpToWidgetTree(_widget);
plugins_[id].toolboxWidgets.push_back( std::pair< QString,QWidget* >( _name , _widget) );
plugins_[id].toolboxIcons.push_back( 0 );
// add widget name to viewMode 'all'
if ( !viewModes_[0]->visibleToolboxes.contains(_name) ){
viewModes_[0]->visibleToolboxes << _name;
viewModes_[0]->visibleToolboxes.sort();
}
setViewMode( OpenFlipper::Options::currentViewMode() );
addToolbox(_name, _widget, 0, 0);
}
//-----------------------------------------------------------------------------
void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon) {
addToolbox(_name, _widget, _icon, 0);
}
void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon,
QWidget *_headerAreaWidget) {
int id = -1;
// Find the plugin which added this Toolbox
......@@ -325,6 +292,7 @@ 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) );
// add widget name to viewMode 'all'
if ( !viewModes_[0]->visibleToolboxes.contains(_name) ){
......
......@@ -75,20 +75,10 @@ SideArea::SideArea (QWidget *_parent) :
//-----------------------------------------------------------------------------
void SideArea::addItem (QObject const * const _plugin, QWidget *_w, QString _name, QIcon *_icon)
void SideArea::addItem (QObject const * const _plugin, QWidget *_w, QString _name,
QIcon *_icon, QWidget *_headerAreaWidget)
{
SideElement *e = new SideElement (this, _w, _name, _icon);
layout_->addWidget (e);
items_.push_back (e);
plugins_.push_back(_plugin);
itemNames_.push_back(_name);
}
//-----------------------------------------------------------------------------
void SideArea::addItem (QObject const * const _plugin, QWidget *_w, QString _name)
{
SideElement *e = new SideElement (this, _w, _name);
SideElement *e = new SideElement (this, _w, _name, _icon, _headerAreaWidget);
layout_->addWidget (e);
items_.push_back (e);
plugins_.push_back(_plugin);
......
......@@ -85,20 +85,15 @@ class SideArea : public QWidget {
*/
SideArea (QWidget *_parent = 0);
/** Adds a plugin tool widget
\param _plugin plugin corresponding to the widget
\param _w Plugin widget
\param _name Plugin name
*/
void addItem (QObject const * const _plugin, QWidget *_w, QString _name);
/** Adds a plugin tool widget
\param _plugin plugin corresponding to the widget
\param _w Plugin widget
\param _name Plugin name
\param _icon an icon
\param _headerAreaWidget
*/
void addItem (QObject const * const _plugin, QWidget *_w, QString _name, QIcon* _icon);
void addItem (QObject const * const _plugin, QWidget *_w, QString _name,
QIcon* _icon = 0, QWidget *_headerAreaWidget = 0);
/// clears the whole tool widget area
void clear ();
......
......@@ -64,9 +64,11 @@
//== IMPLEMENTATION ==========================================================
SideElement::SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon* _icon) :
SideElement::SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon* _icon,
QWidget *_headerAreaWidget) :
parent_ (_parent),
widget_ (_w),
headerAreaWidget_(_headerAreaWidget),
name_ (_name),
icon_ (_icon),
active_ (0),
......@@ -98,12 +100,11 @@ SideElement::SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon*
detachButton_->setAutoRaise(true);
hl->addWidget (iconHolder_);
hl->addWidget (label_);
QWidget *stretcher_wdgt = new QWidget(this);
stretcher_wdgt->setObjectName("ChildControlArea");
connect(this, SIGNAL(toggleActive(bool)), stretcher_wdgt, SLOT(setVisible(bool)));
stretcher_wdgt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum);
stretcher_wdgt->setVisible(false);
hl->addWidget (stretcher_wdgt);
if (headerAreaWidget_) {
headerAreaWidget_->setVisible(false);
connect(this, SIGNAL(toggleActive(bool)), headerAreaWidget_, SLOT(setVisible(bool)));
hl->addWidget (headerAreaWidget_);
}
hl->addStretch(1);
hl->addWidget (detachButton_);
......@@ -145,6 +146,8 @@ SideElement::~SideElement ()
dialog_->close ();
}
widget_->setParent (0);
if (headerAreaWidget_)
headerAreaWidget_->setParent(0);
}
//-----------------------------------------------------------------------------
......
......@@ -94,7 +94,8 @@ class SideElement : public QWidget
@param _icon An icon that should be shown in the title bar of the side element
*/
SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon* _icon = 0);
SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon* _icon,
QWidget *_headerAreaWidget);
/// Destructor
~SideElement ();
......@@ -150,7 +151,7 @@ class SideElement : public QWidget
SideArea *parent_;
// plugin widget
QWidget *widget_;
QWidget *widget_, *headerAreaWidget_;
// plugin name
QString name_;
......
......@@ -378,7 +378,7 @@ 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] );
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_) {
......
......@@ -218,33 +218,27 @@ void DataControlPlugin::initializePlugin()
toolIcon_ = new QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"datacontrol-toolbox.png");
emit addToolbox("Data Control", tool_, toolIcon_);
QWidget *childControlArea = tool_->parent()->findChild<QWidget*>(
"ChildControlArea");
if (childControlArea) {
std::cout << "Child Control Area found." << std::endl;
advancedSettingsBtn_ = new QToolButton();
advancedSettingsBtn_->setAutoRaise(true);
advancedSettingsBtn_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"preferences.png"));
advancedSettingsBtn_->setIconSize(QSize(16, 16));
advancedSettingsBtn_->setPopupMode(QToolButton::InstantPopup);
advancedSettingsBtn_->setToolTip(tr("Advanced Settings"));
QHBoxLayout *hl = new QHBoxLayout;
hl->addWidget(advancedSettingsBtn_);
hl->addStretch(1);
hl->setContentsMargins(8, 0, 0, 0);
childControlArea->setLayout(hl);
QMenu *menu = new QMenu();
menu->addAction(tool_->lightSources);
menu->addAction(tool_->notSelected);
menu->addAction(tool_->sourceSelected);
menu->addAction(tool_->targetSelected);
advancedSettingsBtn_->setMenu(menu);
} else {
std::cout << "Child Control Area NOT found." << std::endl;
}
QWidget *headerAreaWidget = new QWidget();
advancedSettingsBtn_ = new QToolButton();
advancedSettingsBtn_->setAutoRaise(true);
advancedSettingsBtn_->setIcon(QIcon(OpenFlipper::Options::iconDirStr()+OpenFlipper::Options::dirSeparator()+"preferences.png"));
advancedSettingsBtn_->setIconSize(QSize(16, 16));
advancedSettingsBtn_->setPopupMode(QToolButton::InstantPopup);
advancedSettingsBtn_->setToolTip(tr("Advanced Settings"));
QHBoxLayout *hl = new QHBoxLayout;
hl->addWidget(advancedSettingsBtn_);
hl->addStretch(1);
hl->setContentsMargins(8, 0, 0, 0);
headerAreaWidget->setLayout(hl);
QMenu *menu = new QMenu();
menu->addAction(tool_->lightSources);
menu->addAction(tool_->notSelected);
menu->addAction(tool_->sourceSelected);
menu->addAction(tool_->targetSelected);
advancedSettingsBtn_->setMenu(menu);
emit addToolbox("Data Control", tool_, toolIcon_, headerAreaWidget);
}
......@@ -903,7 +897,8 @@ void DataControlPlugin::saveOnExit(INIFile& _ini){
}
void DataControlPlugin::showReducedUi(bool reduced) {
advancedSettingsBtn_->setVisible(reduced);
if (advancedSettingsBtn_)
advancedSettingsBtn_->setVisible(reduced);
}
void DataControlPlugin::slotObjectUpdated( int _identifier, const UpdateType& _type )
......
......@@ -110,7 +110,7 @@ class DataControlPlugin : public QObject, BaseInterface, ToolboxInterface, KeyIn
void copyObject( int _oldId, int& _newId);
// ToolboxInterface
void addToolbox( QString _name , QWidget* _widget, QIcon* _icon );
void addToolbox( QString _name , QWidget* _widget, QIcon* _icon, QWidget *_headerAreaWidget);
private slots :
// BaseInterface
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment