HAL
splitter_anchor.cpp
Go to the documentation of this file.
7 #include <QApplication>
8 #include <QDesktopWidget>
9 #include <QStyle>
10 
11 namespace hal
12 {
13  SplitterAnchor::SplitterAnchor(ContentLayout::Position apos, DockBar* dockBar, Splitter* splitter, QObject* parent) : QObject(parent), mSplitter(splitter)
14  {
15  mDockBar = dockBar;
16  mAnchorPosition = apos;
19 
20  mDockBar->setAnchor(this);
21  }
22 
23  void SplitterAnchor::add(ContentWidget* widget, int index)
24  {
25  // detached widgets with hidden button are not present in splitter widget
26  int splitterIndex = index;
27  for (int i=0; i<index; i++)
28  if (mDockBar->isHidden(i))
29  --splitterIndex;
30  widget->setAnchor(this);
31  ContentFrame* frame = new ContentFrame(widget, true, nullptr);
32  frame->hide();
33  mSplitter->insertWidget(splitterIndex, frame);
34  mDockBar->addButton(widget, index);
35 
37  }
38 
40  {
41  widget->setAnchor(nullptr);
42  widget->hide();
43  widget->setParent(nullptr);
44  mDockBar->removeButton(widget);
45 
47  }
48 
50  {
51  widget->hide();
52  widget->setParent(nullptr);
53  ContentFrame* frame = new ContentFrame(widget, false, nullptr);
54  frame->setGeometry(QStyle::alignedRect(Qt::LeftToRight, Qt::AlignCenter, frame->size(), qApp->desktop()->availableGeometry()));
55  frame->show();
56 
57  if (mSplitter->unused())
58  mSplitter->hide();
59 
60  mDockBar->detachButton(widget);
61 
63  return frame;
64  }
65 
67  {
68  int index = mDockBar->index(widget);
69  ContentFrame* frame = new ContentFrame(widget, true, nullptr);
70  frame->hide();
71  mSplitter->insertWidget(index, frame);
72  mDockBar->reattachButton(widget);
73 
75  }
76 
78  {
79  for (int i = 0; i < mSplitter->count(); i++)
80  {
81  if (static_cast<ContentFrame*>(mSplitter->widget(i))->content() == widget)
82  {
83  static_cast<ContentFrame*>(mSplitter->widget(i))->show();
84  mSplitter->show();
85  break;
86  }
87  }
88  mDockBar->checkButton(widget);
89  }
90 
92  {
93  for (int i = 0; i < mSplitter->count(); i++)
94  {
95  if (static_cast<ContentFrame*>(mSplitter->widget(i))->content() == widget)
96  {
97  static_cast<ContentFrame*>(mSplitter->widget(i))->hide();
98  if (mSplitter->unused())
99  mSplitter->hide();
100  break;
101  }
102  }
103  mDockBar->uncheckButton(widget);
104  }
105 
107  {
108  /*
109  for (int i = 0; i < mDockBar->count(); ++i)
110  {
111  ContentWidget* widget = mDockBar->widgetAt(0);
112  remove(widget);
113  }
114 
115  mDockBar->update();
116  */
117 
118  mDockBar->clear();
119  }
120 }
ContentLayout::Position mAnchorPosition
static ContentDragRelay * instance()
Wraps the ContentWidget class.
Definition: content_frame.h:45
ContentWidget * content()
Abstract class for Widgets within HAL's ContentArea.
void setAnchor(ContentAnchor *anchor)
Contains and handles DockButtons.
Definition: dock_bar.h:48
void clear()
Definition: dock_bar.cpp:506
bool removeButton(ContentWidget *widget)
Definition: dock_bar.cpp:359
void setAnchor(ContentAnchor *anchor)
Definition: dock_bar.cpp:253
bool isHidden(int index) const
Definition: dock_bar.cpp:379
int index(ContentWidget *widget)
Definition: dock_bar.cpp:284
void checkButton(ContentWidget *widget)
Definition: dock_bar.cpp:439
void reattachButton(ContentWidget *widget)
Definition: dock_bar.cpp:424
void uncheckButton(ContentWidget *widget)
Definition: dock_bar.cpp:451
void handleDragEnd()
Definition: dock_bar.cpp:530
void detachButton(ContentWidget *widget)
Definition: dock_bar.cpp:406
void handleDragStart()
Definition: dock_bar.cpp:525
void addButton(ContentWidget *widget, int index)
Definition: dock_bar.cpp:343
virtual void open(ContentWidget *widget) override
SplitterAnchor(ContentLayout::Position apos, DockBar *dockBar, Splitter *splitter, QObject *parent=nullptr)
virtual void close(ContentWidget *widget) override
virtual void add(ContentWidget *widget, int index=-1) override
virtual void reattach(ContentWidget *widget) override
virtual void remove(ContentWidget *widget) override
virtual ContentFrame * detach(ContentWidget *widget) override
A QSplitter that can be checked if it is unused or not.
Definition: splitter.h:39
bool unused()
Definition: splitter.cpp:10
void setParent(QWidget *parent)
Definition: widget.cpp:9
void hide()
Definition: widget.cpp:15
Q_EMITQ_EMIT
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
int count() const const
void insertWidget(int index, QWidget *widget)
QWidget * widget(int index) const const
QRect alignedRect(Qt::LayoutDirection direction, Qt::Alignment alignment, const QSize &size, const QRect &rectangle)
AlignCenter
LeftToRight
void hide()
void setGeometry(int x, int y, int w, int h)
void show()