annotate view/PaneStack.h @ 1127:9fb8dfd7ce4c spectrogram-minor-refactor

Fix threshold in spectrogram -- it wasn't working in the last release. There is a new protocol for this. Formerly the threshold parameter had a range from -50dB to 0 with the default at -50, and -50 treated internally as "no threshold". However, there was a hardcoded, hidden internal threshold for spectrogram colour mapping at -80dB with anything below this being rounded to zero. Now the threshold parameter has range -81 to -1 with the default at -80, -81 is treated internally as "no threshold", and there is no hidden internal threshold. So the default behaviour is the same as before, an effective -80dB threshold, but it is now possible to change this in both directions. Sessions reloaded from prior versions may look slightly different because, if the session says there should be no threshold, there will now actually be no threshold instead of having the hidden internal one. Still need to do something in the UI to make it apparent that the -81dB setting removes the threshold entirely. This is at least no worse than the previous, also obscured, magic -50dB setting.
author Chris Cannam
date Mon, 01 Aug 2016 16:21:01 +0100
parents 36cddc3de023
children a34a2a25907c
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@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@127 28 class QSplitter;
Chris@495 29 class QGridLayout;
Chris@605 30 class QPushButton;
Chris@127 31 class View;
Chris@127 32 class Pane;
Chris@127 33 class Layer;
Chris@127 34 class ViewManager;
Chris@127 35 class PropertyContainer;
Chris@127 36 class PropertyStack;
Chris@867 37 class AlignmentView;
Chris@127 38
Chris@127 39 class PaneStack : public QFrame
Chris@127 40 {
Chris@127 41 Q_OBJECT
Chris@127 42
Chris@127 43 public:
Chris@127 44 PaneStack(QWidget *parent, ViewManager *viewManager);
Chris@127 45
Chris@127 46 Pane *addPane(bool suppressPropertyBox = false); // I own the returned value
Chris@539 47 Pane *insertPane(int index, bool suppressPropertyBox = false); // I own the returned value
Chris@127 48 void deletePane(Pane *pane); // Deletes the pane, but _not_ its layers
Chris@127 49
Chris@127 50 int getPaneCount() const; // Returns only count of visible panes
Chris@127 51 Pane *getPane(int n); // Of visible panes; I own the returned value
Chris@277 52 int getPaneIndex(Pane *pane); // so getPane(index)==pane; -1 if absent
Chris@127 53
Chris@127 54 void hidePane(Pane *pane); // Also removes pane from getPane/getPaneCount
Chris@127 55 void showPane(Pane *pane); // Returns pane to getPane/getPaneCount
Chris@127 56
Chris@127 57 int getHiddenPaneCount() const;
Chris@127 58 Pane *getHiddenPane(int n); // I own the returned value
Chris@127 59
Chris@127 60 void setCurrentPane(Pane *pane);
Chris@127 61 void setCurrentLayer(Pane *pane, Layer *layer);
Chris@127 62 Pane *getCurrentPane();
Chris@127 63
Chris@127 64 enum LayoutStyle {
Chris@179 65 NoPropertyStacks = 0,
Chris@127 66 SinglePropertyStackLayout = 1,
Chris@127 67 PropertyStackPerPaneLayout = 2
Chris@127 68 };
Chris@127 69
Chris@127 70 LayoutStyle getLayoutStyle() const { return m_layoutStyle; }
Chris@127 71 void setLayoutStyle(LayoutStyle style);
Chris@127 72
Chris@235 73 void setPropertyStackMinWidth(int mw);
Chris@712 74
Chris@712 75 void setShowPaneAccessories(bool show); // current indicator, close button
Chris@235 76
Chris@867 77 void setShowAlignmentViews(bool show);
Chris@867 78
Chris@320 79 void sizePanesEqually();
Chris@320 80
Chris@127 81 signals:
Chris@127 82 void currentPaneChanged(Pane *pane);
Chris@127 83 void currentLayerChanged(Pane *pane, Layer *layer);
Chris@127 84 void rightButtonMenuRequested(Pane *pane, QPoint position);
Chris@363 85 void propertyStacksResized(int width);
Chris@180 86 void propertyStacksResized();
Chris@189 87 void contextHelpChanged(const QString &);
Chris@127 88
Chris@271 89 void paneAdded(Pane *pane);
Chris@271 90 void paneAdded();
Chris@319 91 void paneHidden(Pane *pane);
Chris@319 92 void paneHidden();
Chris@271 93 void paneAboutToBeDeleted(Pane *pane);
Chris@271 94 void paneDeleted();
Chris@271 95
Chris@312 96 void dropAccepted(Pane *pane, QStringList uriList);
Chris@312 97 void dropAccepted(Pane *pane, QString text);
Chris@312 98
Chris@323 99 void paneDeleteButtonClicked(Pane *pane);
Chris@323 100
Chris@908 101 void doubleClickSelectInvoked(sv_frame_t frame);
Chris@716 102
Chris@127 103 public slots:
Chris@127 104 void propertyContainerAdded(PropertyContainer *);
Chris@127 105 void propertyContainerRemoved(PropertyContainer *);
Chris@127 106 void propertyContainerSelected(View *client, PropertyContainer *);
Chris@190 107 void viewSelected(View *v);
Chris@127 108 void paneInteractedWith();
Chris@127 109 void rightButtonMenuRequested(QPoint);
Chris@312 110 void paneDropAccepted(QStringList);
Chris@312 111 void paneDropAccepted(QString);
Chris@323 112 void paneDeleteButtonClicked();
Chris@500 113 void indicatorClicked();
Chris@127 114
Chris@127 115 protected:
Chris@127 116 Pane *m_currentPane;
Chris@127 117
Chris@127 118 struct PaneRec
Chris@127 119 {
Chris@867 120 Pane *pane;
Chris@867 121 QWidget *propertyStack;
Chris@867 122 QPushButton *xButton;
Chris@867 123 QLabel *currentIndicator;
Chris@867 124 QFrame *frame;
Chris@867 125 QGridLayout *layout;
Chris@867 126 AlignmentView *alignmentView;
Chris@127 127 };
Chris@127 128
Chris@127 129 std::vector<PaneRec> m_panes;
Chris@127 130 std::vector<PaneRec> m_hiddenPanes;
Chris@127 131
Chris@712 132 bool m_showAccessories;
Chris@867 133 bool m_showAlignmentViews;
Chris@712 134
Chris@127 135 QSplitter *m_splitter;
Chris@127 136 QStackedWidget *m_propertyStackStack;
Chris@127 137
Chris@127 138 ViewManager *m_viewManager; // I don't own this
Chris@235 139 int m_propertyStackMinWidth;
Chris@127 140 void sizePropertyStacks();
Chris@127 141
Chris@605 142 void showOrHidePaneAccessories();
Chris@605 143
Chris@867 144 void unlinkAlignmentViews();
Chris@867 145 void relinkAlignmentViews();
Chris@867 146
Chris@127 147 LayoutStyle m_layoutStyle;
Chris@127 148 };
Chris@127 149
Chris@127 150 #endif
Chris@127 151