Shinya Kitaoka 810553
#pragma once
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#ifndef TDOCKWINDOWS_H
Toshihiro Shimizu 890ddd
#define TDOCKWINDOWS_H
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "tcommon.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include "docklayout.h"
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#include <qframe></qframe>
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
#undef DVAPI
Toshihiro Shimizu 890ddd
#undef DVVAR
Toshihiro Shimizu 890ddd
#ifdef TOONZQT_EXPORTS
Toshihiro Shimizu 890ddd
#define DVAPI DV_EXPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_EXPORT_VAR
Toshihiro Shimizu 890ddd
#else
Toshihiro Shimizu 890ddd
#define DVAPI DV_IMPORT_API
Toshihiro Shimizu 890ddd
#define DVVAR DV_IMPORT_VAR
Toshihiro Shimizu 890ddd
#endif
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================================
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
// Forward declarations
Toshihiro Shimizu 890ddd
class TDockWidget;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-----------------------
Toshihiro Shimizu 890ddd
//    TMainWindow
Toshihiro Shimizu 890ddd
//-----------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
TMainWindow class is intended as a convenience QMainWindow-like interface
Toshihiro Shimizu 890ddd
for DockLayout.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
\sa TDockWidget class.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
class DVAPI TMainWindow : public QWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT  // Just needed by qobject_cast, for now
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
      DockLayout *m_layout;
Shinya Kitaoka 120a6e
  QWidget *m_menu;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TMainWindow(QWidget *parent = 0, Qt::WindowFlags flags = 0);
Shinya Kitaoka 120a6e
  virtual ~TMainWindow();
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void addDockWidget(TDockWidget *item);
Shinya Kitaoka 120a6e
  void removeDockWidget(TDockWidget *item);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setMenuWidget(QWidget *menubar);
Shinya Kitaoka 120a6e
  QWidget *menuWidget() const { return m_menu; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  // Style options
Shinya Kitaoka 120a6e
  void setDecoAllocator(DockDecoAllocator *allocator);
Shinya Kitaoka 120a6e
  void setSeparatorsThickness(int thick);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  DockLayout *dockLayout() const { return m_layout; }
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
protected:
Shinya Kitaoka 473e70
  void resizeEvent(QResizeEvent *event) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//========================================================================
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
//-------------------
Toshihiro Shimizu 890ddd
//    TDockWidget
Toshihiro Shimizu 890ddd
//-------------------
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
/*!
Toshihiro Shimizu 890ddd
TDockWidget class is a convenience QDockWidget-like interface to DockWidget
Toshihiro Shimizu 890ddd
class. It provides an internal base layout including a titlebar and a
Toshihiro Shimizu 890ddd
content widget.
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
\sa TMainWindow class.
Toshihiro Shimizu 890ddd
*/
Shinya Kitaoka 120a6e
class DVAPI TDockWidget : public DockWidget {
Shinya Kitaoka 120a6e
  Q_OBJECT  // Needed by qobject_cast
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
      QWidget *m_titlebar;
Shinya Kitaoka 120a6e
  QWidget *m_widget;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  int m_margin;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
public:
Shinya Kitaoka 120a6e
  TDockWidget(const QString &title, QWidget *parent = 0,
Shinya Kitaoka 120a6e
              Qt::WindowFlags flags = 0);
Shinya Kitaoka 120a6e
  TDockWidget(QWidget *parent = 0, Qt::WindowFlags flags = 0);
Shinya Kitaoka 120a6e
  ~TDockWidget() {}
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setTitleBarWidget(QWidget *titlebar);
Shinya Kitaoka 120a6e
  QWidget *titleBarWidget() const { return m_titlebar; }
Shinya Kitaoka 120a6e
  void setFloatingMargin(int margin) { m_margin = margin; }
Shinya Kitaoka 120a6e
  int getFloatingMargin() const { return m_margin; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setWidget(QWidget *widget);
Shinya Kitaoka 120a6e
  QWidget *widget() const { return m_widget; }
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  void setFloating(bool status = true);
Shinya Kitaoka 120a6e
  void setMaximized(bool status = true);
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
  enum Orientation { horizontal = 0, vertical = 1 };
Shinya Kitaoka 120a6e
  void setOrientation(bool direction = vertical);
Shinya Kitaoka 120a6e
  bool getOrientation() const;
Toshihiro Shimizu 890ddd
Toshihiro Shimizu 890ddd
private:
Shinya Kitaoka 473e70
  QSize getDockedMinimumSize() override;
Shinya Kitaoka 473e70
  QSize getDockedMaximumSize() override;
Shinya Kitaoka 473e70
  void setFloatingAppearance() override;
Shinya Kitaoka 473e70
  void setDockedAppearance() override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void selectDockPlaceholder(QMouseEvent *me) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  bool isDragGrip(QPoint p) override;
Shinya Kitaoka 473e70
  int isResizeGrip(QPoint p) override;
Toshihiro Shimizu 890ddd
Shinya Kitaoka 473e70
  void windowTitleEvent(QEvent *e) override;
Toshihiro Shimizu 890ddd
};
Toshihiro Shimizu 890ddd
Shinya Kitaoka 120a6e
#endif  // TDOCKWINDOWS_H