annotate view/PaneStack.h @ 1447:8afea53332f3 single-point

Add option to make pane sizes auto-resize-only (i.e. remove user control via a splitter); also place alignment views above panes instead of below, meaning the extra bit of space that we currently have for the pane without one at least goes to the primary pane
author Chris Cannam
date Tue, 30 Apr 2019 15:53:21 +0100
parents 7527701c8076
children 69b7fdd6394f
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@1447 45 PaneStack(QWidget *parent,
Chris@1447 46 ViewManager *viewManager);
Chris@127 47
Chris@127 48 Pane *addPane(bool suppressPropertyBox = false); // I own the returned value
Chris@127 49 void deletePane(Pane *pane); // Deletes the pane, but _not_ its layers
Chris@127 50
Chris@127 51 int getPaneCount() const; // Returns only count of visible panes
Chris@127 52 Pane *getPane(int n); // Of visible panes; I own the returned value
Chris@277 53 int getPaneIndex(Pane *pane); // so getPane(index)==pane; -1 if absent
Chris@127 54
Chris@127 55 void hidePane(Pane *pane); // Also removes pane from getPane/getPaneCount
Chris@127 56 void showPane(Pane *pane); // Returns pane to getPane/getPaneCount
Chris@127 57
Chris@127 58 int getHiddenPaneCount() const;
Chris@127 59 Pane *getHiddenPane(int n); // I own the returned value
Chris@127 60
Chris@127 61 void setCurrentPane(Pane *pane);
Chris@127 62 void setCurrentLayer(Pane *pane, Layer *layer);
Chris@127 63 Pane *getCurrentPane();
Chris@127 64
Chris@127 65 enum LayoutStyle {
Chris@179 66 NoPropertyStacks = 0,
Chris@127 67 SinglePropertyStackLayout = 1,
Chris@127 68 PropertyStackPerPaneLayout = 2
Chris@127 69 };
Chris@127 70
Chris@127 71 LayoutStyle getLayoutStyle() const { return m_layoutStyle; }
Chris@127 72 void setLayoutStyle(LayoutStyle style);
Chris@127 73
Chris@1447 74 enum ResizeMode {
Chris@1447 75 UserResizeable = 0,
Chris@1447 76 AutoResizeOnly = 1
Chris@1447 77 };
Chris@1447 78
Chris@1447 79 ResizeMode getResizeMode() const { return m_resizeMode; }
Chris@1447 80 void setResizeMode(ResizeMode);
Chris@1447 81
Chris@235 82 void setPropertyStackMinWidth(int mw);
Chris@712 83
Chris@712 84 void setShowPaneAccessories(bool show); // current indicator, close button
Chris@235 85
Chris@867 86 void setShowAlignmentViews(bool show);
Chris@867 87
Chris@320 88 void sizePanesEqually();
Chris@320 89
Chris@127 90 signals:
Chris@127 91 void currentPaneChanged(Pane *pane);
Chris@127 92 void currentLayerChanged(Pane *pane, Layer *layer);
Chris@127 93 void rightButtonMenuRequested(Pane *pane, QPoint position);
Chris@363 94 void propertyStacksResized(int width);
Chris@180 95 void propertyStacksResized();
Chris@189 96 void contextHelpChanged(const QString &);
Chris@127 97
Chris@271 98 void paneAdded(Pane *pane);
Chris@271 99 void paneAdded();
Chris@319 100 void paneHidden(Pane *pane);
Chris@319 101 void paneHidden();
Chris@271 102 void paneAboutToBeDeleted(Pane *pane);
Chris@271 103 void paneDeleted();
Chris@271 104
Chris@312 105 void dropAccepted(Pane *pane, QStringList uriList);
Chris@312 106 void dropAccepted(Pane *pane, QString text);
Chris@312 107
Chris@323 108 void paneDeleteButtonClicked(Pane *pane);
Chris@323 109
Chris@908 110 void doubleClickSelectInvoked(sv_frame_t frame);
Chris@716 111
Chris@127 112 public slots:
Chris@127 113 void propertyContainerAdded(PropertyContainer *);
Chris@127 114 void propertyContainerRemoved(PropertyContainer *);
Chris@127 115 void propertyContainerSelected(View *client, PropertyContainer *);
Chris@190 116 void viewSelected(View *v);
Chris@127 117 void paneInteractedWith();
Chris@127 118 void rightButtonMenuRequested(QPoint);
Chris@312 119 void paneDropAccepted(QStringList);
Chris@312 120 void paneDropAccepted(QString);
Chris@323 121 void paneDeleteButtonClicked();
Chris@500 122 void indicatorClicked();
Chris@127 123
Chris@127 124 protected:
Chris@127 125 Pane *m_currentPane;
Chris@127 126
Chris@127 127 struct PaneRec
Chris@127 128 {
Chris@1266 129 Pane *pane;
Chris@1266 130 QWidget *propertyStack;
Chris@867 131 QPushButton *xButton;
Chris@1266 132 QLabel *currentIndicator;
Chris@867 133 QFrame *frame;
Chris@867 134 QGridLayout *layout;
Chris@867 135 AlignmentView *alignmentView;
Chris@127 136 };
Chris@127 137
Chris@127 138 std::vector<PaneRec> m_panes;
Chris@127 139 std::vector<PaneRec> m_hiddenPanes;
Chris@127 140
Chris@712 141 bool m_showAccessories;
Chris@867 142 bool m_showAlignmentViews;
Chris@712 143
Chris@1447 144 QSplitter *m_splitter; // constitutes the stack in UserResizeable mode
Chris@1447 145 QWidget *m_autoResizeStack; // constitutes the stack in AutoResizeOnly mode
Chris@1447 146 QVBoxLayout *m_autoResizeLayout;
Chris@1447 147
Chris@127 148 QStackedWidget *m_propertyStackStack;
Chris@127 149
Chris@127 150 ViewManager *m_viewManager; // I don't own this
Chris@235 151 int m_propertyStackMinWidth;
Chris@127 152 void sizePropertyStacks();
Chris@127 153
Chris@605 154 void showOrHidePaneAccessories();
Chris@605 155
Chris@867 156 void unlinkAlignmentViews();
Chris@867 157 void relinkAlignmentViews();
Chris@867 158
Chris@127 159 LayoutStyle m_layoutStyle;
Chris@1447 160 ResizeMode m_resizeMode;
Chris@127 161 };
Chris@127 162
Chris@127 163 #endif
Chris@127 164