annotate view/PaneStack.h @ 1605:ae2d5f8ff005

When asked to render the whole view width, we need to wait for the layers to be ready before we can determine what the width is
author Chris Cannam
date Thu, 30 Apr 2020 14:47:13 +0100
parents 01a41a37bd26
children d6976d231efb
rev   line source
Chris@127 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@127 2
Chris@127 3 /*
Chris@127 4 Sonic Visualiser
Chris@127 5 An audio file viewer and annotation editor.
Chris@127 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 Chris Cannam and QMUL.
Chris@127 8
Chris@127 9 This program is free software; you can redistribute it and/or
Chris@127 10 modify it under the terms of the GNU General Public License as
Chris@127 11 published by the Free Software Foundation; either version 2 of the
Chris@127 12 License, or (at your option) any later version. See the file
Chris@127 13 COPYING included with this distribution for more information.
Chris@127 14 */
Chris@127 15
Chris@1270 16 #ifndef SV_PANESTACK_H
Chris@1270 17 #define SV_PANESTACK_H
Chris@127 18
Chris@127 19 #include <QFrame>
Chris@127 20
Chris@323 21 #include <map>
Chris@323 22
Chris@908 23 #include "base/BaseTypes.h"
Chris@908 24
Chris@127 25 class QWidget;
Chris@127 26 class QLabel;
Chris@127 27 class QStackedWidget;
Chris@1447 28 class QVBoxLayout;
Chris@127 29 class QSplitter;
Chris@495 30 class QGridLayout;
Chris@605 31 class QPushButton;
Chris@127 32 class View;
Chris@127 33 class Pane;
Chris@127 34 class Layer;
Chris@127 35 class ViewManager;
Chris@127 36 class PropertyContainer;
Chris@127 37 class PropertyStack;
Chris@867 38 class AlignmentView;
Chris@127 39
Chris@127 40 class PaneStack : public QFrame
Chris@127 41 {
Chris@127 42 Q_OBJECT
Chris@127 43
Chris@127 44 public:
Chris@1526 45 /// These options are for things that must be set on construction,
Chris@1526 46 /// and can't be changed afterwards
Chris@1526 47 enum class Option {
Chris@1526 48 Default = 0x0,
Chris@1526 49 NoUserResize = 0x1, // Suppress resize handles, auto-size only
Chris@1526 50 NoPropertyStacks = 0x2, // Never create property stacks
Chris@1526 51 NoPaneAccessories = 0x4, // Suppress current-pane and close button
Chris@1526 52 NoCloseOnFirstPane = 0x8, // Omit close button from the top pane
Chris@1526 53 ShowAlignmentViews = 0x10 // Include AlignmentViews between panes
Chris@1526 54 };
Chris@1526 55 typedef int Options;
Chris@1526 56
Chris@1447 57 PaneStack(QWidget *parent,
Chris@1526 58 ViewManager *viewManager,
Chris@1526 59 Options options = 0);
Chris@127 60
Chris@1526 61 Pane *addPane(); // I own the returned value
Chris@127 62 void deletePane(Pane *pane); // Deletes the pane, but _not_ its layers
Chris@127 63
Chris@127 64 int getPaneCount() const; // Returns only count of visible panes
Chris@127 65 Pane *getPane(int n); // Of visible panes; I own the returned value
Chris@277 66 int getPaneIndex(Pane *pane); // so getPane(index)==pane; -1 if absent
Chris@127 67
Chris@127 68 void hidePane(Pane *pane); // Also removes pane from getPane/getPaneCount
Chris@127 69 void showPane(Pane *pane); // Returns pane to getPane/getPaneCount
Chris@127 70
Chris@127 71 int getHiddenPaneCount() const;
Chris@127 72 Pane *getHiddenPane(int n); // I own the returned value
Chris@127 73
Chris@127 74 void setCurrentPane(Pane *pane);
Chris@127 75 void setCurrentLayer(Pane *pane, Layer *layer);
Chris@127 76 Pane *getCurrentPane();
Chris@127 77
Chris@1526 78 /// Runtime-switchable layout style for property stacks
Chris@127 79 enum LayoutStyle {
Chris@1526 80 HiddenPropertyStacksLayout = 0,
Chris@127 81 SinglePropertyStackLayout = 1,
Chris@127 82 PropertyStackPerPaneLayout = 2
Chris@127 83 };
Chris@127 84
Chris@127 85 LayoutStyle getLayoutStyle() const { return m_layoutStyle; }
Chris@127 86 void setLayoutStyle(LayoutStyle style);
Chris@127 87
Chris@235 88 void setPropertyStackMinWidth(int mw);
Chris@235 89
Chris@320 90 void sizePanesEqually();
Chris@320 91
Chris@127 92 signals:
Chris@127 93 void currentPaneChanged(Pane *pane);
Chris@127 94 void currentLayerChanged(Pane *pane, Layer *layer);
Chris@1582 95 void paneRightButtonMenuRequested(Pane *pane, QPoint position);
Chris@1582 96 void panePropertiesRightButtonMenuRequested(Pane *, QPoint);
Chris@1582 97 void layerPropertiesRightButtonMenuRequested(Pane *, Layer *, QPoint);
Chris@363 98 void propertyStacksResized(int width);
Chris@180 99 void propertyStacksResized();
Chris@189 100 void contextHelpChanged(const QString &);
Chris@127 101
Chris@271 102 void paneAdded(Pane *pane);
Chris@271 103 void paneAdded();
Chris@319 104 void paneHidden(Pane *pane);
Chris@319 105 void paneHidden();
Chris@271 106 void paneAboutToBeDeleted(Pane *pane);
Chris@271 107 void paneDeleted();
Chris@271 108
Chris@312 109 void dropAccepted(Pane *pane, QStringList uriList);
Chris@312 110 void dropAccepted(Pane *pane, QString text);
Chris@312 111
Chris@323 112 void paneDeleteButtonClicked(Pane *pane);
Chris@323 113
Chris@908 114 void doubleClickSelectInvoked(sv_frame_t frame);
Chris@716 115
Chris@127 116 public slots:
Chris@127 117 void propertyContainerAdded(PropertyContainer *);
Chris@127 118 void propertyContainerRemoved(PropertyContainer *);
Chris@127 119 void propertyContainerSelected(View *client, PropertyContainer *);
Chris@1582 120 void propertyContainerContextMenuRequested(View *, PropertyContainer *,
Chris@1582 121 QPoint);
Chris@190 122 void viewSelected(View *v);
Chris@127 123 void paneInteractedWith();
Chris@127 124 void rightButtonMenuRequested(QPoint);
Chris@312 125 void paneDropAccepted(QStringList);
Chris@312 126 void paneDropAccepted(QString);
Chris@323 127 void paneDeleteButtonClicked();
Chris@500 128 void indicatorClicked();
Chris@127 129
Chris@127 130 protected:
Chris@127 131 Pane *m_currentPane;
Chris@127 132
Chris@127 133 struct PaneRec
Chris@127 134 {
Chris@1266 135 Pane *pane;
Chris@1266 136 QWidget *propertyStack;
Chris@867 137 QPushButton *xButton;
Chris@1266 138 QLabel *currentIndicator;
Chris@867 139 QFrame *frame;
Chris@867 140 QGridLayout *layout;
Chris@867 141 AlignmentView *alignmentView;
Chris@127 142 };
Chris@127 143
Chris@127 144 std::vector<PaneRec> m_panes;
Chris@127 145 std::vector<PaneRec> m_hiddenPanes;
Chris@127 146
Chris@1526 147 int m_options;
Chris@1526 148 QSplitter *m_splitter; // constitutes the stack in default mode
Chris@1526 149 QWidget *m_autoResizeStack; // constitutes the stack in NoUserResize mode
Chris@1447 150 QVBoxLayout *m_autoResizeLayout;
Chris@1447 151
Chris@127 152 QStackedWidget *m_propertyStackStack;
Chris@127 153
Chris@127 154 ViewManager *m_viewManager; // I don't own this
Chris@235 155 int m_propertyStackMinWidth;
Chris@127 156 void sizePropertyStacks();
Chris@127 157
Chris@605 158 void showOrHidePaneAccessories();
Chris@605 159
Chris@867 160 void unlinkAlignmentViews();
Chris@867 161 void relinkAlignmentViews();
Chris@867 162
Chris@127 163 LayoutStyle m_layoutStyle;
Chris@127 164 };
Chris@127 165
Chris@127 166 #endif
Chris@127 167