Skip to content
Snippets Groups Projects
Commit 09e0140e authored by stefan's avatar stefan
Browse files

Panels, Drag and drop support for TabbedViewMode

git-svn-id: https://dng.biozentrum.unibas.ch/svn/openstructure/trunk@2541 5a81b35b-ba03-0410-adc8-b2c5c5119f08
parent 6ae796c9
No related branches found
No related tags found
No related merge requests found
...@@ -17,9 +17,12 @@ ...@@ -17,9 +17,12 @@
// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
#include <QApplication>
#include <QSettings> #include <QSettings>
#include <QDir> #include <QDir>
#include <ost/gui/gosty_app.hh>
#include <ost/gui/perspective.hh>
#include <ost/gui/widget_registry.hh> #include <ost/gui/widget_registry.hh>
#include "tabbed_panel_bar.hh" #include "tabbed_panel_bar.hh"
...@@ -32,7 +35,7 @@ TabbedPanelBar::TabbedPanelBar(PanelBar* parent): ...@@ -32,7 +35,7 @@ TabbedPanelBar::TabbedPanelBar(PanelBar* parent):
layout_ = new QHBoxLayout(this); layout_ = new QHBoxLayout(this);
layout_->setMargin(0); layout_->setMargin(0);
layout_->setSpacing(0); layout_->setSpacing(0);
tab_widget_ = new QTabWidget(this); tab_widget_ = new TabbedDragWidget(this);
#if QT_VERSION>=0x40503 #if QT_VERSION>=0x40503
tab_widget_->setDocumentMode(true); tab_widget_->setDocumentMode(true);
#endif #endif
...@@ -94,10 +97,73 @@ void TabbedPanelBar::CurrentChanged(int index){ ...@@ -94,10 +97,73 @@ void TabbedPanelBar::CurrentChanged(int index){
} }
} }
TabbedPanelBar::~TabbedPanelBar(){ TabbedPanelBar::~TabbedPanelBar(){
toolbar_->clear(); toolbar_->clear();
} }
//TabbedDragWidget
TabbedDragWidget::TabbedDragWidget(QWidget* parent):
QTabWidget(parent) {
setTabBar(new DragTabBar(this));
}
//DragTabBar
DragTabBar::DragTabBar(QTabWidget* parent):
QTabBar(parent),tab_widget_(parent) {
this->setAcceptDrops(true);
}
void DragTabBar::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton){
drag_start_pos_ = event->pos();
}
QTabBar::mousePressEvent(event);
}
void DragTabBar::mouseMoveEvent(QMouseEvent *event)
{
if (!(event->buttons() & Qt::LeftButton)) return;
if ((event->pos() - drag_start_pos_).manhattanLength()
< QApplication::startDragDistance()) return;
Widget* widget = qobject_cast<Widget*>(tab_widget_->currentWidget());
if(!widget)return;
QDrag *drag = new QDrag(this);
QMimeData *mime_data = new QMimeData;
QVariant self;
self.setValue(widget);
mime_data->setData("OpenStructure/Widget",QByteArray());
mime_data->setProperty("OpenStructure/Widget",self);
drag->setMimeData(mime_data);
drag->exec();
PanelManager* panels = GostyApp::Instance()->GetPerspective()->GetPanels();
panels->EndDrag();
}
void DragTabBar::dragEnterEvent(QDragEnterEvent *event)
{
if (event->mimeData()->hasFormat("OpenStructure/Widget")){
PanelManager* panels = GostyApp::Instance()->GetPerspective()->GetPanels();
panels->StartDrag();
event->acceptProposedAction();
}
}
void DragTabBar::dropEvent(QDropEvent *event)
{
const QMimeData* mime_data = event->mimeData();
QVariant variant = mime_data->property("OpenStructure/Widget");
Widget* widget = variant.value<Widget*>();
Widget* current_widget = qobject_cast<Widget*>(tab_widget_->currentWidget());
if(widget && current_widget && widget != current_widget){
GostyApp::Instance()->GetPerspective()->GetPanels()->MoveNextTo(current_widget,widget);
}
event->acceptProposedAction();
}
}} }}
...@@ -23,6 +23,7 @@ ...@@ -23,6 +23,7 @@
#include <QWidget> #include <QWidget>
#include <QString> #include <QString>
#include <QAction> #include <QAction>
#include <QTabBar>
#include <QTabWidget> #include <QTabWidget>
#include <QToolBar> #include <QToolBar>
...@@ -35,7 +36,32 @@ ...@@ -35,7 +36,32 @@
namespace ost { namespace gui { namespace ost { namespace gui {
/// \brief tabbed bottom Bar /// \brief tabbed drag widget
class DLLEXPORT_OST_GUI DragTabBar : public QTabBar{
Q_OBJECT
public:
DragTabBar(QTabWidget* parent);
protected:
void mousePressEvent(QMouseEvent *event);
void mouseMoveEvent(QMouseEvent *event);
void dragEnterEvent(QDragEnterEvent *event);
void dropEvent(QDropEvent *event);
private:
QTabWidget* tab_widget_;
QPoint drag_start_pos_;
};
/// \brief tabbed drag widget
class DLLEXPORT_OST_GUI TabbedDragWidget : public QTabWidget{
Q_OBJECT
public:
TabbedDragWidget(QWidget* parent);
};
/// \brief tabbed bar
class DLLEXPORT_OST_GUI TabbedPanelBar : public PanelWidgetContainer { class DLLEXPORT_OST_GUI TabbedPanelBar : public PanelWidgetContainer {
Q_OBJECT Q_OBJECT
public: public:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment