1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-07-14 15:48:21 +02:00

287 Commits

Author SHA1 Message Date
Paul Licameli
51f0362e9f Remove wx/wx.h from headers 2019-03-26 11:17:41 -04:00
Paul Licameli
906e55f047 Experimental.h in all .h or .cpp files that directly use EXPERIMENTALs...
... except Audacity.h; and in no others.

Do so even if Experimental.h gets multiply included, as in both the .h and
.cpp files.

This makes it easier to do a text scan to be sure there are no unintended quiet
changes of meaning because of omission of Experimental.h when the flag is
an enabled one.

Also move inclusions of Experimental.h earlier.

Also don't require Experimental.h to be preceded by Audacity.h to define
EXPERIMENTAL_MIDI_OUT correctly.
2019-03-17 22:54:00 -04:00
Paul Licameli
e6324e86ac Fix cross-platform one-pixel differences in line drawing...
... Make all line drawing go through our AColor which wraps the wxDC
line-drawing functions.

Despite what wxWidgets documentation says, the functions still don't
consistently include the first point and omit the last point of a line.  I
observed inclusion of both on Mac, while on Windows, omission sometimes of the
first point instead of the last.

Discrepancies could be observed in 2.3.0 between Windows and Mac, using the
Window magnifier or command+alt+ +, zooming in closely on the ends of the
shadow lines below and right of tracks, or at the bottom-right corners of the
bevels drawn around vertical rulers.

So where there is an observable one-pixel difference of drawing between
platforms, there is the question, which was the intent when the drawing code
was written?  Should the coordinates be corrected by one or not?

I reviewed each case and used my judgment.

Most of the calls are in drawing rulers.  Major tick lines were drawn five
pixels long, and minor, three, on Mac.  I keep this behavior, but you might
argue for making them four and two.

On the other hand the drawing of ruler grid lines, which you can see in
the equalization and frequency analysis windows, did need a one-pixel correction
to avoid straying out of bounds.
2019-03-16 07:51:28 -04:00
Paul Licameli
06b3b42794 Remove unnecessary initializers for empty wxString 2019-03-15 15:18:11 -04:00
Paul Licameli
50074f2cfe Replace comparisons against "" with empty() 2019-03-14 13:23:41 -04:00
Paul Licameli
2db49dc1f0 Use standard library style members of wxArrayString (and wxString) ...
... which will make it easier to change the types of those containers to
std::vectors of other string-like classes

for wxString,

IsEmpty => empty
Clear => clear
Alloc => reserve

for wxArrayString,

Count => size
GetCount => size
IsEmpty => empty
Add => push_back
Clear => clear
Empty => clear
Sort => std::sort (only with default comparator)
SetCount => resize
Last => back
Item => operator []
Alloc => reserve
2019-03-10 14:43:57 -04:00
Paul Licameli
303553ae4e Take class AdornedRulerPanel out of src/widgets...
... It's not a utility widget like RulerPanel.  It has a lot of application
specific logic in it.
2018-10-24 15:04:41 -04:00
Paul Licameli
903b42f84a Transport Menus 2018-10-24 12:16:35 -04:00
Paul Licameli
ce9f2e2538 Include Menus.h directly, only where needed, not via Project.h 2018-10-16 16:45:26 -04:00
scootergrisen
b4f7946e9b Remove some double space 2018-10-14 10:42:01 +01:00
James Crook
657159d542 Fix C4189 and C4100 Warnings
C4189 is 'Local variable initialised but not used'
C4100 is 'Unreferenced parameter'

Fixed some other warnings, e.g. about empty if, too.
2018-10-10 19:46:24 +01:00
Paul Licameli
9481587fa8 Move menu handling functions out of class AudacityProject 2018-09-29 12:10:27 -04:00
James Crook
e724ef0793 Bug 1970 - Missing tick marks in Timeline 2018-09-09 12:33:10 +01:00
Paul Licameli
af276ac4f9 Now implement scrubbing default to unpinned, see commit ac1017e...
... This was motivated by punch and roll recording:  it appears most convenient
to pin the head for recording purposes, and drag it near the right, but when
stopping and finding the splice point for the correction, it is better to
scrub unpinned.
2018-08-31 10:46:08 -04:00
Paul-Licameli
932734c89a Windows: don't crash if double-clicking on ruler during playback 2018-08-12 14:43:45 -04:00
Paul Licameli
04a69f0a4c Bug1931 -- Dbl-click ruler in Windows shouldn't violate assertion...
... This change isn't needed for Mac, but is harmless there.
2018-08-12 14:16:16 -04:00
Paul Licameli
3f1d9ab8c1 P & R recording: change color of pin button, as for play indicator 2018-08-11 00:26:34 -04:00
Paul Licameli
c95532012a Correctly update hot zones for quick-play cursor at button up 2018-08-10 12:05:25 -04:00
James Crook
0fe2659a7b Bug 1916 - Play at Speed - scrub widget appears unnecessarily 2018-08-08 17:59:18 +01:00
Paul Licameli
22f85f244b Bug1917: TrackPanel should keep focus after click or drag...
... though ruler won't, and if you start to drag in TrackPanel but abort it
with the ESC key, that too returns focus
2018-08-07 10:42:38 -04:00
Paul Licameli
27dc8ffead Draggable pinned play head, double click to re-center 2018-08-06 21:58:42 -04:00
Paul Licameli
2c28af05e8 Don't hit any TrackPanel or Ruler cells when mouse is out of window 2018-08-06 21:52:46 -04:00
Paul Licameli
7cfda551dd Move scrub click handling into a UIHandle, eliminate OnMouseEvents...
... And the one-shot hack can be simplified away.
2018-08-05 17:18:25 -04:00
Paul Licameli
153eb63b3e Rest of quick play mouse handling is invoked from UIHandle...
... and ESC key aborts the drag of play region
2018-08-05 17:18:25 -04:00
Paul Licameli
9491605cfc CellularPanel handles save/restore of focus for clicks in ruler...
... This lets the ESC key really work to abort drags
2018-08-05 17:18:25 -04:00
Paul Licameli
c85d2cdfa0 UIHandle objects now implement the context menus for the Ruler 2018-08-05 17:18:25 -04:00
Paul Licameli
0ae7f55fea Manage showing and hiding of quick play guide in CellularPanel base 2018-08-05 17:18:25 -04:00
Paul Licameli
af17e1ff95 Quick-play handle object manages lifetime of SnapManager 2018-08-05 17:18:24 -04:00
Paul Licameli
a70e2284b0 Manage ruler status messages and tooltips in CellularPanel base class 2018-08-05 17:18:24 -04:00
Paul Licameli
ba4ae4f7bd Manage ruler cursor changes in CellularPanel base class 2018-08-05 17:18:24 -04:00
Paul Licameli
ce48ac6307 Enable hit tests; let base class manage capture & release of mouse...
... also make popup menus at right up, not down, for consistency with other
popup menus in TrackPanel

Base class also does the event propagation "hack" for ScrubPoller
2018-08-05 17:18:24 -04:00
Paul Licameli
a853b7a3b4 Skeletal hit test and handle objects for quick play and scrubbing 2018-08-05 17:18:23 -04:00
Paul Licameli
bccb135e30 AdornedRulerPanel inherits from CellularPanel -- hit testing, still to do 2018-08-05 17:18:23 -04:00
Paul Licameli
aeece118e8 Rewrite the handling of quick play indicators...
... All updates of position are done in DoGetRectangle().  Ruler need only
expose one function, DrawOverlays().

Don't redraw indicators twice when dragging (hiding and showing again), making
some flicker.  Just do one update.
2018-08-04 15:35:36 -04:00
Paul Licameli
5f27ae905c Changed misleading terminology in scrubber...
... It was confusing that HasStartedScrubbing() could be true
while also not IsScrubbing()
2018-07-29 14:20:11 -04:00
Paul Licameli
b33d3516f0 Rename a function in AdornedRulerPanel...
... Avoid confustion of "capture" meaning recording, with "capture" of the
mouse during drag
2018-07-29 14:18:08 -04:00
Paul Licameli
70f27d41d3 Rewrite AdornedRulerPanel with one less friend 2018-07-06 21:11:48 -04:00
James Crook
356fdeba40 Show Pin/Unpin button in red, if recording. 2018-06-29 17:00:25 +01:00
James Crook
35d24bbed5 Tweak spacing in vertical rulers.
This is most relevant in MixerBoard.
2018-04-15 11:48:51 +01:00
James Crook
5120a9dfc6 Fine tune spacing between minor ticks in rulers.
The main point of this is not to ask for overcrowded rulers.

We already handle overcrowded rulers well, by not showing the minor ticks.
This change means that we are more likely to ask for a spacing that works.
In turn that means that we are less likely to have anomalies where numbers disappear due to overcrowding and reappear again as you resize the ruler.
2018-04-14 15:44:56 +01:00
James Crook
8344a2bae9 Bug 1867 - Jumping numbers on meter resizing
They jumped because of overcrowding.  Now when overcrowded, don't show
any minor numbers.
2018-04-13 19:26:56 +01:00
James Crook
8ce8e7bcce Bug 521 - Lower half of Waveform (dB) vertical scale does not show dB level.
Added a DbMirrorValue for two sided dB scale on Waveform VRuler when in dB view mode.
2018-03-24 20:35:08 +00:00
James Crook
a47df37ea4 Bug 1533 - Selection in label track offset from selection in audio Track
The problem was actually more general, and involves misalignment between selections
in clips and selections in the background and in the ruler - so could be seen with just
audio tracks and no label tracks.
2018-03-17 19:17:53 +00:00
Paul Licameli
9b7ccc4dff Use TranslatedInternalString for tips of toolbar buttons 2018-03-15 20:13:19 -04:00
James Crook
e3ef968d57 Add DragCommand. Default Y/N on optional fields. Open/Save project items.
- More Y/N in Optional, making it easier to omit parameters.
- AT removed from Envelope, since T already gives it.
2018-02-24 14:20:29 -05:00
James Crook
1c988b4e3a Automation: AudacityCommand
This is a squash of 50 commits.

This merges the capabilities of BatchCommands and Effects using a new
AudacityCommand class.  AudacityCommand provides one function to specify the
parameters, and then we leverage that one function in automation, whether by chains,
mod-script-pipe or (future) Nyquist.

- Now have AudacityCommand which is using the same mechanism as Effect
- Has configurable parameters
- Has data-entry GUI (built using shuttle GUI)
- Registers with PluginManager.
- Menu commands now provided in chains, and to python batch.
   - Tested with Zoom Toggle.

- ShuttleParams now can set, get, set defaults, validate and specify
the parameters.
- Bugfix: Don't overwrite values with defaults first time out.
- Add DefineParams function for all built-in effects.
- Extend CommandContext to carry output channels for results.

We abuse EffectsManager.  It handles both Effects and
AudacityCommands now.  In time an Effect should become a special case of
AudacityCommand and we'll split and rename the EffectManager class.

- Don't use 'default' as a parameter name.
- Massive renaming for CommandDefinitionInterface
- EffectIdentInterface becomes EffectDefinitionInterface
- EffectAutomationParameters becomes CommandAutomationParameters
- PluginType is now a bit field.

This way we can search for related types at the same time.

- Most old batch commands made into AudacityCommands.
The ones that weren't are for a reason.  They are used by mod-script-pipe
to carry commands and responses across from a non-GUI thread to the GUI
thread.

- Major tidy up of ScreenshotCommand
- Reworking of SelectCommand
- GetPreferenceCommand and SetPreferenceCommand
- GetTrackInfo and SetTrackInfo
- GetInfoCommand
- Help, Open, Save, Import and Export commands.
- Removed obsolete commands ExecMenu, GetProjectInfo and SetProjectInfo
  which are now better handled by other commands.

- JSONify "GetInfo: Commands" output, i.e. commas in the right places.

- General work on better Doxygen.
    - Lyrics -> LyricsPanel
    - Meter -> MeterPanel
- Updated Linux makefile.
- Scripting commands added into Extra menu.
- Distinct names for previously duplicated find-clipping parameters.
- Fixed longstanding error with erroneous status field number which
  previously caused an ASSERT in debug.
- Sensible formatting of numbers in Chains, 0.1 not 0.1000000000137
2018-02-24 14:20:22 -05:00
Paul Licameli
2fbe04eda0 Replace more Connect with Bind; needed redeclaration of custom events 2018-02-21 19:30:40 -05:00
Paul Licameli
bf5228267a Calls to Disconnect or Unbind in destructors are not needed, if...
... it's either the source of the connection that is being destroyed, or other
object (such as an ancestor window) transitively owning it and so causing it to
be destroyed too;

or, the sink is being destroyed, and that sink is a wxEvtHandler (which is
always so for Disconnect, though not for Unbind in case Bind was passed a
member function of a non-wxEvtHandler).

wxWidgets takes care of erasing the connection in such cases.

This removes most calls to Disconnect and Unbind.  Many destructors shrank to
nothing.

Notably, in case of popup menu handling, the call to Disconnect is not removable
because the object being destroyed is neither the source nor the sink.
2018-02-21 19:28:06 -05:00
Paul Licameli
ab5ff9060b More constructor arguments for RulerPanel 2018-02-21 19:21:03 -05:00
Paul Licameli
7c73011629 Where if and else branches were the same, simplify...
... None of the examples was really a bug.

ExpandingToolBar.cpp is unused in fact.
2018-01-26 10:12:13 -05:00