Commit cf7bbf72 authored by Hans-Christian Ebke's avatar Hans-Christian Ebke

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

parent baced5ca
...@@ -111,6 +111,18 @@ class ToolboxInterface { ...@@ -111,6 +111,18 @@ class ToolboxInterface {
* @param _icon Icon for the toolbox * @param _icon Icon for the toolbox
*/ */
virtual void addToolbox( QString _name , QWidget* _widget, QIcon* _icon) {}; 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: ...@@ -1022,6 +1022,10 @@ private slots:
/// Add a Toolbox from a plugin or from scripting (with icon) /// Add a Toolbox from a plugin or from scripting (with icon)
void addToolbox(QString _name ,QWidget* _widget, QIcon* _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. * Get a toolbox.
* *
......
...@@ -93,6 +93,7 @@ class PluginInfo{ ...@@ -93,6 +93,7 @@ class PluginInfo{
slotInfos.clear(); slotInfos.clear();
keys.clear(); keys.clear();
toolboxWidgets.clear(); toolboxWidgets.clear();
headerAreaWidgets.clear();
toolboxIcons.clear(); toolboxIcons.clear();
toolbars.clear(); toolbars.clear();
contextMenus.clear(); contextMenus.clear();
...@@ -111,6 +112,7 @@ class PluginInfo{ ...@@ -111,6 +112,7 @@ class PluginInfo{
slotInfos(_i.slotInfos), slotInfos(_i.slotInfos),
keys(_i.keys), keys(_i.keys),
toolboxWidgets(_i.toolboxWidgets), toolboxWidgets(_i.toolboxWidgets),
headerAreaWidgets(_i.headerAreaWidgets),
toolboxIcons(_i.toolboxIcons), toolboxIcons(_i.toolboxIcons),
toolbars(_i.toolbars), toolbars(_i.toolbars),
contextMenus(_i.contextMenus), contextMenus(_i.contextMenus),
...@@ -151,6 +153,9 @@ class PluginInfo{ ...@@ -151,6 +153,9 @@ class PluginInfo{
/// Pointer to plugins toolbox widget (if available) /// Pointer to plugins toolbox widget (if available)
std::vector< std::pair< QString , QWidget* > > toolboxWidgets; 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) /// Pointer to plugins toolbox widget icons (if available)
std::vector< QIcon* > toolboxIcons; std::vector< QIcon* > toolboxIcons;
......
...@@ -1069,7 +1069,11 @@ void Core::loadPlugin(const QString& _filename,const bool _silent, QString& _lic ...@@ -1069,7 +1069,11 @@ void Core::loadPlugin(const QString& _filename,const bool _silent, QString& _lic
if ( checkSignal(plugin, "addToolbox(QString,QWidget*,QIcon*)")) if ( checkSignal(plugin, "addToolbox(QString,QWidget*,QIcon*)"))
connect(plugin, SIGNAL( addToolbox(QString,QWidget*,QIcon*) ), connect(plugin, SIGNAL( addToolbox(QString,QWidget*,QIcon*) ),
this, SLOT( addToolbox(QString,QWidget*,QIcon*) ),Qt::DirectConnection ); 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 //Check if the plugin supports ViewMode-Interface
ViewModeInterface* viewModePlugin = qobject_cast< ViewModeInterface * >(plugin); ViewModeInterface* viewModePlugin = qobject_cast< ViewModeInterface * >(plugin);
......
...@@ -254,48 +254,15 @@ void Core::activateToolbox(QString _pluginName, QString _toolboxName, bool activ ...@@ -254,48 +254,15 @@ void Core::activateToolbox(QString _pluginName, QString _toolboxName, bool activ
} }
void Core::addToolbox(QString _name ,QWidget* _widget) { void Core::addToolbox(QString _name ,QWidget* _widget) {
int id = -1; addToolbox(_name, _widget, 0, 0);
// 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() );
} }
//-----------------------------------------------------------------------------
void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon) { 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; int id = -1;
// Find the plugin which added this Toolbox // Find the plugin which added this Toolbox
...@@ -325,6 +292,7 @@ void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon) { ...@@ -325,6 +292,7 @@ void Core::addToolbox(QString _name ,QWidget* _widget, QIcon* _icon) {
spinBoxEventFilter_.hookUpToWidgetTree(_widget); spinBoxEventFilter_.hookUpToWidgetTree(_widget);
plugins_[id].toolboxWidgets.push_back( std::pair< QString,QWidget* >( _name , _widget) ); plugins_[id].toolboxWidgets.push_back( std::pair< QString,QWidget* >( _name , _widget) );
plugins_[id].toolboxIcons.push_back( _icon ); plugins_[id].toolboxIcons.push_back( _icon );
plugins_[id].headerAreaWidgets.push_back( std::pair< QString,QWidget* >( _name , _headerAreaWidget) );
// add widget name to viewMode 'all' // add widget name to viewMode 'all'
if ( !viewModes_[0]->visibleToolboxes.contains(_name) ){ if ( !viewModes_[0]->visibleToolboxes.contains(_name) ){
......
...@@ -75,20 +75,10 @@ SideArea::SideArea (QWidget *_parent) : ...@@ -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); SideElement *e = new SideElement (this, _w, _name, _icon, _headerAreaWidget);
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);
layout_->addWidget (e); layout_->addWidget (e);
items_.push_back (e); items_.push_back (e);
plugins_.push_back(_plugin); plugins_.push_back(_plugin);
......
...@@ -85,20 +85,15 @@ class SideArea : public QWidget { ...@@ -85,20 +85,15 @@ class SideArea : public QWidget {
*/ */
SideArea (QWidget *_parent = 0); 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 /** Adds a plugin tool widget
\param _plugin plugin corresponding to the widget \param _plugin plugin corresponding to the widget
\param _w Plugin widget \param _w Plugin widget
\param _name Plugin name \param _name Plugin name
\param _icon an icon \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 /// clears the whole tool widget area
void clear (); void clear ();
......
...@@ -64,9 +64,11 @@ ...@@ -64,9 +64,11 @@
//== IMPLEMENTATION ========================================================== //== 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), parent_ (_parent),
widget_ (_w), widget_ (_w),
headerAreaWidget_(_headerAreaWidget),
name_ (_name), name_ (_name),
icon_ (_icon), icon_ (_icon),
active_ (0), active_ (0),
...@@ -98,12 +100,11 @@ SideElement::SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon* ...@@ -98,12 +100,11 @@ SideElement::SideElement (SideArea *_parent, QWidget *_w, QString _name, QIcon*
detachButton_->setAutoRaise(true); detachButton_->setAutoRaise(true);
hl->addWidget (iconHolder_); hl->addWidget (iconHolder_);
hl->addWidget (label_); hl->addWidget (label_);
QWidget *stretcher_wdgt = new QWidget(this); if (headerAreaWidget_) {
stretcher_wdgt->setObjectName("ChildControlArea"); headerAreaWidget_->setVisible(false);
connect(this, SIGNAL(toggleActive(bool)), stretcher_wdgt, SLOT(setVisible(bool))); connect(this, SIGNAL(toggleActive(bool)), headerAreaWidget_, SLOT(setVisible(bool)));
stretcher_wdgt->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::Minimum); hl->addWidget (headerAreaWidget_);
stretcher_wdgt->setVisible(false); }
hl->addWidget (stretcher_wdgt);
hl->addStretch(1); hl->addStretch(1);
hl->addWidget (detachButton_); hl->addWidget (detachButton_);
...@@ -145,6 +146,8 @@ SideElement::~SideElement () ...@@ -145,6 +146,8 @@ SideElement::~SideElement ()
dialog_->close (); dialog_->close ();
} }
widget_->setParent (0); widget_->setParent (0);
if (headerAreaWidget_)
headerAreaWidget_->setParent(0);
} }
//----------------------------------------------------------------------------- //-----------------------------------------------------------------------------
......
...@@ -94,7 +94,8 @@ class SideElement : public QWidget ...@@ -94,7 +94,8 @@ class SideElement : public QWidget
@param _icon An icon that should be shown in the title bar of the side element @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 /// Destructor
~SideElement (); ~SideElement ();
...@@ -150,7 +151,7 @@ class SideElement : public QWidget ...@@ -150,7 +151,7 @@ class SideElement : public QWidget
SideArea *parent_; SideArea *parent_;
// plugin widget // plugin widget
QWidget *widget_; QWidget *widget_, *headerAreaWidget_;
// plugin name // plugin name
QString name_; QString name_;
......
...@@ -378,7 +378,7 @@ void CoreWidget::slotChangeView(QString _mode, QStringList _toolboxWidgets, QStr ...@@ -378,7 +378,7 @@ void CoreWidget::slotChangeView(QString _mode, QStringList _toolboxWidgets, QStr
// only add items that have not been added yet // only add items that have not been added yet
if (!skip) { 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 // move item to the correct position
if (i < toolBox_->lastPos_) { if (i < toolBox_->lastPos_) {
......
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