annotate view/PaneStack.h @ 868:99299949f965 alignment_view

Don't hide time-instant layers when switching modes; use them as source of key frames in alignment view
author Chris Cannam
date Fri, 17 Oct 2014 16:47:53 +0100
parents 99373ca20caf
children 36cddc3de023
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@127 16 #ifndef _PANESTACK_H_
Chris@127 17 #define _PANESTACK_H_
Chris@127 18
Chris@127 19 #include <QFrame>
Chris@127 20
Chris@323 21 #include <map>
Chris@323 22
Chris@127 23 class QWidget;
Chris@127 24 class QLabel;
Chris@127 25 class QStackedWidget;
Chris@127 26 class QSplitter;
Chris@495 27 class QGridLayout;
Chris@605 28 class QPushButton;
Chris@127 29 class View;
Chris@127 30 class Pane;
Chris@127 31 class Layer;
Chris@127 32 class ViewManager;
Chris@127 33 class PropertyContainer;
Chris@127 34 class PropertyStack;
Chris@867 35 class AlignmentView;
Chris@127 36
Chris@127 37 class PaneStack : public QFrame
Chris@127 38 {
Chris@127 39 Q_OBJECT
Chris@127 40
Chris@127 41 public:
Chris@127 42 PaneStack(QWidget *parent, ViewManager *viewManager);
Chris@127 43
Chris@127 44 Pane *addPane(bool suppressPropertyBox = false); // I own the returned value
Chris@539 45 Pane *insertPane(int index, bool suppressPropertyBox = false); // I own the returned value
Chris@127 46 void deletePane(Pane *pane); // Deletes the pane, but _not_ its layers
Chris@127 47
Chris@127 48 int getPaneCount() const; // Returns only count of visible panes
Chris@127 49 Pane *getPane(int n); // Of visible panes; I own the returned value
Chris@277 50 int getPaneIndex(Pane *pane); // so getPane(index)==pane; -1 if absent
Chris@127 51
Chris@127 52 void hidePane(Pane *pane); // Also removes pane from getPane/getPaneCount
Chris@127 53 void showPane(Pane *pane); // Returns pane to getPane/getPaneCount
Chris@127 54
Chris@127 55 int getHiddenPaneCount() const;
Chris@127 56 Pane *getHiddenPane(int n); // I own the returned value
Chris@127 57
Chris@127 58 void setCurrentPane(Pane *pane);
Chris@127 59 void setCurrentLayer(Pane *pane, Layer *layer);
Chris@127 60 Pane *getCurrentPane();
Chris@127 61
Chris@127 62 enum LayoutStyle {
Chris@179 63 NoPropertyStacks = 0,
Chris@127 64 SinglePropertyStackLayout = 1,
Chris@127 65 PropertyStackPerPaneLayout = 2
Chris@127 66 };
Chris@127 67
Chris@127 68 LayoutStyle getLayoutStyle() const { return m_layoutStyle; }
Chris@127 69 void setLayoutStyle(LayoutStyle style);
Chris@127 70
Chris@235 71 void setPropertyStackMinWidth(int mw);
Chris@712 72
Chris@712 73 void setShowPaneAccessories(bool show); // current indicator, close button
Chris@235 74
Chris@867 75 void setShowAlignmentViews(bool show);
Chris@867 76
Chris@320 77 void sizePanesEqually();
Chris@320 78
Chris@127 79 signals:
Chris@127 80 void currentPaneChanged(Pane *pane);
Chris@127 81 void currentLayerChanged(Pane *pane, Layer *layer);
Chris@127 82 void rightButtonMenuRequested(Pane *pane, QPoint position);
Chris@363 83 void propertyStacksResized(int width);
Chris@180 84 void propertyStacksResized();
Chris@189 85 void contextHelpChanged(const QString &);
Chris@127 86
Chris@271 87 void paneAdded(Pane *pane);
Chris@271 88 void paneAdded();
Chris@319 89 void paneHidden(Pane *pane);
Chris@319 90 void paneHidden();
Chris@271 91 void paneAboutToBeDeleted(Pane *pane);
Chris@271 92 void paneDeleted();
Chris@271 93
Chris@312 94 void dropAccepted(Pane *pane, QStringList uriList);
Chris@312 95 void dropAccepted(Pane *pane, QString text);
Chris@312 96
Chris@323 97 void paneDeleteButtonClicked(Pane *pane);
Chris@323 98
Chris@806 99 void doubleClickSelectInvoked(int frame);
Chris@716 100
Chris@127 101 public slots:
Chris@127 102 void propertyContainerAdded(PropertyContainer *);
Chris@127 103 void propertyContainerRemoved(PropertyContainer *);
Chris@127 104 void propertyContainerSelected(View *client, PropertyContainer *);
Chris@190 105 void viewSelected(View *v);
Chris@127 106 void paneInteractedWith();
Chris@127 107 void rightButtonMenuRequested(QPoint);
Chris@312 108 void paneDropAccepted(QStringList);
Chris@312 109 void paneDropAccepted(QString);
Chris@323 110 void paneDeleteButtonClicked();
Chris@500 111 void indicatorClicked();
Chris@127 112
Chris@127 113 protected:
Chris@127 114 Pane *m_currentPane;
Chris@127 115
Chris@127 116 struct PaneRec
Chris@127 117 {
Chris@867 118 Pane *pane;
Chris@867 119 QWidget *propertyStack;
Chris@867 120 QPushButton *xButton;
Chris@867 121 QLabel *currentIndicator;
Chris@867 122 QFrame *frame;
Chris@867 123 QGridLayout *layout;
Chris@867 124 AlignmentView *alignmentView;
Chris@127 125 };
Chris@127 126
Chris@127 127 std::vector<PaneRec> m_panes;
Chris@127 128 std::vector<PaneRec> m_hiddenPanes;
Chris@127 129
Chris@712 130 bool m_showAccessories;
Chris@867 131 bool m_showAlignmentViews;
Chris@712 132
Chris@127 133 QSplitter *m_splitter;
Chris@127 134 QStackedWidget *m_propertyStackStack;
Chris@127 135
Chris@127 136 ViewManager *m_viewManager; // I don't own this
Chris@235 137 int m_propertyStackMinWidth;
Chris@127 138 void sizePropertyStacks();
Chris@127 139
Chris@605 140 void showOrHidePaneAccessories();
Chris@605 141
Chris@867 142 void unlinkAlignmentViews();
Chris@867 143 void relinkAlignmentViews();
Chris@867 144
Chris@127 145 LayoutStyle m_layoutStyle;
Chris@127 146 };
Chris@127 147
Chris@127 148 #endif
Chris@127 149