LMMS
Loading...
Searching...
No Matches
juce_DialogWindow.cpp
Go to the documentation of this file.
1/*
2 ==============================================================================
3
4 This file is part of the JUCE library.
5 Copyright (c) 2022 - Raw Material Software Limited
6
7 JUCE is an open source library subject to commercial or open-source
8 licensing.
9
10 By using JUCE, you agree to the terms of both the JUCE 7 End-User License
11 Agreement and JUCE Privacy Policy.
12
13 End User License Agreement: www.juce.com/juce-7-licence
14 Privacy Policy: www.juce.com/juce-privacy-policy
15
16 Or: You may also use this code under the terms of the GPL v3 (see
17 www.gnu.org/licenses).
18
19 JUCE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER
20 EXPRESSED OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE
21 DISCLAIMED.
22
23 ==============================================================================
24*/
25
26namespace juce
27{
28
30 const bool escapeCloses, const bool onDesktop,
31 const float scale)
32 : DocumentWindow (name, colour, DocumentWindow::closeButton, onDesktop),
33 desktopScale (scale),
34 escapeKeyTriggersCloseButton (escapeCloses)
35{
36}
37
39
41{
43 {
44 setVisible (false);
45 return true;
46 }
47
48 return false;
49}
50
52{
54 return true;
55
57}
58
60{
62
64 {
65 if (auto* close = getCloseButton())
66 {
67 const KeyPress esc (KeyPress::escapeKey, 0, 0);
68
69 if (! close->isRegisteredForShortcut (esc))
70 close->addShortcut (esc);
71 }
72 }
73}
74
75//==============================================================================
77{
78public:
80 : DialogWindow (options.dialogTitle, options.dialogBackgroundColour,
82 options.componentToCentreAround != nullptr
83 ? Component::getApproximateScaleFactorForComponent (options.componentToCentreAround)
84 : 1.0f)
85 {
88
89 if (options.content.willDeleteObject())
90 setContentOwned (options.content.release(), true);
91 else
92 setContentNonOwned (options.content.release(), true);
93
96 }
97
98 void closeButtonPressed() override
99 {
100 setVisible (false);
101 }
102
103private:
105};
106
108
110{
111 jassert (content != nullptr); // You need to provide some kind of content for the dialog!
112
113 return new DefaultDialogWindow (*this);
114}
115
117{
118 auto* d = create();
119 d->enterModalState (true, nullptr, true);
120 return d;
121}
122
123#if JUCE_MODAL_LOOPS_PERMITTED
124int DialogWindow::LaunchOptions::runModal()
125{
126 return launchAsync()->runModalLoop();
127}
128#endif
129
130//==============================================================================
131void DialogWindow::showDialog (const String& dialogTitle,
133 Component* const componentToCentreAround,
134 Colour backgroundColour,
136 const bool resizable,
137 const bool useBottomRightCornerResizer,
138 const bool useNativeTitleBar)
139{
141 o.dialogTitle = dialogTitle;
142 o.content.setNonOwned (contentComponent);
143 o.componentToCentreAround = componentToCentreAround;
144 o.dialogBackgroundColour = backgroundColour;
147 o.useBottomRightCornerResizer = useBottomRightCornerResizer;
149
150 o.launchAsync();
151}
152
153#if JUCE_MODAL_LOOPS_PERMITTED
154int DialogWindow::showModalDialog (const String& dialogTitle,
155 Component* const contentComponent,
156 Component* const componentToCentreAround,
157 Colour backgroundColour,
158 const bool escapeKeyTriggersCloseButton,
159 const bool resizable,
160 const bool useBottomRightCornerResizer,
161 const bool useNativeTitleBar)
162{
163 LaunchOptions o;
164 o.dialogTitle = dialogTitle;
165 o.content.setNonOwned (contentComponent);
166 o.componentToCentreAround = componentToCentreAround;
167 o.dialogBackgroundColour = backgroundColour;
168 o.escapeKeyTriggersCloseButton = escapeKeyTriggersCloseButton;
169 o.resizable = resizable;
170 o.useBottomRightCornerResizer = useBottomRightCornerResizer;
171 o.useNativeTitleBar = useNativeTitleBar;
172
173 return o.runModal();
174}
175#endif
176
177//==============================================================================
178std::unique_ptr<AccessibilityHandler> DialogWindow::createAccessibilityHandler()
179{
180 return std::make_unique<AccessibilityHandler> (*this, AccessibilityRole::dialogWindow);
181}
182
183} // namespace juce
#define noexcept
Definition DistrhoDefines.h:72
#define nullptr
Definition DistrhoDefines.h:75
Definition juce_Colour.h:38
Definition juce_Component.h:36
int getHeight() const noexcept
Definition juce_Component.h:274
static float JUCE_CALLTYPE getApproximateScaleFactorForComponent(const Component *targetComponent)
Definition juce_Component.cpp:1383
void setAlwaysOnTop(bool shouldStayOnTop)
Definition juce_Component.cpp:1074
int getWidth() const noexcept
Definition juce_Component.h:271
virtual bool keyPressed(const KeyPress &key)
Definition juce_Component.cpp:3230
virtual void setVisible(bool shouldBeVisible)
Definition juce_Component.cpp:575
Definition juce_DialogWindow.cpp:77
DefaultDialogWindow(LaunchOptions &options)
Definition juce_DialogWindow.cpp:79
void closeButtonPressed() override
Definition juce_DialogWindow.cpp:98
~DialogWindow() override
bool keyPressed(const KeyPress &) override
Definition juce_DialogWindow.cpp:51
virtual bool escapeKeyPressed()
Definition juce_DialogWindow.cpp:40
void resized() override
Definition juce_DialogWindow.cpp:59
bool escapeKeyTriggersCloseButton
Definition juce_DialogWindow.h:273
static void showDialog(const String &dialogTitle, Component *contentComponent, Component *componentToCentreAround, Colour backgroundColour, bool escapeKeyTriggersCloseButton, bool shouldBeResizable=false, bool useBottomRightCornerResizer=false, bool useNativeTitleBar=true)
Definition juce_DialogWindow.cpp:131
float desktopScale
Definition juce_DialogWindow.h:272
std::unique_ptr< AccessibilityHandler > createAccessibilityHandler() override
Definition juce_DialogWindow.cpp:178
DialogWindow(const String &name, Colour backgroundColour, bool escapeKeyTriggersCloseButton, bool addToDesktop=true, float desktopScale=1.0f)
Definition juce_DialogWindow.cpp:29
Button * getCloseButton() const noexcept
Definition juce_DocumentWindow.cpp:272
DocumentWindow(const String &name, Colour backgroundColour, int requiredButtons, bool addToDesktop=true)
Definition juce_DocumentWindow.cpp:48
@ closeButton
Definition juce_DocumentWindow.h:66
void resized() override
Definition juce_DocumentWindow.cpp:218
Definition juce_KeyPress.h:40
static const int escapeKey
Definition juce_KeyPress.h:190
void setResizable(bool shouldBeResizable, bool useBottomRightCornerResizer)
Definition juce_ResizableWindow.cpp:245
void setContentOwned(Component *newContentComponent, bool resizeToFitWhenContentChangesSize)
Definition juce_ResizableWindow.cpp:114
Component::SafePointer< Component > contentComponent
Definition juce_ResizableWindow.h:394
void setContentNonOwned(Component *newContentComponent, bool resizeToFitWhenContentChangesSize)
Definition juce_ResizableWindow.cpp:119
Definition juce_String.h:53
void centreAroundComponent(Component *componentToCentreAround, int width, int height)
Definition juce_TopLevelWindow.cpp:290
void setUsingNativeTitleBar(bool useNativeTitleBar)
Definition juce_TopLevelWindow.cpp:238
bool useNativeTitleBar
Definition juce_TopLevelWindow.h:157
unsigned d
Definition inflate.c:940
static const char * name
Definition pugl.h:1582
static bool resizable
Definition pugl.h:1668
#define jassert(expression)
#define JUCE_DECLARE_NON_COPYABLE(className)
Definition carla_juce.cpp:31
bool juce_areThereAnyAlwaysOnTopWindows()
Definition juce_linux_Windowing.cpp:31
@ dialogWindow
Definition juce_AccessibilityRole.h:62
#define true
Definition ordinals.h:82
Definition juce_DialogWindow.h:90
DialogWindow * create()
Definition juce_DialogWindow.cpp:109
Component * componentToCentreAround
Definition juce_DialogWindow.h:110
Colour dialogBackgroundColour
Definition juce_DialogWindow.h:97
bool useNativeTitleBar
Definition juce_DialogWindow.h:115
OptionalScopedPointer< Component > content
Definition juce_DialogWindow.h:104
bool useBottomRightCornerResizer
Definition juce_DialogWindow.h:119
DialogWindow * launchAsync()
Definition juce_DialogWindow.cpp:116
bool resizable
Definition juce_DialogWindow.h:117
bool escapeKeyTriggersCloseButton
Definition juce_DialogWindow.h:113
String dialogTitle
Definition juce_DialogWindow.h:94
LaunchOptions() noexcept
Definition juce_DialogWindow.cpp:107
ZCONST char * key
Definition crypt.c:587