• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kunitoki / popsicle / 8605277314

08 Apr 2024 07:01PM UTC coverage: 20.182% (+1.4%) from 18.801%
8605277314

push

github

web-flow
More tests coverage (#24)

324 of 487 new or added lines in 8 files covered. (66.53%)

45 existing lines in 5 files now uncovered.

23834 of 118095 relevant lines covered (20.18%)

3609.91 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

95.76
/modules/juce_python/bindings/ScriptJuceGuiBasicsBindings.cpp
1
/**
2
 * juce_python - Python bindings for the JUCE framework.
3
 *
4
 * This file is part of the popsicle project.
5
 *
6
 * Copyright (c) 2024 - kunitoki <kunitoki@gmail.com>
7
 *
8
 * popsicle is an open source library subject to commercial or open-source licensing.
9
 *
10
 * By using popsicle, you agree to the terms of the popsicle License Agreement, which can
11
 * be found at https://raw.githubusercontent.com/kunitoki/popsicle/master/LICENSE
12
 *
13
 * Or: You may also use this code under the terms of the GPL v3 (see www.gnu.org/licenses).
14
 *
15
 * POPSICLE IS PROVIDED "AS IS" WITHOUT ANY WARRANTY, AND ALL WARRANTIES, WHETHER EXPRESSED
16
 * OR IMPLIED, INCLUDING MERCHANTABILITY AND FITNESS FOR PURPOSE, ARE DISCLAIMED.
17
 */
18

19
#include "ScriptJuceGuiBasicsBindings.h"
20
#include "../scripting/ScriptBindings.h"
21
#include "../utilities/ClassDemangling.h"
22

23
#include <string_view>
24
#include <typeinfo>
25
#include <tuple>
26

27
// =================================================================================================
28

29
namespace PYBIND11_NAMESPACE {
30

31
template <>
32
struct polymorphic_type_hook<juce::Component>
33
{
34
    static const void* get (const juce::Component* src, const std::type_info*& type)
×
35
    {
36
        if (src == nullptr)
×
37
            return src;
×
38

39
        auto& map = popsicle::Bindings::getComponentTypeMap();
×
40
        auto demangledName = popsicle::Helpers::demangleClassName (typeid (*src).name());
×
41

42
        auto it = map.typeMap.find (demangledName);
×
43
        if (it != map.typeMap.end())
×
44
            return it->second (src, type);
×
45

46
        return src;
×
47
    }
48
};
49

50
} // namespace PYBIND11_NAMESPACE
51

52
namespace popsicle::Bindings {
53

54
using namespace juce;
55

56
namespace py = pybind11;
57
using namespace py::literals;
58

59
// ============================================================================================
60

61
void registerJuceGuiBasicsBindings (py::module_& m)
1✔
62
{
63
    // ============================================================================================ juce::JUCEApplication
64

65
    py::class_<JUCEApplication, PyJUCEApplication> classJUCEApplication (m, "JUCEApplication");
2✔
66

67
    classJUCEApplication
68
        .def (py::init<>())
1✔
69
        .def_static ("getInstance", &JUCEApplication::getInstance, py::return_value_policy::reference)
1✔
70
        .def ("getApplicationName", &JUCEApplication::getApplicationName)
1✔
71
        .def ("getApplicationVersion", &JUCEApplication::getApplicationVersion)
1✔
72
        .def ("moreThanOneInstanceAllowed", &JUCEApplication::moreThanOneInstanceAllowed)
1✔
73
        .def ("initialise", &JUCEApplication::initialise, "commandLineParameters"_a)
1✔
74
        .def ("shutdown", &JUCEApplication::shutdown)
1✔
75
        .def ("anotherInstanceStarted", &JUCEApplication::anotherInstanceStarted)
1✔
76
        .def ("systemRequestedQuit", &JUCEApplication::systemRequestedQuit)
1✔
77
        .def ("suspended", &JUCEApplication::suspended)
1✔
78
        .def ("resumed", &JUCEApplication::resumed)
1✔
79
        .def ("unhandledException", &JUCEApplication::unhandledException)
1✔
80
        .def ("memoryWarningReceived", &JUCEApplication::memoryWarningReceived)
1✔
81
        .def_static ("quit", &JUCEApplication::quit)
1✔
82
        .def_static ("getCommandLineParameterArray", &JUCEApplication::getCommandLineParameterArray)
1✔
83
        .def_static ("getCommandLineParameters", &JUCEApplication::getCommandLineParameters)
1✔
84
        .def ("setApplicationReturnValue", [](JUCEApplication& self, int value) { self.setApplicationReturnValue (value); })
2✔
85
        .def ("getApplicationReturnValue", [](const JUCEApplication& self) { return self.getApplicationReturnValue(); })
3✔
86
        .def_static ("isStandaloneApp", &JUCEApplication::isStandaloneApp)
1✔
87
        .def ("isInitialising", &JUCEApplication::isInitialising)
1✔
88
    ;
89

90
    // ============================================================================================ juce::ModifierKeys
91

92
    py::class_<ModifierKeys> classModifierKeys (m, "ModifierKeys");
2✔
93

94
    Helpers::makeArithmeticEnum<ModifierKeys::Flags> (classModifierKeys, "Flags")
2✔
95
        .value ("noModifiers", ModifierKeys::Flags::noModifiers)
1✔
96
        .value ("shiftModifier", ModifierKeys::Flags::shiftModifier)
1✔
97
        .value ("ctrlModifier", ModifierKeys::Flags::ctrlModifier)
1✔
98
        .value ("altModifier", ModifierKeys::Flags::altModifier)
1✔
99
        .value ("leftButtonModifier", ModifierKeys::Flags::leftButtonModifier)
1✔
100
        .value ("rightButtonModifier", ModifierKeys::Flags::rightButtonModifier)
1✔
101
        .value ("middleButtonModifier", ModifierKeys::Flags::middleButtonModifier)
1✔
102
        .value ("commandModifier", ModifierKeys::Flags::commandModifier)
1✔
103
        .value ("popupMenuClickModifier", ModifierKeys::Flags::popupMenuClickModifier)
1✔
104
        .value ("allKeyboardModifiers", ModifierKeys::Flags::allKeyboardModifiers)
1✔
105
        .value ("allMouseButtonModifiers", ModifierKeys::Flags::allMouseButtonModifiers)
1✔
106
        .value ("ctrlAltCommandModifiers", ModifierKeys::Flags::ctrlAltCommandModifiers)
1✔
107
        .export_values();
1✔
108

109
    classModifierKeys
110
        .def (py::init<>())
1✔
111
        .def (py::init<int>())
1✔
112
        .def (py::init<ModifierKeys::Flags>())
1✔
113
        .def (py::init<const ModifierKeys&>())
1✔
114
        .def ("isCommandDown", &ModifierKeys::isCommandDown)
1✔
115
        .def ("isPopupMenu", &ModifierKeys::isPopupMenu)
1✔
116
        .def ("isLeftButtonDown", &ModifierKeys::isLeftButtonDown)
1✔
117
        .def ("isRightButtonDown", &ModifierKeys::isRightButtonDown)
1✔
118
        .def ("isMiddleButtonDown", &ModifierKeys::isMiddleButtonDown)
1✔
119
        .def ("isAnyMouseButtonDown", &ModifierKeys::isAnyMouseButtonDown)
1✔
120
        .def ("isAnyModifierKeyDown", &ModifierKeys::isAnyModifierKeyDown)
1✔
121
        .def ("isShiftDown", &ModifierKeys::isShiftDown)
1✔
122
        .def ("isCtrlDown", &ModifierKeys::isCtrlDown)
1✔
123
        .def ("isAltDown", &ModifierKeys::isAltDown)
1✔
124
        .def ("withOnlyMouseButtons", &ModifierKeys::withOnlyMouseButtons)
1✔
125
        .def ("withoutMouseButtons", &ModifierKeys::withoutMouseButtons)
1✔
126
        .def (py::self == py::self)
1✔
127
        .def (py::self != py::self)
1✔
128
        .def ("getRawFlags", &ModifierKeys::getRawFlags)
1✔
129
        .def ("withoutFlags", &ModifierKeys::withoutFlags)
1✔
130
        .def ("withoutFlags", [](const ModifierKeys& self, ModifierKeys::Flags flags) { return self.withoutFlags (static_cast<int> (flags)); })
1✔
131
        .def ("withFlags", &ModifierKeys::withFlags)
1✔
132
        .def ("withFlags", [](const ModifierKeys& self, ModifierKeys::Flags flags) { return self.withFlags (static_cast<int> (flags)); })
1✔
133
        .def ("testFlags", &ModifierKeys::testFlags)
1✔
134
        .def ("testFlags", [](const ModifierKeys& self, ModifierKeys::Flags flags) { return self.testFlags (static_cast<int> (flags)); })
1✔
135
        .def ("getNumMouseButtonsDown", &ModifierKeys::getNumMouseButtonsDown)
1✔
136
        .def_readonly_static ("currentModifiers", &ModifierKeys::currentModifiers, py::return_value_policy::copy)
1✔
137
        .def_static ("getCurrentModifiers", &ModifierKeys::getCurrentModifiers)
1✔
138
        .def_static ("getCurrentModifiersRealtime", &ModifierKeys::getCurrentModifiersRealtime)
1✔
139
    ;
140

141
    // ============================================================================================ juce::KeyPress
142

143
    py::class_<KeyPress> classKeyPress (m, "KeyPress");
2✔
144

145
    classKeyPress
146
        .def (py::init<>())
1✔
147
        .def (py::init<int>(), "keyCode"_a)
1✔
148
        .def (py::init ([](char keyCode) { return KeyPress (static_cast<int> (keyCode)); }), "keyCode"_a)
1✔
149
        .def (py::init ([](int keyCode, int modifiers, char32_t textCharacter)
×
150
            { return new KeyPress (keyCode, static_cast<ModifierKeys> (modifiers), static_cast<juce_wchar> (textCharacter)); }), "keyCode"_a, "modifiers"_a, "textCharacter"_a)
3✔
151
        .def (py::init ([](int keyCode, ModifierKeys modifiers, char32_t textCharacter)
×
152
            { return new KeyPress (keyCode, modifiers, static_cast<juce_wchar> (textCharacter)); }), "keyCode"_a, "modifiers"_a, "textCharacter"_a)
2✔
153
        .def (py::init ([](int keyCode, ModifierKeys::Flags modifiers, char32_t textCharacter)
×
154
            { return new KeyPress (keyCode, modifiers, static_cast<juce_wchar> (textCharacter)); }), "keyCode"_a, "modifiers"_a, "textCharacter"_a)
1✔
155
        .def (py::init ([](char keyCode, int modifiers, char32_t textCharacter)
×
156
            { return new KeyPress (static_cast<int> (keyCode), modifiers, static_cast<juce_wchar> (textCharacter)); }), "keyCode"_a, "modifiers"_a, "textCharacter"_a)
4✔
157
        .def (py::init ([](char keyCode, ModifierKeys modifiers, char32_t textCharacter)
×
158
            { return new KeyPress (static_cast<int> (keyCode), modifiers, static_cast<juce_wchar> (textCharacter)); }), "keyCode"_a, "modifiers"_a, "textCharacter"_a)
2✔
159
        .def (py::init ([](char keyCode, ModifierKeys::Flags modifiers, char32_t textCharacter)
×
160
            { return new KeyPress (static_cast<int> (keyCode), modifiers, static_cast<juce_wchar> (textCharacter)); }), "keyCode"_a, "modifiers"_a, "textCharacter"_a)
1✔
161
        .def (py::init<const KeyPress&>())
1✔
162
        .def (py::self == py::self)
1✔
163
        .def (py::self != py::self)
1✔
164
        .def (py::self == int())
1✔
165
        .def (py::self != int())
1✔
166
        .def ("isValid", &KeyPress::isValid)
1✔
167
        .def ("getKeyCode", &KeyPress::getKeyCode)
1✔
168
        .def ("getModifiers", &KeyPress::getModifiers)
1✔
169
        .def ("getTextCharacter", [](const KeyPress& self) { return static_cast<char32_t> (self.getTextCharacter()); })
8✔
170
        .def ("isKeyCode", &KeyPress::isKeyCode)
1✔
171
        .def_static ("createFromDescription", &KeyPress::createFromDescription)
1✔
172
        .def ("getTextDescription", &KeyPress::getTextDescription)
1✔
173
        .def ("getTextDescriptionWithIcons", &KeyPress::getTextDescriptionWithIcons)
1✔
174
        .def ("isCurrentlyDown", &KeyPress::isCurrentlyDown)
1✔
175
        .def_static ("isKeyCurrentlyDown", &KeyPress::isKeyCurrentlyDown)
1✔
176
    ;
177

178
    classKeyPress.attr ("spaceKey") = py::int_ (KeyPress::spaceKey);
1✔
179
    classKeyPress.attr ("escapeKey") = py::int_ (KeyPress::escapeKey);
1✔
180
    classKeyPress.attr ("returnKey") = py::int_ (KeyPress::returnKey);
1✔
181
    classKeyPress.attr ("tabKey") = py::int_ (KeyPress::tabKey);
1✔
182
    classKeyPress.attr ("deleteKey") = py::int_ (KeyPress::deleteKey);
1✔
183
    classKeyPress.attr ("backspaceKey") = py::int_ (KeyPress::backspaceKey);
1✔
184
    classKeyPress.attr ("insertKey") = py::int_ (KeyPress::insertKey);
1✔
185
    classKeyPress.attr ("upKey") = py::int_ (KeyPress::upKey);
1✔
186
    classKeyPress.attr ("downKey") = py::int_ (KeyPress::downKey);
1✔
187
    classKeyPress.attr ("leftKey") = py::int_ (KeyPress::leftKey);
1✔
188
    classKeyPress.attr ("rightKey") = py::int_ (KeyPress::rightKey);
1✔
189
    classKeyPress.attr ("pageUpKey") = py::int_ (KeyPress::pageUpKey);
1✔
190
    classKeyPress.attr ("pageDownKey") = py::int_ (KeyPress::pageDownKey);
1✔
191
    classKeyPress.attr ("homeKey") = py::int_ (KeyPress::homeKey);
1✔
192
    classKeyPress.attr ("endKey") = py::int_ (KeyPress::endKey);
1✔
193
    classKeyPress.attr ("F1Key") = py::int_ (KeyPress::F1Key);
1✔
194
    classKeyPress.attr ("F2Key") = py::int_ (KeyPress::F2Key);
1✔
195
    classKeyPress.attr ("F3Key") = py::int_ (KeyPress::F3Key);
1✔
196
    classKeyPress.attr ("F4Key") = py::int_ (KeyPress::F4Key);
1✔
197
    classKeyPress.attr ("F5Key") = py::int_ (KeyPress::F5Key);
1✔
198
    classKeyPress.attr ("F6Key") = py::int_ (KeyPress::F6Key);
1✔
199
    classKeyPress.attr ("F7Key") = py::int_ (KeyPress::F7Key);
1✔
200
    classKeyPress.attr ("F8Key") = py::int_ (KeyPress::F8Key);
1✔
201
    classKeyPress.attr ("F9Key") = py::int_ (KeyPress::F9Key);
1✔
202
    classKeyPress.attr ("F10Key") = py::int_ (KeyPress::F10Key);
1✔
203
    classKeyPress.attr ("F11Key") = py::int_ (KeyPress::F11Key);
1✔
204
    classKeyPress.attr ("F12Key") = py::int_ (KeyPress::F12Key);
1✔
205
    classKeyPress.attr ("F13Key") = py::int_ (KeyPress::F13Key);
1✔
206
    classKeyPress.attr ("F14Key") = py::int_ (KeyPress::F14Key);
1✔
207
    classKeyPress.attr ("F15Key") = py::int_ (KeyPress::F15Key);
1✔
208
    classKeyPress.attr ("F16Key") = py::int_ (KeyPress::F16Key);
1✔
209
    classKeyPress.attr ("F17Key") = py::int_ (KeyPress::F17Key);
1✔
210
    classKeyPress.attr ("F18Key") = py::int_ (KeyPress::F18Key);
1✔
211
    classKeyPress.attr ("F19Key") = py::int_ (KeyPress::F19Key);
1✔
212
    classKeyPress.attr ("F20Key") = py::int_ (KeyPress::F20Key);
1✔
213
    classKeyPress.attr ("F21Key") = py::int_ (KeyPress::F21Key);
1✔
214
    classKeyPress.attr ("F22Key") = py::int_ (KeyPress::F22Key);
1✔
215
    classKeyPress.attr ("F23Key") = py::int_ (KeyPress::F23Key);
1✔
216
    classKeyPress.attr ("F24Key") = py::int_ (KeyPress::F24Key);
1✔
217
    classKeyPress.attr ("F25Key") = py::int_ (KeyPress::F25Key);
1✔
218
    classKeyPress.attr ("F26Key") = py::int_ (KeyPress::F26Key);
1✔
219
    classKeyPress.attr ("F27Key") = py::int_ (KeyPress::F27Key);
1✔
220
    classKeyPress.attr ("F28Key") = py::int_ (KeyPress::F28Key);
1✔
221
    classKeyPress.attr ("F29Key") = py::int_ (KeyPress::F29Key);
1✔
222
    classKeyPress.attr ("F30Key") = py::int_ (KeyPress::F30Key);
1✔
223
    classKeyPress.attr ("F31Key") = py::int_ (KeyPress::F31Key);
1✔
224
    classKeyPress.attr ("F32Key") = py::int_ (KeyPress::F32Key);
1✔
225
    classKeyPress.attr ("F33Key") = py::int_ (KeyPress::F33Key);
1✔
226
    classKeyPress.attr ("F34Key") = py::int_ (KeyPress::F34Key);
1✔
227
    classKeyPress.attr ("F35Key") = py::int_ (KeyPress::F35Key);
1✔
228
    classKeyPress.attr ("numberPad0") = py::int_ (KeyPress::numberPad0);
1✔
229
    classKeyPress.attr ("numberPad1") = py::int_ (KeyPress::numberPad1);
1✔
230
    classKeyPress.attr ("numberPad2") = py::int_ (KeyPress::numberPad2);
1✔
231
    classKeyPress.attr ("numberPad3") = py::int_ (KeyPress::numberPad3);
1✔
232
    classKeyPress.attr ("numberPad4") = py::int_ (KeyPress::numberPad4);
1✔
233
    classKeyPress.attr ("numberPad5") = py::int_ (KeyPress::numberPad5);
1✔
234
    classKeyPress.attr ("numberPad6") = py::int_ (KeyPress::numberPad6);
1✔
235
    classKeyPress.attr ("numberPad7") = py::int_ (KeyPress::numberPad7);
1✔
236
    classKeyPress.attr ("numberPad8") = py::int_ (KeyPress::numberPad8);
1✔
237
    classKeyPress.attr ("numberPad9") = py::int_ (KeyPress::numberPad9);
1✔
238
    classKeyPress.attr ("numberPadAdd") = py::int_ (KeyPress::numberPadAdd);
1✔
239
    classKeyPress.attr ("numberPadSubtract") = py::int_ (KeyPress::numberPadSubtract);
1✔
240
    classKeyPress.attr ("numberPadMultiply") = py::int_ (KeyPress::numberPadMultiply);
1✔
241
    classKeyPress.attr ("numberPadDivide") = py::int_ (KeyPress::numberPadDivide);
1✔
242
    classKeyPress.attr ("numberPadSeparator") = py::int_ (KeyPress::numberPadSeparator);
1✔
243
    classKeyPress.attr ("numberPadDecimalPoint") = py::int_ (KeyPress::numberPadDecimalPoint);
1✔
244
    classKeyPress.attr ("numberPadEquals") = py::int_ (KeyPress::numberPadEquals);
1✔
245
    classKeyPress.attr ("numberPadDelete") = py::int_ (KeyPress::numberPadDelete);
1✔
246
    classKeyPress.attr ("playKey") = py::int_ (KeyPress::playKey);
1✔
247
    classKeyPress.attr ("stopKey") = py::int_ (KeyPress::stopKey);
1✔
248
    classKeyPress.attr ("fastForwardKey") = py::int_ (KeyPress::fastForwardKey);
1✔
249
    classKeyPress.attr ("rewindKey") = py::int_ (KeyPress::rewindKey);
1✔
250

251
    // ============================================================================================ juce::KeyListener
252

253
    py::class_<KeyListener, PyKeyListener> classKeyListener (m, "KeyListener");
2✔
254

255
    classKeyListener
256
        .def (py::init<>())
1✔
257
        .def ("keyPressed", &KeyListener::keyPressed)
1✔
258
        .def ("keyStateChanged", &KeyListener::keyStateChanged)
1✔
259
    ;
260

261
    // ============================================================================================ juce::TextInputTarget
262

263
    py::class_<TextInputTarget, PyTextInputTarget<>> classTextInputTarget (m, "TextInputTarget");
2✔
264

265
    classTextInputTarget
266
        .def (py::init<>())
1✔
267
        .def ("isTextInputActive", &TextInputTarget::isTextInputActive)
1✔
268
        .def ("getHighlightedRegion", &TextInputTarget::getHighlightedRegion)
1✔
269
        .def ("setHighlightedRegion", &TextInputTarget::setHighlightedRegion)
1✔
270
        .def ("setTemporaryUnderlining", &TextInputTarget::setTemporaryUnderlining)
1✔
271
        .def ("getTextInRange", &TextInputTarget::getTextInRange)
1✔
272
        .def ("insertTextAtCaret", &TextInputTarget::insertTextAtCaret)
1✔
273
        .def ("getCaretPosition", &TextInputTarget::getCaretPosition)
1✔
274
        .def ("getCaretRectangleForCharIndex", &TextInputTarget::getCaretRectangleForCharIndex)
1✔
275
        .def ("getTotalNumChars", &TextInputTarget::getTotalNumChars)
1✔
276
        .def ("getCharIndexForPoint", &TextInputTarget::getCharIndexForPoint)
1✔
277
        .def ("getTextBounds", &TextInputTarget::getTextBounds)
1✔
278
        .def ("getKeyboardType", &TextInputTarget::getKeyboardType)
1✔
279
    ;
280

281
    // ============================================================================================ juce::SystemClipboard
282

283
    py::class_<SystemClipboard> classSystemClipboard (m, "SystemClipboard");
2✔
284

285
    classSystemClipboard
286
        .def_static ("copyTextToClipboard", &SystemClipboard::copyTextToClipboard)
1✔
287
        .def_static ("getTextFromClipboard", &SystemClipboard::getTextFromClipboard)
1✔
288
    ;
289

290
    // ============================================================================================ juce::MouseInputSource
291

292
    py::class_<MouseInputSource> classMouseInputSource (m, "MouseInputSource");
2✔
293

294
    py::enum_<MouseInputSource::InputSourceType> (classMouseInputSource, "InputSourceType")
2✔
295
        .value ("mouse", MouseInputSource::InputSourceType::mouse)
1✔
296
        .value ("touch", MouseInputSource::InputSourceType::touch)
1✔
297
        .value ("pen", MouseInputSource::InputSourceType::pen)
1✔
298
        .export_values();
1✔
299

300
    classMouseInputSource
301
        .def ("getType", &MouseInputSource::getType)
1✔
302
        .def ("isMouse", &MouseInputSource::isMouse)
1✔
303
        .def ("isTouch", &MouseInputSource::isTouch)
1✔
304
        .def ("isPen", &MouseInputSource::isPen)
1✔
305
        .def ("canHover", &MouseInputSource::canHover)
1✔
306
        .def ("hasMouseWheel", &MouseInputSource::hasMouseWheel)
1✔
307
        .def ("getIndex", &MouseInputSource::getIndex)
1✔
308
        .def ("isDragging", &MouseInputSource::isDragging)
1✔
309
        .def ("getScreenPosition", &MouseInputSource::getScreenPosition)
1✔
310
        .def ("getRawScreenPosition", &MouseInputSource::getRawScreenPosition)
1✔
311
        .def ("getCurrentModifiers", &MouseInputSource::getCurrentModifiers)
1✔
312
        .def ("getCurrentPressure", &MouseInputSource::getCurrentPressure)
1✔
313
        .def ("getCurrentOrientation", &MouseInputSource::getCurrentOrientation)
1✔
314
        .def ("getCurrentRotation", &MouseInputSource::getCurrentRotation)
1✔
315
        .def ("getCurrentTilt", &MouseInputSource::getCurrentTilt)
1✔
316
        .def ("isPressureValid", &MouseInputSource::isPressureValid)
1✔
317
        .def ("isOrientationValid", &MouseInputSource::isOrientationValid)
1✔
318
        .def ("isRotationValid", &MouseInputSource::isRotationValid)
1✔
319
        .def ("isTiltValid", &MouseInputSource::isTiltValid)
1✔
320
        .def ("getComponentUnderMouse", &MouseInputSource::getComponentUnderMouse, py::return_value_policy::reference)
1✔
321
        .def ("triggerFakeMove", &MouseInputSource::triggerFakeMove)
1✔
322
        .def ("getNumberOfMultipleClicks", &MouseInputSource::getNumberOfMultipleClicks)
1✔
323
        .def ("getLastMouseDownTime", &MouseInputSource::getLastMouseDownTime)
1✔
324
        .def ("getLastMouseDownPosition", &MouseInputSource::getLastMouseDownPosition)
1✔
325
        .def ("isLongPressOrDrag", &MouseInputSource::isLongPressOrDrag)
1✔
326
        .def ("hasMovedSignificantlySincePressed", &MouseInputSource::hasMovedSignificantlySincePressed)
1✔
327
        .def ("hasMouseCursor", &MouseInputSource::hasMouseCursor)
1✔
328
        .def ("showMouseCursor", &MouseInputSource::showMouseCursor)
1✔
329
        .def ("hideCursor", &MouseInputSource::hideCursor)
1✔
330
        .def ("revealCursor", &MouseInputSource::revealCursor)
1✔
331
        .def ("forceMouseCursorUpdate", &MouseInputSource::forceMouseCursorUpdate)
1✔
332
        .def ("canDoUnboundedMovement", &MouseInputSource::canDoUnboundedMovement)
1✔
333
        .def ("enableUnboundedMouseMovement", &MouseInputSource::enableUnboundedMouseMovement)
1✔
334
        .def ("isUnboundedMouseMovementEnabled", &MouseInputSource::isUnboundedMouseMovementEnabled)
1✔
335
        .def ("setScreenPosition", &MouseInputSource::setScreenPosition)
1✔
336
        .def_readonly_static ("defaultPressure", &MouseInputSource::defaultPressure)
1✔
337
        .def_readonly_static ("defaultRotation", &MouseInputSource::defaultRotation)
1✔
338
        .def_readonly_static ("defaultTiltX", &MouseInputSource::defaultTiltX)
1✔
339
        .def_readonly_static ("defaultTiltY", &MouseInputSource::defaultTiltY)
1✔
340
        .def_readonly_static ("offscreenMousePos", &MouseInputSource::offscreenMousePos)
1✔
341
    ;
342

343
    // ============================================================================================ juce::MouseEvent
344

345
    py::class_<MouseEvent> classMouseEvent (m, "MouseEvent");
2✔
346

347
    classMouseEvent
348
        .def (py::init<MouseInputSource, Point<float>, ModifierKeys, float, float, float, float, float, Component*, Component*, Time, Point<float>, Time, int, bool>(),
1✔
349
            "source"_a, "position"_a, "modifiers"_a, "pressure"_a, "orientation"_a, "rotation"_a, "tiltX"_a, "tiltY"_a,
1✔
350
            "eventComponent"_a, "originator"_a, "eventTime"_a, "mouseDownPos"_a, "mouseDownTime"_a, "numberOfClicks"_a, "mouseWasDragged"_a)
2✔
351
        .def_readonly ("position", &MouseEvent::position)
1✔
352
        .def_readonly ("x", &MouseEvent::x)
1✔
353
        .def_readonly ("y", &MouseEvent::y)
1✔
354
        .def_readonly ("mods", &MouseEvent::mods)
1✔
355
        .def_readonly ("pressure", &MouseEvent::pressure)
1✔
356
        .def_readonly ("orientation", &MouseEvent::orientation)
1✔
357
        .def_readonly ("rotation", &MouseEvent::rotation)
1✔
358
        .def_readonly ("tiltX", &MouseEvent::tiltX)
1✔
359
        .def_readonly ("tiltY", &MouseEvent::tiltY)
1✔
360
        .def_readonly ("mouseDownPosition", &MouseEvent::mouseDownPosition)
1✔
361
        .def_readonly ("eventComponent", &MouseEvent::eventComponent, py::return_value_policy::reference)
1✔
362
        .def_readonly ("originalComponent", &MouseEvent::originalComponent, py::return_value_policy::reference)
1✔
363
        .def_readonly ("eventTime", &MouseEvent::eventTime)
1✔
364
        .def_readonly ("mouseDownTime", &MouseEvent::mouseDownTime)
1✔
365
        .def_readonly ("source", &MouseEvent::source)
1✔
366
        .def ("getMouseDownX", &MouseEvent::getMouseDownX)
1✔
367
        .def ("getMouseDownY", &MouseEvent::getMouseDownY)
1✔
368
        .def ("getMouseDownPosition", &MouseEvent::getMouseDownPosition)
1✔
369
        .def ("getDistanceFromDragStart", &MouseEvent::getDistanceFromDragStart)
1✔
370
        .def ("getDistanceFromDragStartX", &MouseEvent::getDistanceFromDragStartX)
1✔
371
        .def ("getDistanceFromDragStartY", &MouseEvent::getDistanceFromDragStartY)
1✔
372
        .def ("getOffsetFromDragStart", &MouseEvent::getOffsetFromDragStart)
1✔
373
        .def ("mouseWasDraggedSinceMouseDown", &MouseEvent::mouseWasDraggedSinceMouseDown)
1✔
374
        .def ("mouseWasClicked", &MouseEvent::mouseWasClicked)
1✔
375
        .def ("getNumberOfClicks", &MouseEvent::getNumberOfClicks)
1✔
376
        .def ("getLengthOfMousePress", &MouseEvent::getLengthOfMousePress)
1✔
377
        .def ("isPressureValid", &MouseEvent::isPressureValid)
1✔
378
        .def ("isOrientationValid", &MouseEvent::isOrientationValid)
1✔
379
        .def ("isRotationValid", &MouseEvent::isRotationValid)
1✔
380
        .def ("isTiltValid", &MouseEvent::isTiltValid)
1✔
381
        .def ("getPosition", &MouseEvent::getPosition)
1✔
382
        .def ("getScreenX", &MouseEvent::getScreenX)
1✔
383
        .def ("getScreenY", &MouseEvent::getScreenY)
1✔
384
        .def ("getScreenPosition", &MouseEvent::getScreenPosition)
1✔
385
        .def ("getMouseDownScreenX", &MouseEvent::getMouseDownScreenX)
1✔
386
        .def ("getMouseDownScreenY", &MouseEvent::getMouseDownScreenY)
1✔
387
        .def ("getMouseDownScreenPosition", &MouseEvent::getMouseDownScreenPosition)
1✔
388
        .def ("getEventRelativeTo", &MouseEvent::getEventRelativeTo)
1✔
389
        .def ("withNewPosition", py::overload_cast<Point<float>> (&MouseEvent::withNewPosition, py::const_))
1✔
390
        .def ("withNewPosition", py::overload_cast<Point<int>> (&MouseEvent::withNewPosition, py::const_))
1✔
391
        .def_static ("setDoubleClickTimeout", &MouseEvent::setDoubleClickTimeout)
1✔
392
        .def_static ("getDoubleClickTimeout", &MouseEvent::getDoubleClickTimeout)
1✔
393
    ;
394

395
    py::class_<MouseWheelDetails> classMouseWheelDetails (m, "MouseWheelDetails");
2✔
396

397
    classMouseWheelDetails
398
        .def (py::init<>())
1✔
399
        .def_readwrite ("deltaX", &MouseWheelDetails::deltaX)
1✔
400
        .def_readwrite ("deltaY", &MouseWheelDetails::deltaY)
1✔
401
        .def_readwrite ("isReversed", &MouseWheelDetails::isReversed)
1✔
402
        .def_readwrite ("isSmooth", &MouseWheelDetails::isSmooth)
1✔
403
        .def_readwrite ("isInertial", &MouseWheelDetails::isInertial)
1✔
404
    ;
405

406
    py::class_<PenDetails> classPenDetails (m, "PenDetails");
2✔
407

408
    classPenDetails
409
        .def (py::init<>())
1✔
410
        .def_readwrite ("rotation", &PenDetails::rotation)
1✔
411
        .def_readwrite ("tiltX", &PenDetails::tiltX)
1✔
412
        .def_readwrite ("tiltY", &PenDetails::tiltY)
1✔
413
    ;
414

415
    // ============================================================================================ juce::MouseListener
416

417
    py::class_<MouseListener, PyMouseListener<>> classMouseListener (m, "MouseListener");
2✔
418

419
    classMouseListener
420
        .def (py::init<>())
1✔
421
        .def ("mouseMove", &MouseListener::mouseMove)
1✔
422
        .def ("mouseEnter", &MouseListener::mouseEnter)
1✔
423
        .def ("mouseExit", &MouseListener::mouseExit)
1✔
424
        .def ("mouseDown", &MouseListener::mouseDown)
1✔
425
        .def ("mouseDrag", &MouseListener::mouseDrag)
1✔
426
        .def ("mouseUp", &MouseListener::mouseUp)
1✔
427
        .def ("mouseDoubleClick", &MouseListener::mouseDoubleClick)
1✔
428
        .def ("mouseWheelMove", &MouseListener::mouseWheelMove)
1✔
429
        .def ("mouseMagnify", &MouseListener::mouseMagnify)
1✔
430
    ;
431

432
    // ============================================================================================ juce::MouseCursor
433

434
    py::class_<MouseCursor> classMouseCursor (m, "MouseCursor");
2✔
435

436
    py::enum_<MouseCursor::StandardCursorType> (classMouseCursor, "StandardCursorType")
2✔
437
        .value ("ParentCursor", MouseCursor::StandardCursorType::ParentCursor)
1✔
438
        .value ("NoCursor", MouseCursor::StandardCursorType::NoCursor)
1✔
439
        .value ("NormalCursor", MouseCursor::StandardCursorType::NormalCursor)
1✔
440
        .value ("WaitCursor", MouseCursor::StandardCursorType::WaitCursor)
1✔
441
        .value ("IBeamCursor", MouseCursor::StandardCursorType::IBeamCursor)
1✔
442
        .value ("CrosshairCursor", MouseCursor::StandardCursorType::CrosshairCursor)
1✔
443
        .value ("CopyingCursor", MouseCursor::StandardCursorType::CopyingCursor)
1✔
444
        .value ("PointingHandCursor", MouseCursor::StandardCursorType::PointingHandCursor)
1✔
445
        .value ("DraggingHandCursor", MouseCursor::StandardCursorType::DraggingHandCursor)
1✔
446
        .value ("LeftRightResizeCursor", MouseCursor::StandardCursorType::LeftRightResizeCursor)
1✔
447
        .value ("UpDownResizeCursor", MouseCursor::StandardCursorType::UpDownResizeCursor)
1✔
448
        .value ("UpDownLeftRightResizeCursor", MouseCursor::StandardCursorType::UpDownLeftRightResizeCursor)
1✔
449
        .value ("TopEdgeResizeCursor", MouseCursor::StandardCursorType::TopEdgeResizeCursor)
1✔
450
        .value ("BottomEdgeResizeCursor", MouseCursor::StandardCursorType::BottomEdgeResizeCursor)
1✔
451
        .value ("LeftEdgeResizeCursor", MouseCursor::StandardCursorType::LeftEdgeResizeCursor)
1✔
452
        .value ("RightEdgeResizeCursor", MouseCursor::StandardCursorType::RightEdgeResizeCursor)
1✔
453
        .value ("TopLeftCornerResizeCursor", MouseCursor::StandardCursorType::TopLeftCornerResizeCursor)
1✔
454
        .value ("TopRightCornerResizeCursor", MouseCursor::StandardCursorType::TopRightCornerResizeCursor)
1✔
455
        .value ("BottomLeftCornerResizeCursor", MouseCursor::StandardCursorType::BottomLeftCornerResizeCursor)
1✔
456
        .value ("BottomRightCornerResizeCursor", MouseCursor::StandardCursorType::BottomRightCornerResizeCursor)
1✔
457
        .value ("NumStandardCursorTypes", MouseCursor::StandardCursorType::NumStandardCursorTypes)
1✔
458
        .export_values();
1✔
459

460
    classMouseCursor
461
        .def (py::init<>())
1✔
462
        .def (py::init<MouseCursor::StandardCursorType>())
1✔
463
        .def (py::init<const Image&, int, int>())
1✔
464
        .def (py::init<const Image&, int, int, float>())
1✔
465
        .def (py::init<const ScaledImage&, Point<int>>())
1✔
466
        .def (py::self == py::self)
1✔
467
        .def (py::self != py::self)
1✔
468
        .def (py::self == MouseCursor::StandardCursorType())
1✔
469
        .def (py::self != MouseCursor::StandardCursorType())
1✔
470
        .def_static ("showWaitCursor", &MouseCursor::showWaitCursor)
1✔
471
        .def_static ("hideWaitCursor", &MouseCursor::hideWaitCursor)
1✔
472
    ;
473

474
    // ============================================================================================ juce::Desktop
475

476
    py::class_<Displays> classDisplays (m, "Displays");
2✔
477

478
    classDisplays
479
        .def ("physicalToLogical", static_cast<Rectangle<int> (Displays::*)(Rectangle<int>, const Displays::Display*) const> (&Displays::physicalToLogical))
1✔
480
        .def ("physicalToLogical", static_cast<Rectangle<float> (Displays::*)(Rectangle<float>, const Displays::Display*) const> (&Displays::physicalToLogical))
1✔
481
        .def ("physicalToLogical", py::overload_cast<Point<int>, const Displays::Display*> (&Displays::template physicalToLogical<int>, py::const_))
1✔
482
        .def ("physicalToLogical", py::overload_cast<Point<float>, const Displays::Display*> (&Displays::template physicalToLogical<float>, py::const_))
1✔
483
        .def ("logicalToPhysical", static_cast<Rectangle<int> (Displays::*)(Rectangle<int>, const Displays::Display*) const> (&Displays::logicalToPhysical))
1✔
484
        .def ("logicalToPhysical", static_cast<Rectangle<float> (Displays::*)(Rectangle<float>, const Displays::Display*) const> (&Displays::logicalToPhysical))
1✔
485
        .def ("logicalToPhysical", py::overload_cast<Point<int>, const Displays::Display*> (&Displays::template logicalToPhysical<int>, py::const_))
1✔
486
        .def ("logicalToPhysical", py::overload_cast<Point<float>, const Displays::Display*> (&Displays::template logicalToPhysical<float>, py::const_))
1✔
487
        .def ("getDisplayForRect", &Displays::getDisplayForRect, py::return_value_policy::reference)
1✔
488
        .def ("getDisplayForPoint", &Displays::getDisplayForPoint, py::return_value_policy::reference)
1✔
489
        .def ("getPrimaryDisplay", &Displays::getPrimaryDisplay, py::return_value_policy::reference)
1✔
490
        .def ("getRectangleList", &Displays::getRectangleList)
1✔
491
        .def ("getTotalBounds", &Displays::getTotalBounds)
1✔
492
        .def ("refresh", &Displays::refresh)
1✔
493
    ;
494

495
    py::class_<Displays::Display> classDisplay (classDisplays, "Display");
2✔
496

497
    classDisplay
498
        .def_readwrite ("isMain", &Displays::Display::isMain)
1✔
499
        .def_readwrite ("totalArea", &Displays::Display::totalArea)
1✔
500
        .def_readwrite ("userArea", &Displays::Display::userArea)
1✔
501
        .def_readwrite ("safeAreaInsets", &Displays::Display::safeAreaInsets)
1✔
502
        .def_readwrite ("keyboardInsets", &Displays::Display::keyboardInsets)
1✔
503
        .def_readwrite ("topLeftPhysical", &Displays::Display::topLeftPhysical)
1✔
504
        .def_readwrite ("scale", &Displays::Display::scale)
1✔
505
        .def_readwrite ("dpi", &Displays::Display::dpi)
1✔
506
        .def_readwrite ("verticalFrequencyHz", &Displays::Display::verticalFrequencyHz)
1✔
507
    ;
508

509
    // ============================================================================================ juce::LookAndFeel
510

511
    py::class_<LookAndFeel, PyLookAndFeel<>> classLookAndFeel (m, "LookAndFeel");
2✔
512

513
    classLookAndFeel
514
    //.def (py::init<>())
515
        .def_static ("getDefaultLookAndFeel", &LookAndFeel::getDefaultLookAndFeel, py::return_value_policy::reference)
1✔
516
        .def_static ("setDefaultLookAndFeel", &LookAndFeel::setDefaultLookAndFeel)
1✔
517
        .def ("findColour", &LookAndFeel::findColour)
1✔
518
        .def ("setColour", &LookAndFeel::setColour)
1✔
519
        .def ("isColourSpecified", &LookAndFeel::isColourSpecified)
1✔
520
    //.def ("getTypefaceForFont", &LookAndFeel::getTypefaceForFont)
521
    //.def ("setDefaultSansSerifTypeface", &LookAndFeel::setDefaultSansSerifTypeface)
522
        .def ("setDefaultSansSerifTypefaceName", &LookAndFeel::setDefaultSansSerifTypefaceName)
1✔
523
        .def ("setUsingNativeAlertWindows", &LookAndFeel::setUsingNativeAlertWindows)
1✔
524
        .def ("isUsingNativeAlertWindows", &LookAndFeel::isUsingNativeAlertWindows)
1✔
525
        .def ("drawSpinningWaitAnimation", &LookAndFeel::drawSpinningWaitAnimation)
1✔
526
        .def ("getTickShape", &LookAndFeel::getTickShape)
1✔
527
        .def ("getCrossShape", &LookAndFeel::getCrossShape)
1✔
528
    //.def ("createDropShadowerForComponent", &LookAndFeel::createDropShadowerForComponent)
529
    //.def ("createFocusOutlineForComponent", &LookAndFeel::createFocusOutlineForComponent)
530
        .def ("getMouseCursorFor", &LookAndFeel::getMouseCursorFor)
1✔
531
    //.def ("createGraphicsContext", &LookAndFeel::createGraphicsContext)
532
        .def ("playAlertSound", &LookAndFeel::playAlertSound)
1✔
533
    ;
534

535
    py::class_<LookAndFeel_V2, LookAndFeel, PyLookAndFeel_V2<>> classLookAndFeel_V2 (m, "LookAndFeel_V2");
2✔
536
    py::class_<LookAndFeel_V1, LookAndFeel_V2> classLookAndFeel_V1  (m, "LookAndFeel_V1");
2✔
537
    py::class_<LookAndFeel_V3, LookAndFeel_V2> classLookAndFeel_V3 (m, "LookAndFeel_V3");
2✔
538
    py::class_<LookAndFeel_V4, LookAndFeel_V3> classLookAndFeel_V4 (m, "LookAndFeel_V4");
2✔
539

540
    py::class_<LookAndFeel_V4::ColourScheme> classLookAndFeel_V4ColourScheme (classLookAndFeel_V4, "ColourScheme");
2✔
541

542
    classLookAndFeel_V4ColourScheme
543
        .def (py::init ([](py::args coloursToUse)
×
544
        {
545
            if (coloursToUse.size() != static_cast<size_t> (LookAndFeel_V4::ColourScheme::numColours))
×
546
                py::pybind11_fail ("Must supply one colour for each UIColour item");
×
547

548
            std::tuple<Colour, Colour, Colour, Colour, Colour, Colour, Colour, Colour, Colour> colours;
×
549

550
            std::get<0> (colours) = coloursToUse[0].cast<Colour>();
×
551
            std::get<1> (colours) = coloursToUse[1].cast<Colour>();
×
552
            std::get<2> (colours) = coloursToUse[2].cast<Colour>();
×
553
            std::get<3> (colours) = coloursToUse[3].cast<Colour>();
×
554
            std::get<4> (colours) = coloursToUse[4].cast<Colour>();
×
555
            std::get<5> (colours) = coloursToUse[5].cast<Colour>();
×
556
            std::get<6> (colours) = coloursToUse[6].cast<Colour>();
×
557
            std::get<7> (colours) = coloursToUse[7].cast<Colour>();
×
558
            std::get<8> (colours) = coloursToUse[8].cast<Colour>();
×
559

560
            return std::apply ([](auto... c) { return LookAndFeel_V4::ColourScheme (c...); }, colours);
×
561
        }))
1✔
562
        .def (py::init<const LookAndFeel_V4::ColourScheme&>())
1✔
563
        .def ("getUIColour", &LookAndFeel_V4::ColourScheme::getUIColour)
1✔
564
        .def ("setUIColour", &LookAndFeel_V4::ColourScheme::setUIColour)
1✔
565
        .def (py::self == py::self)
1✔
566
        .def (py::self != py::self)
1✔
567
    ;
568

569
    classLookAndFeel_V4ColourScheme.attr ("windowBackground") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::windowBackground));
1✔
570
    classLookAndFeel_V4ColourScheme.attr ("widgetBackground") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::widgetBackground));
1✔
571
    classLookAndFeel_V4ColourScheme.attr ("menuBackground") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::menuBackground));
1✔
572
    classLookAndFeel_V4ColourScheme.attr ("outline") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::outline));
1✔
573
    classLookAndFeel_V4ColourScheme.attr ("defaultText") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::defaultText));
1✔
574
    classLookAndFeel_V4ColourScheme.attr ("defaultFill") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::defaultFill));
1✔
575
    classLookAndFeel_V4ColourScheme.attr ("highlightedText") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::highlightedText));
1✔
576
    classLookAndFeel_V4ColourScheme.attr ("highlightedFill") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::highlightedFill));
1✔
577
    classLookAndFeel_V4ColourScheme.attr ("menuText") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::menuText));
1✔
578
    classLookAndFeel_V4ColourScheme.attr ("numColours") = py::int_ (static_cast<int> (LookAndFeel_V4::ColourScheme::numColours));
1✔
579

580
    classLookAndFeel_V4
581
        .def (py::init<>())
1✔
582
        .def (py::init<LookAndFeel_V4::ColourScheme>())
1✔
583
        .def ("setColourScheme", &LookAndFeel_V4::setColourScheme)
1✔
584
        .def ("getCurrentColourScheme", &LookAndFeel_V4::getCurrentColourScheme, py::return_value_policy::reference)
1✔
585
        .def_static ("getDarkColourScheme", &LookAndFeel_V4::getDarkColourScheme)
1✔
586
        .def_static ("getMidnightColourScheme", &LookAndFeel_V4::getMidnightColourScheme)
1✔
587
        .def_static ("getGreyColourScheme", &LookAndFeel_V4::getGreyColourScheme)
1✔
588
        .def_static ("getLightColourScheme", &LookAndFeel_V4::getLightColourScheme)
1✔
589
    ;
590

591
    // ============================================================================================ juce::Desktop
592

593
    py::class_<Desktop, std::unique_ptr<Desktop, py::nodelete>> classDesktop (m, "Desktop");
2✔
594

595
    Helpers::makeArithmeticEnum<Desktop::DisplayOrientation> (classDesktop, "DisplayOrientation")
2✔
596
        .value ("upright", Desktop::upright)
1✔
597
        .value ("upsideDown", Desktop::upsideDown)
1✔
598
        .value ("rotatedClockwise", Desktop::rotatedClockwise)
1✔
599
        .value ("rotatedAntiClockwise", Desktop::rotatedAntiClockwise)
1✔
600
        .value ("allOrientations", Desktop::allOrientations)
1✔
601
        .export_values();
1✔
602

603
    classDesktop
604
        .def_static ("getInstance", &Desktop::getInstance, py::return_value_policy::reference)
1✔
605
        .def_static ("getMousePosition", &Desktop::getMousePosition)
1✔
606
        .def_static ("setMousePosition", &Desktop::setMousePosition)
1✔
607
        .def_static ("getLastMouseDownPosition", &Desktop::getLastMouseDownPosition)
1✔
608
        .def ("getMouseButtonClickCounter", &Desktop::getMouseButtonClickCounter)
1✔
609
        .def ("getMouseWheelMoveCounter", &Desktop::getMouseWheelMoveCounter)
1✔
610
        .def_static ("setScreenSaverEnabled", &Desktop::setScreenSaverEnabled)
1✔
611
        .def_static ("isScreenSaverEnabled", &Desktop::isScreenSaverEnabled)
1✔
612
        .def ("addGlobalMouseListener", &Desktop::addGlobalMouseListener)
1✔
613
        .def ("removeGlobalMouseListener", &Desktop::removeGlobalMouseListener)
1✔
614
    //.def ("addFocusChangeListener", &Desktop::addFocusChangeListener)
615
    //.def ("removeFocusChangeListener", &Desktop::removeFocusChangeListener)
616
    //.def ("addDarkModeSettingListener", &Desktop::addDarkModeSettingListener)
617
    //.def ("removeDarkModeSettingListener", &Desktop::removeDarkModeSettingListener)
618
        .def ("isDarkModeActive", &Desktop::isDarkModeActive)
1✔
619
        .def ("setKioskModeComponent", &Desktop::setKioskModeComponent)
1✔
620
        .def ("getKioskModeComponent", &Desktop::getKioskModeComponent)
1✔
621
        .def ("getNumComponents", &Desktop::getNumComponents)
1✔
622
        .def ("getComponent", &Desktop::getComponent, py::return_value_policy::reference)
1✔
623
        .def ("findComponentAt", &Desktop::findComponentAt, py::return_value_policy::reference)
1✔
624
        .def ("getAnimator", &Desktop::getAnimator, py::return_value_policy::reference)
1✔
625
        .def ("getDefaultLookAndFeel", &Desktop::getDefaultLookAndFeel, py::return_value_policy::reference)
1✔
626
        .def ("setDefaultLookAndFeel", &Desktop::setDefaultLookAndFeel)
1✔
627
        .def ("getMouseSources", [](const Desktop& self)
×
628
        {
629
            py::list result;
×
630
            for (auto& source : self.getMouseSources())
×
631
                result.append (source);
×
632
            return result;
×
633
        })
1✔
634
        .def ("getNumMouseSources", &Desktop::getNumMouseSources)
1✔
635
        .def ("getMouseSource", &Desktop::getMouseSource, py::return_value_policy::reference)
1✔
636
        .def ("getMainMouseSource", &Desktop::getMainMouseSource)
1✔
637
        .def ("getNumDraggingMouseSources", &Desktop::getNumDraggingMouseSources)
1✔
638
        .def ("getDraggingMouseSource", &Desktop::getDraggingMouseSource, py::return_value_policy::reference)
1✔
639
        .def ("beginDragAutoRepeat", &Desktop::beginDragAutoRepeat)
1✔
640
        .def ("getCurrentOrientation", &Desktop::getCurrentOrientation)
1✔
641
        .def ("setOrientationsEnabled", &Desktop::setOrientationsEnabled)
1✔
642
        .def ("getOrientationsEnabled", &Desktop::getOrientationsEnabled)
1✔
643
        .def ("isOrientationEnabled", &Desktop::isOrientationEnabled)
1✔
644
        .def ("getDisplays", &Desktop::getDisplays)
1✔
645
        .def ("setGlobalScaleFactor", &Desktop::setGlobalScaleFactor)
1✔
646
        .def ("getGlobalScaleFactor", &Desktop::getGlobalScaleFactor)
1✔
647
        .def_static ("canUseSemiTransparentWindows", &Desktop::canUseSemiTransparentWindows)
1✔
648
        .def ("isHeadless", &Desktop::isHeadless)
1✔
649
    ;
650

651
    // ============================================================================================ juce::Desktop
652

653
    py::class_<ComponentAnimator, ChangeBroadcaster> classComponentAnimator (m, "ComponentAnimator");
2✔
654

655
    classComponentAnimator
656
        .def (py::init<>())
1✔
657
        .def ("animateComponent", &ComponentAnimator::animateComponent)
1✔
658
        .def ("fadeOut", &ComponentAnimator::fadeOut)
1✔
659
        .def ("fadeIn", &ComponentAnimator::fadeIn)
1✔
660
        .def ("cancelAnimation", &ComponentAnimator::cancelAnimation)
1✔
661
        .def ("cancelAllAnimations", &ComponentAnimator::cancelAllAnimations)
1✔
662
        .def ("getComponentDestination", &ComponentAnimator::getComponentDestination)
1✔
663
        .def ("isAnimating", py::overload_cast<Component*> (&ComponentAnimator::isAnimating, py::const_))
1✔
664
        .def ("isAnimating", py::overload_cast<> (&ComponentAnimator::isAnimating, py::const_))
1✔
665
    ;
666

667
    // ============================================================================================ juce::ComponentTraverser
668

669
    py::class_<ComponentTraverser, PyComponentTraverser<>> classComponentTraverser (m, "ComponentTraverser");
2✔
670

671
    classComponentTraverser
672
        .def (py::init<>())
1✔
673
        .def ("getDefaultComponent", &ComponentTraverser::getDefaultComponent, py::return_value_policy::reference)
1✔
674
        .def ("getNextComponent", &ComponentTraverser::getNextComponent, py::return_value_policy::reference)
1✔
675
        .def ("getPreviousComponent", &ComponentTraverser::getPreviousComponent, py::return_value_policy::reference)
1✔
676
        .def ("getDefaultComponent", [](ComponentTraverser& self, Component* parentComponent)
×
677
        {
678
            py::list allComponents;
×
679

680
            for (auto component : self.getAllComponents (parentComponent))
×
681
                allComponents.append (py::cast (component, py::return_value_policy::reference));
×
682

683
            return allComponents;
×
684
        })
1✔
685
    ;
686

687
    py::class_<FocusTraverser, ComponentTraverser, PyFocusTraverser<FocusTraverser>> (m, "FocusTraverser");
1✔
688
    py::class_<KeyboardFocusTraverser, ComponentTraverser, PyFocusTraverser<KeyboardFocusTraverser>> (m, "KeyboardFocusTraverser");
1✔
689

690
    // ============================================================================================ juce::ModalComponentManager
691

692
    py::class_<ModalComponentManager, std::unique_ptr<ModalComponentManager, py::nodelete>> classModalComponentManager (m, "ModalComponentManager");
2✔
693

694
    py::class_<ModalComponentManager::Callback, PyModalComponentManagerCallback> classModalComponentManagerCallback (classModalComponentManager, "Callback");
2✔
695

696
    classModalComponentManagerCallback
697
        .def (py::init<>())
1✔
698
        .def ("modalStateFinished", &ModalComponentManager::Callback::modalStateFinished)
1✔
699
    ;
700

701
    classModalComponentManager
702
        .def_static ("getInstance", &ModalComponentManager::getInstance, py::return_value_policy::reference)
1✔
703
        .def_static ("getInstanceWithoutCreating", &ModalComponentManager::getInstanceWithoutCreating, py::return_value_policy::reference)
1✔
704
        .def_static ("deleteInstance", &ModalComponentManager::deleteInstance)
1✔
705
        .def ("getNumModalComponents", &ModalComponentManager::getNumModalComponents)
1✔
706
        .def ("getModalComponent", &ModalComponentManager::getModalComponent, py::return_value_policy::reference)
1✔
707
        .def ("getNumModalComponents", &ModalComponentManager::getNumModalComponents)
1✔
708
        .def ("isModal", &ModalComponentManager::isModal)
1✔
709
        .def ("isFrontModalComponent", &ModalComponentManager::isFrontModalComponent)
1✔
710
        .def ("attachCallback", [](ModalComponentManager& self, Component* component, py::function callback)
×
711
        {
712
            self.attachCallback (component, new PyModalComponentManagerCallbackCallable (std::move (callback)));
×
713
        })
1✔
714
        .def ("bringModalComponentsToFront", &ModalComponentManager::bringModalComponentsToFront, "topOneShouldGrabFocus"_a = true)
1✔
715
        .def ("cancelAllModalComponents", &ModalComponentManager::cancelAllModalComponents)
1✔
716
#if JUCE_MODAL_LOOPS_PERMITTED
717
        .def ("runEventLoopForCurrentComponent", &ModalComponentManager::runEventLoopForCurrentComponent, py::call_guard<py::gil_scoped_release>())
1✔
718
#endif
719
    ;
720

721
    // ============================================================================================ juce::ComponentListener
722

723
    py::class_<ComponentListener, PyComponentListener> classComponentListener (m, "ComponentListener");
2✔
724

725
    classComponentListener
726
        .def (py::init<>())
1✔
727
        .def ("componentMovedOrResized", &ComponentListener::componentMovedOrResized)
1✔
728
        .def ("componentBroughtToFront", &ComponentListener::componentBroughtToFront)
1✔
729
        .def ("componentVisibilityChanged", &ComponentListener::componentVisibilityChanged)
1✔
730
        .def ("componentChildrenChanged", &ComponentListener::componentChildrenChanged)
1✔
731
        .def ("componentParentHierarchyChanged", &ComponentListener::componentParentHierarchyChanged)
1✔
732
        .def ("componentNameChanged", &ComponentListener::componentNameChanged)
1✔
733
        .def ("componentBeingDeleted", &ComponentListener::componentBeingDeleted)
1✔
734
        .def ("componentEnablementChanged", &ComponentListener::componentEnablementChanged)
1✔
735
    ;
736

737
    // ============================================================================================ juce::ComponentPeer
738

739
    py::class_<ComponentPeer> classComponentPeer (m, "ComponentPeer");
2✔
740

741
    Helpers::makeArithmeticEnum<ComponentPeer::StyleFlags> (classComponentPeer, "StyleFlags")
2✔
742
        .value ("windowAppearsOnTaskbar", ComponentPeer::StyleFlags::windowAppearsOnTaskbar)
1✔
743
        .value ("windowIsTemporary", ComponentPeer::StyleFlags::windowIsTemporary)
1✔
744
        .value ("windowIgnoresMouseClicks", ComponentPeer::StyleFlags::windowIgnoresMouseClicks)
1✔
745
        .value ("windowHasTitleBar", ComponentPeer::StyleFlags::windowHasTitleBar)
1✔
746
        .value ("windowIsResizable", ComponentPeer::StyleFlags::windowIsResizable)
1✔
747
        .value ("windowHasMinimiseButton", ComponentPeer::StyleFlags::windowHasMinimiseButton)
1✔
748
        .value ("windowHasMaximiseButton", ComponentPeer::StyleFlags::windowHasMaximiseButton)
1✔
749
        .value ("windowHasCloseButton", ComponentPeer::StyleFlags::windowHasCloseButton)
1✔
750
        .value ("windowHasDropShadow", ComponentPeer::StyleFlags::windowHasDropShadow)
1✔
751
        .value ("windowIgnoresKeyPresses", ComponentPeer::StyleFlags::windowIgnoresKeyPresses)
1✔
752
        .value ("windowRequiresSynchronousCoreGraphicsRendering", ComponentPeer::StyleFlags::windowRequiresSynchronousCoreGraphicsRendering)
1✔
753
        .value ("windowIsSemiTransparent", ComponentPeer::StyleFlags::windowIsSemiTransparent)
1✔
754
        .export_values();
1✔
755

756
    classComponentPeer
757
        .def ("getComponent", &ComponentPeer::getComponent, py::return_value_policy::reference)
1✔
758
        .def ("getStyleFlags", &ComponentPeer::getStyleFlags)
1✔
759
        .def ("getUniqueID", &ComponentPeer::getUniqueID)
1✔
760
        .def ("getNativeHandle", [](const ComponentPeer& self) { return reinterpret_cast<std::intptr_t> (self.getNativeHandle()); })
1✔
761
        .def ("setVisible", &ComponentPeer::setVisible)
1✔
762
        .def ("setTitle", &ComponentPeer::setTitle)
1✔
763
        .def ("setDocumentEditedStatus", &ComponentPeer::setDocumentEditedStatus)
1✔
764
        .def ("setRepresentedFile", &ComponentPeer::setRepresentedFile)
1✔
765
        .def ("setBounds", &ComponentPeer::setBounds)
1✔
766
        .def ("updateBounds", &ComponentPeer::updateBounds)
1✔
767
        .def ("getBounds", &ComponentPeer::getBounds)
1✔
768
        .def ("localToGlobal", py::overload_cast<Point<float>> (&ComponentPeer::localToGlobal))
1✔
769
        .def ("globalToLocal", py::overload_cast<Point<float>> (&ComponentPeer::globalToLocal))
1✔
770
        .def ("localToGlobal", py::overload_cast<Point<int>> (&ComponentPeer::localToGlobal))
1✔
771
        .def ("globalToLocal", py::overload_cast<Point<int>> (&ComponentPeer::globalToLocal))
1✔
772
        .def ("localToGlobal", py::overload_cast<const Rectangle<int>&> (&ComponentPeer::localToGlobal))
1✔
773
        .def ("globalToLocal", py::overload_cast<const Rectangle<int>&> (&ComponentPeer::globalToLocal))
1✔
774
        .def ("localToGlobal", py::overload_cast<const Rectangle<float>&> (&ComponentPeer::localToGlobal))
1✔
775
        .def ("globalToLocal", py::overload_cast<const Rectangle<float>&> (&ComponentPeer::globalToLocal))
1✔
776
        .def ("getAreaCoveredBy", &ComponentPeer::getAreaCoveredBy)
1✔
777
        .def ("setMinimised", &ComponentPeer::setMinimised)
1✔
778
        .def ("isMinimised", &ComponentPeer::isMinimised)
1✔
779
        .def ("setFullScreen", &ComponentPeer::setFullScreen)
1✔
780
        .def ("isFullScreen", &ComponentPeer::isFullScreen)
1✔
781
        .def ("isKioskMode", &ComponentPeer::isKioskMode)
1✔
782
        .def ("setNonFullScreenBounds", &ComponentPeer::setNonFullScreenBounds)
1✔
783
        .def ("getNonFullScreenBounds", &ComponentPeer::getNonFullScreenBounds)
1✔
784
        .def ("setIcon", &ComponentPeer::setIcon)
1✔
785
    //.def ("setConstrainer", &ComponentPeer::setConstrainer)
786
    //.def ("startHostManagedResize", &ComponentPeer::startHostManagedResize)
787
    //.def ("getConstrainer", &ComponentPeer::getConstrainer)
788
        .def ("contains", &ComponentPeer::contains)
1✔
789
        .def ("getFrameSizeIfPresent", &ComponentPeer::getFrameSizeIfPresent)
1✔
790
        .def ("setAlwaysOnTop", &ComponentPeer::setAlwaysOnTop)
1✔
791
        .def ("toFront", &ComponentPeer::toFront)
1✔
792
        .def ("toBehind", &ComponentPeer::toBehind)
1✔
793
        .def ("handleBroughtToFront", &ComponentPeer::handleBroughtToFront)
1✔
794
        .def ("isFocused", &ComponentPeer::isFocused)
1✔
795
        .def ("grabFocus", &ComponentPeer::grabFocus)
1✔
796
        .def ("getLastFocusedSubcomponent", &ComponentPeer::getLastFocusedSubcomponent, py::return_value_policy::reference)
1✔
797
        .def ("closeInputMethodContext", &ComponentPeer::closeInputMethodContext)
1✔
798
        .def ("refreshTextInputTarget", &ComponentPeer::refreshTextInputTarget)
1✔
799
    //.def ("findCurrentTextInputTarget", &ComponentPeer::findCurrentTextInputTarget)
800
        .def ("repaint", &ComponentPeer::repaint)
1✔
801
        .def ("performAnyPendingRepaintsNow", &ComponentPeer::performAnyPendingRepaintsNow)
1✔
802
        .def ("setAlpha", &ComponentPeer::setAlpha)
1✔
803
        .def_static ("getNumPeers", &ComponentPeer::getNumPeers)
1✔
804
        .def_static ("getPeer", &ComponentPeer::getPeer, py::return_value_policy::reference)
1✔
805
        .def_static ("getPeerFor", &ComponentPeer::getPeerFor, py::return_value_policy::reference)
1✔
806
        .def_static ("isValidPeer", &ComponentPeer::isValidPeer)
1✔
807
        .def ("getAvailableRenderingEngines", &ComponentPeer::getAvailableRenderingEngines)
1✔
808
        .def ("getCurrentRenderingEngine", &ComponentPeer::getCurrentRenderingEngine)
1✔
809
        .def ("setCurrentRenderingEngine", &ComponentPeer::setCurrentRenderingEngine)
1✔
810
        .def_static ("getCurrentModifiersRealtime", &ComponentPeer::getCurrentModifiersRealtime)
1✔
811
    //.def ("addScaleFactorListener", &ComponentPeer::addScaleFactorListener)
812
    //.def ("removeScaleFactorListener", &ComponentPeer::removeScaleFactorListener)
813
    //.def ("addVBlankListener", &ComponentPeer::addVBlankListener)
814
    //.def ("removeVBlankListener", &ComponentPeer::removeVBlankListener)
815
        .def ("getPlatformScaleFactor", &ComponentPeer::getPlatformScaleFactor)
1✔
816
        .def ("setHasChangedSinceSaved", &ComponentPeer::setHasChangedSinceSaved)
1✔
817
    //.def ("setAppStyle", &ComponentPeer::setAppStyle)
818
    //.def ("getAppStyle", &ComponentPeer::getAppStyle)
819
    ;
820

821
    // ============================================================================================ juce::Component
822

823
    py::class_<Component, PyComponent<>> classComponent (m, "Component");
2✔
824

825
    py::enum_<Component::FocusChangeType> (classComponent, "FocusChangeType")
2✔
826
        .value ("focusChangedByMouseClick", Component::FocusChangeType::focusChangedByMouseClick)
1✔
827
        .value ("focusChangedByTabKey", Component::FocusChangeType::focusChangedByTabKey)
1✔
828
        .value ("focusChangedDirectly", Component::FocusChangeType::focusChangedDirectly)
1✔
829
        .export_values();
1✔
830

831
    py::enum_<Component::FocusContainerType> (classComponent, "FocusContainerType")
2✔
832
        .value ("none", Component::FocusContainerType::none)
1✔
833
        .value ("focusContainer", Component::FocusContainerType::focusContainer)
1✔
834
        .value ("keyboardFocusContainer", Component::FocusContainerType::keyboardFocusContainer);
1✔
835

836
    py::enum_<Component::FocusChangeDirection> (classComponent, "FocusChangeDirection")
2✔
837
        .value ("unknown", Component::FocusChangeDirection::unknown)
1✔
838
        .value ("forward", Component::FocusChangeDirection::forward)
1✔
839
        .value ("backward", Component::FocusChangeDirection::backward);
1✔
840

841
    classComponent
842
        .def (py::init_alias<>())
1✔
843
        .def (py::init_alias<const String&>())
1✔
844
        .def ("setName", &Component::setName)
1✔
845
        .def ("getName", &Component::getName)
1✔
846
        .def ("getComponentID", &Component::getComponentID)
1✔
847
        .def ("setVisible", &Component::setVisible)
1✔
848
        .def ("isVisible", &Component::isVisible)
1✔
849
        .def ("visibilityChanged", &Component::visibilityChanged)
1✔
850
        .def ("isShowing", &Component::isShowing)
1✔
NEW
851
        .def ("addToDesktop", [](Component& self, ComponentPeer::StyleFlags windowStyleFlags, std::optional<std::intptr_t> nativeWindowToAttachTo)
×
852
        {
NEW
853
            self.addToDesktop (static_cast<int> (windowStyleFlags), nativeWindowToAttachTo ? reinterpret_cast<void*>(*nativeWindowToAttachTo) : nullptr);
×
854
        }, "windowStyleFlags"_a, "nativeWindowToAttachTo"_a = std::optional<std::intptr_t>())
1✔
NEW
855
        .def ("addToDesktop", [](Component& self, int windowStyleFlags, std::optional<std::intptr_t> nativeWindowToAttachTo)
×
856
        {
NEW
857
            self.addToDesktop (windowStyleFlags, nativeWindowToAttachTo ? reinterpret_cast<void*>(*nativeWindowToAttachTo) : nullptr);
×
858
        }, "windowStyleFlags"_a, "nativeWindowToAttachTo"_a = std::optional<std::intptr_t>())
2✔
859
        .def ("removeFromDesktop", &Component::removeFromDesktop)
1✔
860
        .def ("isOnDesktop", &Component::isOnDesktop)
1✔
861
        .def ("getDesktopScaleFactor", &Component::getDesktopScaleFactor)
1✔
862
        .def ("getPeer", &Component::getPeer, py::return_value_policy::reference)
1✔
863
        .def ("userTriedToCloseWindow", &Component::userTriedToCloseWindow)
1✔
864
        .def ("minimisationStateChanged", &Component::minimisationStateChanged)
1✔
865
        .def ("getDesktopScaleFactor", &Component::getDesktopScaleFactor)
1✔
866
        .def ("toFront", &Component::toFront)
1✔
867
        .def ("toBack", &Component::toBack)
1✔
868
        .def ("toBehind", &Component::toBehind)
1✔
869
        .def ("setAlwaysOnTop", &Component::setAlwaysOnTop)
1✔
870
        .def ("isAlwaysOnTop", &Component::isAlwaysOnTop)
1✔
871
        .def ("getX", &Component::getX)
1✔
872
        .def ("getY", &Component::getY)
1✔
873
        .def ("getWidth", &Component::getWidth)
1✔
874
        .def ("getHeight", &Component::getHeight)
1✔
875
        .def ("getRight", &Component::getRight)
1✔
876
        .def ("getBottom", &Component::getBottom)
1✔
877
        .def ("getPosition", &Component::getPosition)
1✔
878
        .def ("getBounds", &Component::getBounds)
1✔
879
        .def ("getLocalBounds", &Component::getLocalBounds)
1✔
880
        .def ("getBoundsInParent", &Component::getBoundsInParent)
1✔
881
        .def ("getScreenX", &Component::getScreenX)
1✔
882
        .def ("getScreenY", &Component::getScreenY)
1✔
883
        .def ("getScreenPosition", &Component::getScreenPosition)
1✔
884
        .def ("getScreenBounds", &Component::getScreenBounds)
1✔
885
        .def ("setTopLeftPosition", py::overload_cast<int, int> (&Component::setTopLeftPosition))
1✔
886
        .def ("setTopLeftPosition", py::overload_cast<Point<int>> (&Component::setTopLeftPosition))
1✔
887
        .def ("setTopRightPosition", &Component::setTopRightPosition)
1✔
888
        .def ("setSize", &Component::setSize)
1✔
889
        .def ("setBounds", py::overload_cast<int, int, int, int> (&Component::setBounds))
1✔
890
        .def ("setBounds", py::overload_cast<Rectangle<int>> (&Component::setBounds))
1✔
891
        .def ("setBoundsRelative", py::overload_cast<float, float, float, float> (&Component::setBoundsRelative))
1✔
892
        .def ("setBoundsRelative", py::overload_cast<Rectangle<float>> (&Component::setBoundsRelative))
1✔
893
        .def ("setBoundsInset", &Component::setBoundsInset)
1✔
894
        .def ("setBoundsToFit", &Component::setBoundsToFit)
1✔
895
        .def ("setCentrePosition", py::overload_cast<int, int> (&Component::setCentrePosition))
1✔
896
        .def ("setCentrePosition", py::overload_cast<Point<int>> (&Component::setCentrePosition))
1✔
897
        .def ("setCentreRelative", &Component::setCentreRelative)
1✔
898
        .def ("centreWithSize", &Component::centreWithSize)
1✔
899
        .def ("setTransform", &Component::setTransform)
1✔
900
        .def ("getTransform", &Component::getTransform)
1✔
901
        .def ("isTransformed", &Component::isTransformed)
1✔
902
        .def_static ("getApproximateScaleFactorForComponent", &Component::getApproximateScaleFactorForComponent)
1✔
903
        .def ("proportionOfWidth", &Component::proportionOfWidth)
1✔
904
        .def ("proportionOfHeight", &Component::proportionOfHeight)
1✔
905
        .def ("getParentWidth", &Component::getParentWidth)
1✔
906
        .def ("getParentHeight", &Component::getParentHeight)
1✔
907
        .def ("getParentMonitorArea", &Component::getParentMonitorArea)
1✔
908
        .def ("getNumChildComponents", &Component::getNumChildComponents)
1✔
909
        .def ("getChildComponent", &Component::getChildComponent, py::return_value_policy::reference)
1✔
910
        .def ("getIndexOfChildComponent", &Component::getIndexOfChildComponent)
1✔
911
        .def ("findChildWithID", &Component::findChildWithID, py::return_value_policy::reference)
1✔
912
        .def ("addChildComponent", [](Component* self, Component* toAdd) { self->addChildComponent (toAdd); })
1✔
913
        .def ("addChildComponent", py::overload_cast<Component*, int> (&Component::addChildComponent))
1✔
914
        .def ("addAndMakeVisible", [](Component* self, Component* toAdd) { self->addAndMakeVisible (toAdd); })
1✔
915
        .def ("addAndMakeVisible", py::overload_cast<Component*, int> (&Component::addAndMakeVisible))
1✔
916
        .def ("addChildAndSetID", &Component::addChildAndSetID)
1✔
917
        .def ("removeChildComponent", py::overload_cast<Component*> (&Component::removeChildComponent))
1✔
918
        .def ("removeChildComponent", py::overload_cast<int> (&Component::removeChildComponent), py::return_value_policy::reference)
1✔
919
        .def ("removeAllChildren", &Component::removeAllChildren)
1✔
920
        .def ("deleteAllChildren", &Component::deleteAllChildren)
1✔
921
        .def ("getParentComponent", &Component::getParentComponent, py::return_value_policy::reference)
1✔
922
        .def ("getTopLevelComponent", &Component::getTopLevelComponent, py::return_value_policy::reference)
1✔
923
        .def ("isParentOf", &Component::isParentOf)
1✔
924
        .def ("parentHierarchyChanged", &Component::parentHierarchyChanged)
1✔
925
        .def ("childrenChanged", &Component::childrenChanged)
1✔
926
        .def ("hitTest", &Component::hitTest)
1✔
927
        .def ("setInterceptsMouseClicks", &Component::setInterceptsMouseClicks)
1✔
928
        .def ("getInterceptsMouseClicks", [](const Component& self) { bool a, b; self.getInterceptsMouseClicks (a, b); return py::make_tuple(a, b); })
1✔
929
        .def ("contains", py::overload_cast<Point<float>> (&Component::contains))
1✔
930
        .def ("reallyContains", py::overload_cast<Point<float>, bool> (&Component::reallyContains))
1✔
931
        .def ("getComponentAt", py::overload_cast<int, int> (&Component::getComponentAt), py::return_value_policy::reference)
1✔
932
        .def ("getComponentAt", py::overload_cast<Point<int>> (&Component::getComponentAt), py::return_value_policy::reference)
1✔
933
        .def ("getComponentAt", py::overload_cast<Point<float>> (&Component::getComponentAt), py::return_value_policy::reference)
1✔
934
        .def ("repaint", py::overload_cast<> (&Component::repaint))
1✔
935
        .def ("repaint", py::overload_cast<int, int, int, int> (&Component::repaint))
1✔
936
        .def ("repaint", py::overload_cast<Rectangle<int>> (&Component::repaint))
1✔
937
        .def ("setBufferedToImage", &Component::setBufferedToImage)
1✔
938
        .def ("createComponentSnapshot", &Component::createComponentSnapshot, "areaToGrab"_a, "clipImageToComponentBounds"_a = true, "scaleFactor"_a = 1.0f)
2✔
939
        .def ("paintEntireComponent", &Component::paintEntireComponent)
1✔
940
        .def ("setPaintingIsUnclipped", &Component::setPaintingIsUnclipped)
1✔
941
        .def ("isPaintingUnclipped", &Component::isPaintingUnclipped)
1✔
942
    //.def ("setComponentEffect", &Component::setComponentEffect)
943
    //.def ("getComponentEffect", &Component::getComponentEffect)
944
        .def ("getLookAndFeel", &Component::getLookAndFeel, py::return_value_policy::reference)
1✔
945
        .def ("setLookAndFeel", &Component::setLookAndFeel)
1✔
946
        .def ("lookAndFeelChanged", &Component::lookAndFeelChanged)
1✔
947
        .def ("sendLookAndFeelChange", &Component::sendLookAndFeelChange)
1✔
948
        .def ("setOpaque", &Component::setOpaque)
1✔
949
        .def ("isOpaque", &Component::isOpaque)
1✔
950
        .def ("setBroughtToFrontOnMouseClick", &Component::setBroughtToFrontOnMouseClick)
1✔
951
        .def ("isBroughtToFrontOnMouseClick", &Component::isBroughtToFrontOnMouseClick)
1✔
952
        .def ("setExplicitFocusOrder", &Component::setExplicitFocusOrder)
1✔
953
        .def ("getExplicitFocusOrder", &Component::getExplicitFocusOrder)
1✔
954
        .def ("setFocusContainerType", &Component::setFocusContainerType)
1✔
955
        .def ("isFocusContainer", &Component::isFocusContainer)
1✔
956
        .def ("isKeyboardFocusContainer", &Component::isKeyboardFocusContainer)
1✔
957
        .def ("findFocusContainer", &Component::findFocusContainer, py::return_value_policy::reference)
1✔
958
        .def ("findKeyboardFocusContainer", &Component::findKeyboardFocusContainer, py::return_value_policy::reference)
1✔
959
        .def ("setWantsKeyboardFocus", &Component::setWantsKeyboardFocus)
1✔
960
        .def ("getWantsKeyboardFocus", &Component::getWantsKeyboardFocus)
1✔
961
        .def ("setMouseClickGrabsKeyboardFocus", &Component::setMouseClickGrabsKeyboardFocus)
1✔
962
        .def ("getMouseClickGrabsKeyboardFocus", &Component::getMouseClickGrabsKeyboardFocus)
1✔
963
        .def ("grabKeyboardFocus", &Component::grabKeyboardFocus)
1✔
964
        .def ("giveAwayKeyboardFocus", &Component::giveAwayKeyboardFocus)
1✔
965
        .def ("hasKeyboardFocus", &Component::hasKeyboardFocus)
1✔
966
        .def ("moveKeyboardFocusToSibling", &Component::moveKeyboardFocusToSibling)
1✔
967
        .def_static ("getCurrentlyFocusedComponent", &Component::getCurrentlyFocusedComponent, py::return_value_policy::reference)
1✔
968
        .def_static ("unfocusAllComponents", &Component::unfocusAllComponents)
1✔
969
        .def ("createFocusTraverser", &Component::createFocusTraverser)
1✔
970
        .def ("createKeyboardFocusTraverser", &Component::createKeyboardFocusTraverser)
1✔
971
        .def ("setHasFocusOutline", &Component::setHasFocusOutline)
1✔
972
        .def ("hasFocusOutline", &Component::hasFocusOutline)
1✔
973
        .def ("isEnabled", &Component::isEnabled)
1✔
974
        .def ("setEnabled", &Component::setEnabled)
1✔
975
        .def ("enablementChanged", &Component::enablementChanged)
1✔
976
        .def ("getAlpha", &Component::getAlpha)
1✔
977
        .def ("setAlpha", &Component::setAlpha)
1✔
978
        .def ("alphaChanged", &Component::alphaChanged)
1✔
979
        .def ("setMouseCursor", &Component::setMouseCursor)
1✔
980
        .def ("getMouseCursor", &Component::getMouseCursor)
1✔
981
        .def ("updateMouseCursor", &Component::updateMouseCursor)
1✔
982
        .def ("paint", &Component::paint)
1✔
983
        .def ("paintOverChildren", &Component::paintOverChildren)
1✔
984
        .def ("mouseMove", &Component::mouseMove)
1✔
985
        .def ("mouseEnter", &Component::mouseEnter)
1✔
986
        .def ("mouseExit", &Component::mouseExit)
1✔
987
        .def ("mouseDown", &Component::mouseDown)
1✔
988
        .def ("mouseDrag", &Component::mouseDrag)
1✔
989
        .def ("mouseUp", &Component::mouseUp)
1✔
990
        .def ("mouseDoubleClick", &Component::mouseDoubleClick)
1✔
991
        .def ("mouseWheelMove", &Component::mouseWheelMove)
1✔
992
        .def ("mouseMagnify", &Component::mouseMagnify)
1✔
993
        .def_static ("beginDragAutoRepeat", &Component::beginDragAutoRepeat)
1✔
994
        .def ("setRepaintsOnMouseActivity", &Component::setRepaintsOnMouseActivity)
1✔
995
        .def ("addMouseListener", &Component::addMouseListener)
1✔
996
        .def ("removeMouseListener", &Component::removeMouseListener)
1✔
997
        .def ("addKeyListener", &Component::addKeyListener)
1✔
998
        .def ("removeKeyListener", &Component::removeKeyListener)
1✔
999
        .def ("keyPressed", &Component::keyPressed)
1✔
1000
        .def ("keyStateChanged", &Component::keyStateChanged)
1✔
1001
        .def ("modifierKeysChanged", &Component::modifierKeysChanged)
1✔
1002
        .def ("isMouseOver", &Component::isMouseOver)
1✔
1003
        .def ("isMouseButtonDown", &Component::isMouseButtonDown)
1✔
1004
        .def ("isMouseOverOrDragging", &Component::isMouseOverOrDragging)
1✔
1005
        .def_static ("isMouseButtonDownAnywhere", &Component::isMouseButtonDownAnywhere)
1✔
1006
        .def ("getMouseXYRelative", &Component::getMouseXYRelative)
1✔
1007
        .def ("resized", &Component::resized)
1✔
1008
        .def ("moved", &Component::moved)
1✔
1009
        .def ("childBoundsChanged", &Component::childBoundsChanged)
1✔
1010
        .def ("parentSizeChanged", &Component::parentSizeChanged)
1✔
1011
        .def ("broughtToFront", &Component::broughtToFront)
1✔
1012
        .def ("addComponentListener", &Component::addComponentListener)
1✔
1013
        .def ("removeComponentListener", &Component::removeComponentListener)
1✔
1014
        .def ("postCommandMessage", &Component::postCommandMessage)
1✔
1015
        .def ("handleCommandMessage", &Component::handleCommandMessage)
1✔
1016
#if JUCE_MODAL_LOOPS_PERMITTED
1017
        .def ("runModalLoop", &Component::runModalLoop, py::call_guard<py::gil_scoped_release>())
1✔
1018
#endif
1019
        .def ("enterModalState", [](Component& self, bool takeKeyboardFocus, py::function callback, bool deleteWhenDismissed)
×
1020
        {
1021
            self.enterModalState (takeKeyboardFocus, new PyModalComponentManagerCallbackCallable (std::move (callback)), deleteWhenDismissed);
×
1022
        }, "takeKeyboardFocus"_a = true, "callback"_a = py::none(), "deleteWhenDismissed"_a = false)
2✔
1023
        .def ("exitModalState", &Component::exitModalState)
1✔
1024
        .def ("isCurrentlyModal", &Component::isCurrentlyModal)
1✔
1025
        .def_static ("getNumCurrentlyModalComponents", &Component::getNumCurrentlyModalComponents)
1✔
1026
        .def_static ("getCurrentlyModalComponent", &Component::getCurrentlyModalComponent)
1✔
1027
        .def ("isCurrentlyBlockedByAnotherModalComponent", &Component::isCurrentlyBlockedByAnotherModalComponent)
1✔
1028
        .def ("canModalEventBeSentToComponent", &Component::canModalEventBeSentToComponent)
1✔
1029
        .def ("inputAttemptWhenModal", &Component::inputAttemptWhenModal)
1✔
1030
        .def ("getProperties", py::overload_cast<> (&Component::getProperties))
1✔
1031
        .def ("getProperties", py::overload_cast<> (&Component::getProperties, py::const_))
1✔
1032
        .def ("findColour", &Component::findColour, "colourID"_a, "inheritFromParent"_a = false)
2✔
1033
        .def ("setColour", &Component::setColour)
1✔
1034
        .def ("removeColour", &Component::removeColour)
1✔
1035
        .def ("isColourSpecified", &Component::isColourSpecified)
1✔
1036
        .def ("copyAllExplicitColoursTo", [](const Component& self, Component* target) { self.copyAllExplicitColoursTo (*target); })
1✔
1037
        .def ("colourChanged", &Component::colourChanged)
1✔
1038
        .def ("getWindowHandle", [](const Component& self) { return reinterpret_cast<std::intptr_t> (self.getWindowHandle()); })
1✔
1039
    //.def ("getPositioner", &Component::getPositioner)
1040
    //.def ("setPositioner", &Component::setPositioner)
1041
    //.def ("setCachedComponentImage", &Component::setCachedComponentImage)
1042
    //.def ("getCachedComponentImage", &Component::getCachedComponentImage)
1043
        .def ("setViewportIgnoreDragFlag", &Component::setViewportIgnoreDragFlag)
1✔
1044
        .def ("getViewportIgnoreDragFlag", &Component::getViewportIgnoreDragFlag)
1✔
1045
        .def ("getTitle", &Component::getTitle)
1✔
1046
        .def ("setTitle", &Component::setTitle)
1✔
1047
        .def ("getDescription", &Component::getDescription)
1✔
1048
        .def ("setDescription", &Component::setDescription)
1✔
1049
        .def ("getHelpText", &Component::getHelpText)
1✔
1050
        .def ("setHelpText", &Component::setHelpText)
1✔
1051
        .def ("setAccessible", &Component::setAccessible)
1✔
1052
        .def ("isAccessible", &Component::isAccessible)
1✔
1053
    //.def ("getAccessibilityHandler", &Component::getAccessibilityHandler)
1054
        .def ("invalidateAccessibilityHandler", &Component::invalidateAccessibilityHandler)
1✔
1055
    //.def ("createAccessibilityHandler", &Component::createAccessibilityHandler)
1056
        .def ("getChildren", [](const juce::Component& self)
×
1057
        {
1058
            py::list list;
×
1059
            for (const auto& comp : self.getChildren())
×
1060
                list.append (comp);
×
1061
            return list;
×
1062
        })
1✔
1063
        .def ("releaseOwnership", [](py::object self) { return self.release(); })
1✔
1064
        .def ("typeName", [](const juce::Component* self)
×
1065
        {
1066
            return Helpers::pythonizeClassName (typeid (*self).name());
×
1067
        })
1✔
1068
    ;
1069

1070
    // ============================================================================================ juce::Drawable
1071

1072
    py::class_<Drawable, Component, PyDrawable<>> classDrawable (m, "Drawable");
2✔
1073

1074
    classDrawable
1075
        .def (py::init<>())
1✔
1076
        .def ("draw", &Drawable::draw, "g"_a, "opacity"_a, "transform"_a = AffineTransform())
1✔
1077
        .def ("drawAt", &Drawable::drawAt)
1✔
1078
        .def ("drawWithin", &Drawable::drawWithin)
1✔
1079
        .def ("setOriginWithOriginalSize", &Drawable::setOriginWithOriginalSize)
1✔
1080
        .def ("setTransformToFit", &Drawable::setTransformToFit)
1✔
1081
        .def ("getParent", &Drawable::getParent, py::return_value_policy::reference)
1✔
1082
    //.def ("setClipPath", &Drawable::setClipPath)
1083
        .def_static ("createFromImageData", [](py::buffer data)
×
1084
        {
1085
            auto info = data.request();
×
1086
            return Drawable::createFromImageData (info.ptr, static_cast<size_t> (info.size)).release();
×
1087
        })
1✔
1088
        .def_static ("createFromImageDataStream", &Drawable::createFromImageDataStream)
1✔
1089
        .def_static ("createFromImageFile", &Drawable::createFromImageFile)
1✔
1090
        .def_static ("createFromSVG", &Drawable::createFromSVG)
1✔
1091
        .def_static ("createFromSVGFile", &Drawable::createFromSVGFile)
1✔
1092
        .def_static ("parseSVGPath", &Drawable::parseSVGPath)
1✔
1093
        .def ("getDrawableBounds", &Drawable::getDrawableBounds)
1✔
1094
        .def ("replaceColour", &Drawable::replaceColour)
1✔
1095
        .def ("setDrawableTransform", &Drawable::setDrawableTransform)
1✔
1096
    ;
1097

1098
    py::class_<DrawableComposite, Drawable, PyDrawableComposite<>> classDrawableComposite (m, "DrawableComposite");
2✔
1099

1100
    classDrawableComposite
1101
        .def (py::init<>())
1✔
1102
        .def (py::init<const PyDrawableComposite<>&>())
1✔
1103
        .def ("setBoundingBox", py::overload_cast<Parallelogram<float>> (&DrawableComposite::setBoundingBox))
1✔
1104
        .def ("setBoundingBox", py::overload_cast<Rectangle<float>> (&DrawableComposite::setBoundingBox))
1✔
1105
        .def ("getBoundingBox", &DrawableComposite::getBoundingBox)
1✔
1106
        .def ("resetBoundingBoxToContentArea", &DrawableComposite::resetBoundingBoxToContentArea)
1✔
1107
        .def ("getContentArea", &DrawableComposite::getContentArea)
1✔
1108
        .def ("setContentArea", &DrawableComposite::setContentArea)
1✔
1109
        .def ("resetContentAreaAndBoundingBoxToFitChildren", &DrawableComposite::resetContentAreaAndBoundingBoxToFitChildren)
1✔
1110
    ;
1111

1112
    py::class_<DrawableImage, Drawable, PyDrawable<DrawableImage>> classDrawableImage (m, "DrawableImage");
2✔
1113

1114
    classDrawableImage
1115
        .def (py::init<>())
1✔
1116
        .def (py::init<const Image&>())
1✔
1117
        .def (py::init<const PyDrawable<DrawableImage>&>())
1✔
1118
        .def ("setImage", &DrawableImage::setImage)
1✔
1119
        .def ("getImage", &DrawableImage::getImage)
1✔
1120
        .def ("setOpacity", &DrawableImage::setOpacity)
1✔
1121
        .def ("getOpacity", &DrawableImage::getOpacity)
1✔
1122
        .def ("setOverlayColour", &DrawableImage::setOverlayColour)
1✔
1123
        .def ("getOverlayColour", &DrawableImage::getOverlayColour)
1✔
1124
        .def ("setBoundingBox", py::overload_cast<Parallelogram<float>> (&DrawableImage::setBoundingBox))
1✔
1125
        .def ("setBoundingBox", py::overload_cast<Rectangle<float>> (&DrawableImage::setBoundingBox))
1✔
1126
        .def ("getBoundingBox", &DrawableImage::getBoundingBox)
1✔
1127
    ;
1128

1129
    py::class_<DrawablePath, Drawable, PyDrawablePath<>> classDrawablePath (m, "DrawablePath");
2✔
1130

1131
    classDrawablePath
1132
        .def (py::init<>())
1✔
1133
        .def (py::init<const PyDrawablePath<>&>())
1✔
1134
        .def ("setPath", py::overload_cast<const Path&> (&DrawablePath::setPath))
1✔
1135
        .def ("getPath", &DrawablePath::getPath)
1✔
1136
        .def ("getStrokePath", &DrawablePath::getStrokePath)
1✔
1137
    ;
1138

1139
    py::class_<DrawableRectangle, Drawable, PyDrawable<DrawableRectangle>> classDrawableRectangle (m, "DrawableRectangle");
2✔
1140

1141
    classDrawableRectangle
1142
        .def (py::init<>())
1✔
1143
        .def (py::init<const PyDrawable<DrawableRectangle>&>())
1✔
1144
        .def ("setRectangle", &DrawableRectangle::setRectangle)
1✔
1145
        .def ("getRectangle", &DrawableRectangle::getRectangle)
1✔
1146
        .def ("getCornerSize", &DrawableRectangle::getCornerSize)
1✔
1147
        .def ("setCornerSize", &DrawableRectangle::setCornerSize)
1✔
1148
    ;
1149

1150
    py::class_<DrawableShape, Drawable, PyDrawableShape<>> classDrawableShape (m, "DrawableShape");
2✔
1151

1152
    classDrawableShape
1153
        .def (py::init<>())
1✔
1154
        .def (py::init<const PyDrawableShape<>&>())
1✔
1155
        .def ("setFill", &DrawableShape::setFill)
1✔
1156
        .def ("getFill", &DrawableShape::getFill)
1✔
1157
        .def ("setStrokeFill", &DrawableShape::setStrokeFill)
1✔
1158
        .def ("getStrokeFill", &DrawableShape::getStrokeFill)
1✔
1159
        .def ("setStrokeType", &DrawableShape::setStrokeType)
1✔
1160
        .def ("setStrokeThickness", &DrawableShape::setStrokeThickness)
1✔
1161
        .def ("getStrokeType", &DrawableShape::getStrokeType)
1✔
1162
        .def ("setDashLengths", &DrawableShape::setDashLengths)
1✔
1163
        .def ("getDashLengths", &DrawableShape::getDashLengths)
1✔
1164
    ;
1165

1166
    py::class_<DrawableText, Drawable, PyDrawableText<>> classDrawableText (m, "DrawableText");
2✔
1167

1168
    classDrawableText
1169
        .def (py::init<>())
1✔
1170
        .def (py::init<const PyDrawableText<>&>())
1✔
1171
        .def ("setText", &DrawableText::setText)
1✔
1172
        .def ("getText", &DrawableText::getText)
1✔
1173
        .def ("setColour", &DrawableText::setColour)
1✔
1174
        .def ("getColour", &DrawableText::getColour)
1✔
1175
        .def ("setFont", &DrawableText::setFont)
1✔
1176
        .def ("getFont", &DrawableText::getFont)
1✔
1177
        .def ("setJustification", &DrawableText::setJustification)
1✔
1178
        .def ("setJustification", [](DrawableText& self, Justification::Flags flags) { self.setJustification (flags); })
1✔
1179
        .def ("setJustification", [](DrawableText& self, int flags) { self.setJustification (Justification (flags)); })
1✔
1180
        .def ("getJustification", &DrawableText::getJustification)
1✔
1181
        .def ("getBoundingBox", &DrawableText::getBoundingBox)
1✔
1182
        .def ("setBoundingBox", &DrawableText::setBoundingBox)
1✔
1183
        .def ("getFontHeight", &DrawableText::getFontHeight)
1✔
1184
        .def ("setFontHeight", &DrawableText::setFontHeight)
1✔
1185
        .def ("getFontHorizontalScale", &DrawableText::getFontHorizontalScale)
1✔
1186
        .def ("setFontHorizontalScale", &DrawableText::setFontHorizontalScale)
1✔
1187
    ;
1188

1189
    // ============================================================================================ juce::Button
1190

1191
    py::class_<Button, Component, PyButton<>> classButton (m, "Button");
2✔
1192

1193
    Helpers::makeArithmeticEnum<Button::ConnectedEdgeFlags> (classButton, "ConnectedEdgeFlags")
2✔
1194
        .value ("ConnectedOnLeft", Button::ConnectedEdgeFlags::ConnectedOnLeft)
1✔
1195
        .value ("ConnectedOnRight", Button::ConnectedEdgeFlags::ConnectedOnRight)
1✔
1196
        .value ("ConnectedOnTop", Button::ConnectedEdgeFlags::ConnectedOnTop)
1✔
1197
        .value ("ConnectedOnBottom", Button::ConnectedEdgeFlags::ConnectedOnBottom)
1✔
1198
        .export_values();
1✔
1199

1200
    py::enum_<Button::ButtonState> (classButton, "ButtonState")
2✔
1201
        .value ("buttonNormal", Button::ButtonState::buttonNormal)
1✔
1202
        .value ("buttonOver", Button::ButtonState::buttonOver)
1✔
1203
        .value ("buttonDown", Button::ButtonState::buttonDown)
1✔
1204
        .export_values();
1✔
1205

1206
    py::class_<Button::Listener, PyButtonListener> classButtonListener (classButton, "Listener");
2✔
1207

1208
    classButtonListener
1209
        .def (py::init<>())
1✔
1210
        .def ("buttonClicked", &Button::Listener::buttonClicked)
1✔
1211
        .def ("buttonStateChanged", &Button::Listener::buttonStateChanged)
1✔
1212
    ;
1213

1214
    classButton
1215
        .def (py::init<const String&>())
1✔
1216
        .def ("setButtonText", &Button::setButtonText)
1✔
1217
        .def ("getButtonText", &Button::getButtonText)
1✔
1218
        .def ("isDown", &Button::isDown)
1✔
1219
        .def ("isOver", &Button::isOver)
1✔
1220
        .def ("setToggleable", &Button::setToggleable)
1✔
1221
        .def ("isToggleable", &Button::isToggleable)
1✔
1222
        .def ("setToggleState", py::overload_cast<bool, NotificationType> (&Button::setToggleState))
1✔
1223
        .def ("getToggleState", &Button::getToggleState)
1✔
1224
        .def ("getToggleStateValue", &Button::getToggleStateValue, py::return_value_policy::reference)
1✔
1225
        .def ("setClickingTogglesState", &Button::setClickingTogglesState)
1✔
1226
        .def ("getClickingTogglesState", &Button::getClickingTogglesState)
1✔
1227
        .def ("setRadioGroupId", &Button::setRadioGroupId)
1✔
1228
        .def ("getRadioGroupId", &Button::getRadioGroupId)
1✔
1229
        .def ("addListener", &Button::addListener)
1✔
1230
        .def ("removeListener", &Button::removeListener)
1✔
1231
        .def_readwrite ("onClick", &Button::onClick)
1✔
1232
        .def_readwrite ("onStateChange", &Button::onStateChange)
1✔
1233
        .def ("triggerClick", &Button::triggerClick)
1✔
1234
    //.def ("setCommandToTrigger", &Button::setCommandToTrigger)
1235
        .def ("getCommandID", &Button::getCommandID)
1✔
1236
        .def ("addShortcut", &Button::addShortcut)
1✔
1237
        .def ("clearShortcuts", &Button::clearShortcuts)
1✔
1238
        .def ("isRegisteredForShortcut", &Button::isRegisteredForShortcut)
1✔
1239
        .def ("setRepeatSpeed", &Button::setRepeatSpeed)
1✔
1240
        .def ("setTriggeredOnMouseDown", &Button::setTriggeredOnMouseDown)
1✔
1241
        .def ("getTriggeredOnMouseDown", &Button::getTriggeredOnMouseDown)
1✔
1242
        .def ("getMillisecondsSinceButtonDown", &Button::getMillisecondsSinceButtonDown)
1✔
1243
        .def ("setConnectedEdges", &Button::setConnectedEdges)
1✔
1244
        .def ("setConnectedEdges", [](Button& self, Button::ConnectedEdgeFlags flags) { self.setConnectedEdges (static_cast<int> (flags)); })
1✔
1245
        .def ("getConnectedEdgeFlags", &Button::getConnectedEdgeFlags)
1✔
1246
        .def ("isConnectedOnLeft", &Button::isConnectedOnLeft)
1✔
1247
        .def ("isConnectedOnRight", &Button::isConnectedOnRight)
1✔
1248
        .def ("isConnectedOnTop", &Button::isConnectedOnTop)
1✔
1249
        .def ("isConnectedOnBottom", &Button::isConnectedOnBottom)
1✔
1250
        .def ("setState", &Button::setState)
1✔
1251
        .def ("getState", &Button::getState)
1✔
1252
    ;
1253

1254
    // ============================================================================================ juce::ArrowButton
1255

1256
    py::class_<ArrowButton, Button, PyButton<ArrowButton>> classArrowButton (m, "ArrowButton");
2✔
1257

1258
    classArrowButton
1259
        .def (py::init<const String&, float, Colour>())
1✔
1260
    ;
1261

1262
    // ============================================================================================ juce::DrawableButton
1263

1264
    py::class_<DrawableButton, Button, PyDrawableButton<>> classDrawableButton (m, "DrawableButton");
2✔
1265

1266
    py::enum_<DrawableButton::ButtonStyle> (classDrawableButton, "ButtonStyle")
2✔
1267
        .value ("ImageFitted", DrawableButton::ButtonStyle::ImageFitted)
1✔
1268
        .value ("ImageRaw", DrawableButton::ButtonStyle::ImageRaw)
1✔
1269
        .value ("ImageAboveTextLabel", DrawableButton::ButtonStyle::ImageAboveTextLabel)
1✔
1270
        .value ("ImageOnButtonBackground", DrawableButton::ButtonStyle::ImageOnButtonBackground)
1✔
1271
        .value ("ImageOnButtonBackgroundOriginalSize", DrawableButton::ButtonStyle::ImageOnButtonBackgroundOriginalSize)
1✔
1272
        .value ("ImageStretched", DrawableButton::ButtonStyle::ImageStretched)
1✔
1273
        .export_values();
1✔
1274

1275
    classDrawableButton
1276
        .def (py::init<const String&, DrawableButton::ButtonStyle>())
1✔
1277
        .def ("setImages", [](DrawableButton* self, const Drawable* normalImage) { self->setImages (normalImage); })
1✔
1278
        .def ("setImages", [](DrawableButton* self, const Drawable* normalImage, const Drawable* downImage) { self->setImages (normalImage, downImage); })
1✔
1279
        .def ("setImages", [](DrawableButton* self, const Drawable* normalImage, const Drawable* downImage, const Drawable* disabledImage) { self->setImages (normalImage, downImage, disabledImage); })
1✔
1280
        .def ("setImages", [](DrawableButton* self, const Drawable* normalImage, const Drawable* downImage, const Drawable* disabledImage, const Drawable* normalImageOn) { self->setImages (normalImage, downImage, disabledImage, normalImageOn); })
1✔
1281
        .def ("setImages", [](DrawableButton* self, const Drawable* normalImage, const Drawable* downImage, const Drawable* disabledImage, const Drawable* normalImageOn, const Drawable* overImageOn) { self->setImages (normalImage, downImage, disabledImage, normalImageOn, overImageOn); })
1✔
1282
        .def ("setImages", [](DrawableButton* self, const Drawable* normalImage, const Drawable* downImage, const Drawable* disabledImage, const Drawable* normalImageOn, const Drawable* overImageOn, const Drawable* downImageOn) { self->setImages (normalImage, downImage, disabledImage, normalImageOn, overImageOn, downImageOn); })
1✔
1283
        .def ("setImages", &DrawableButton::setImages)
1✔
1284
        .def ("setButtonStyle", &DrawableButton::setButtonStyle)
1✔
1285
        .def ("getStyle", &DrawableButton::getStyle)
1✔
1286
        .def ("setEdgeIndent", &DrawableButton::setEdgeIndent)
1✔
1287
        .def ("getEdgeIndent", &DrawableButton::getEdgeIndent)
1✔
1288
        .def ("getCurrentImage", &DrawableButton::getCurrentImage, py::return_value_policy::reference)
1✔
1289
        .def ("getNormalImage", &DrawableButton::getNormalImage, py::return_value_policy::reference)
1✔
1290
        .def ("getOverImage", &DrawableButton::getOverImage, py::return_value_policy::reference)
1✔
1291
        .def ("getDownImage", &DrawableButton::getDownImage, py::return_value_policy::reference)
1✔
1292
        .def ("getImageBounds", &DrawableButton::getImageBounds)
1✔
1293
    ;
1294

1295
    classDrawableButton.attr ("textColourId") = py::int_ (static_cast<int> (DrawableButton::textColourId));
1✔
1296
    classDrawableButton.attr ("textColourOnId") = py::int_ (static_cast<int> (DrawableButton::textColourOnId));
1✔
1297
    classDrawableButton.attr ("backgroundColourId") = py::int_ (static_cast<int> (DrawableButton::backgroundColourId));
1✔
1298
    classDrawableButton.attr ("backgroundOnColourId") = py::int_ (static_cast<int> (DrawableButton::backgroundOnColourId));
1✔
1299

1300
    // ============================================================================================ juce::HyperlinkButton
1301

1302
    py::class_<HyperlinkButton, Button, PyButton<HyperlinkButton>> classHyperlinkButton (m, "HyperlinkButton");
2✔
1303

1304
    classHyperlinkButton
1305
        .def (py::init<>())
1✔
1306
        .def (py::init<const String&, const URL&>())
1✔
1307
        .def ("setFont", &HyperlinkButton::setFont)
1✔
1308
        .def ("setURL", &HyperlinkButton::setURL)
1✔
1309
        .def ("getURL", &HyperlinkButton::getURL)
1✔
1310
        .def ("changeWidthToFitText", &HyperlinkButton::changeWidthToFitText)
1✔
1311
        .def ("setJustificationType", &HyperlinkButton::setJustificationType)
1✔
1312
        .def ("setJustificationType", [](HyperlinkButton& self, Justification::Flags flags) { self.setJustificationType (flags); })
1✔
1313
        .def ("setJustificationType", [](HyperlinkButton& self, int flags) { self.setJustificationType (Justification (flags)); })
1✔
1314
        .def ("getJustificationType", &HyperlinkButton::getJustificationType)
1✔
1315
    //.def ("createAccessibilityHandler", &ToggleButton::createAccessibilityHandler)
1316
    ;
1317

1318
    classHyperlinkButton.attr ("textColourId") = py::int_ (static_cast<int> (HyperlinkButton::textColourId));
1✔
1319

1320
    // ============================================================================================ juce::ImageButton
1321

1322
    py::class_<ImageButton, Button, PyButton<ImageButton>> classImageButton (m, "ImageButton");
2✔
1323

1324
    classImageButton
1325
        .def (py::init<const String&>(), "name"_a = String())
2✔
1326
        .def ("setImages", &ImageButton::setImages)
1✔
1327
        .def ("getNormalImage", &ImageButton::getNormalImage)
1✔
1328
        .def ("getOverImage", &ImageButton::getOverImage)
1✔
1329
        .def ("getDownImage", &ImageButton::getDownImage)
1✔
1330
    ;
1331

1332
    // ============================================================================================ juce::ShapeButton
1333

1334
    py::class_<ShapeButton, Button, PyButton<ShapeButton>> classShapeButton (m, "ShapeButton");
2✔
1335

1336
    classShapeButton
1337
        .def (py::init<const String&, Colour, Colour, Colour>())
1✔
1338
        .def ("setShape", &ShapeButton::setShape)
1✔
1339
        .def ("setColours", &ShapeButton::setColours)
1✔
1340
        .def ("setOnColours", &ShapeButton::setOnColours)
1✔
1341
        .def ("shouldUseOnColours", &ShapeButton::shouldUseOnColours)
1✔
1342
        .def ("setOutline", &ShapeButton::setOutline)
1✔
1343
        .def ("setBorderSize", &ShapeButton::setBorderSize)
1✔
1344
    ;
1345

1346
    // ============================================================================================ juce::TextButton
1347

1348
    py::class_<TextButton, Button, PyButton<TextButton>> classTextButton (m, "TextButton");
2✔
1349

1350
    classTextButton
1351
        .def (py::init<>())
1✔
1352
        .def (py::init<const String&>())
1✔
1353
        .def (py::init<const String&, const String&>())
1✔
1354
        .def ("changeWidthToFitText", py::overload_cast<> (&TextButton::changeWidthToFitText))
1✔
1355
        .def ("changeWidthToFitText", py::overload_cast<int> (&TextButton::changeWidthToFitText))
1✔
1356
        .def ("getBestWidthForHeight", &TextButton::getBestWidthForHeight)
1✔
1357
    ;
1358

1359
    classTextButton.attr ("buttonColourId") = py::int_ (static_cast<int> (TextButton::buttonColourId));
1✔
1360
    classTextButton.attr ("buttonOnColourId") = py::int_ (static_cast<int> (TextButton::buttonOnColourId));
1✔
1361
    classTextButton.attr ("textColourOffId") = py::int_ (static_cast<int> (TextButton::textColourOffId));
1✔
1362
    classTextButton.attr ("textColourOnId") = py::int_ (static_cast<int> (TextButton::textColourOnId));
1✔
1363

1364
    // ============================================================================================ juce::ToggleButton
1365

1366
    py::class_<ToggleButton, Button, PyButton<ToggleButton>> classToggleButton (m, "ToggleButton");
2✔
1367

1368
    classToggleButton
1369
        .def (py::init<>())
1✔
1370
        .def (py::init<const String&>())
1✔
1371
        .def ("changeWidthToFitText", &ToggleButton::changeWidthToFitText)
1✔
1372
    //.def ("createAccessibilityHandler", &ToggleButton::createAccessibilityHandler)
1373
    ;
1374

1375
    classToggleButton.attr ("textColourId") = py::int_ (static_cast<int> (ToggleButton::textColourId));
1✔
1376
    classToggleButton.attr ("tickColourId") = py::int_ (static_cast<int> (ToggleButton::tickColourId));
1✔
1377
    classToggleButton.attr ("tickDisabledColourId") = py::int_ (static_cast<int> (ToggleButton::tickDisabledColourId));
1✔
1378

1379
    // ============================================================================================ juce::ToolbarItemFactory
1380

1381
    py::class_<ToolbarItemFactory, PyToolbarItemFactory> classToolbarItemFactory (m, "ToolbarItemFactory");
2✔
1382

1383
    py::enum_<ToolbarItemFactory::SpecialItemIds> (classToolbarItemFactory, "SpecialItemIds")
2✔
1384
        .value ("separatorBarId", ToolbarItemFactory::SpecialItemIds::separatorBarId)
1✔
1385
        .value ("spacerId", ToolbarItemFactory::SpecialItemIds::spacerId)
1✔
1386
        .value ("flexibleSpacerId", ToolbarItemFactory::SpecialItemIds::flexibleSpacerId)
1✔
1387
        .export_values();
1✔
1388

1389
    classToolbarItemFactory
1390
        .def (py::init<>())
1✔
1391
        .def ("getAllToolbarItemIds", &ToolbarItemFactory::getAllToolbarItemIds)
1✔
1392
        .def ("getDefaultItemSet", &ToolbarItemFactory::getDefaultItemSet)
1✔
1393
        .def ("createItem", &ToolbarItemFactory::createItem)
1✔
1394
    ;
1395

1396
    // ============================================================================================ juce::Toolbar
1397

1398
    py::class_<Toolbar, Component, PyComponent<Toolbar>> classToolbar (m, "Toolbar");
2✔
1399

1400
    py::enum_<Toolbar::ToolbarItemStyle> (classToolbar, "ToolbarItemStyle")
2✔
1401
        .value ("iconsOnly", Toolbar::ToolbarItemStyle::iconsOnly)
1✔
1402
        .value ("iconsWithText", Toolbar::ToolbarItemStyle::iconsWithText)
1✔
1403
        .value ("textOnly", Toolbar::ToolbarItemStyle::textOnly)
1✔
1404
        .export_values();
1✔
1405

1406
    py::enum_<Toolbar::CustomisationFlags> (classToolbar, "CustomisationFlags")
2✔
1407
        .value ("allowIconsOnlyChoice", Toolbar::CustomisationFlags::allowIconsOnlyChoice)
1✔
1408
        .value ("allowIconsWithTextChoice", Toolbar::CustomisationFlags::allowIconsWithTextChoice)
1✔
1409
        .value ("allowTextOnlyChoice", Toolbar::CustomisationFlags::allowTextOnlyChoice)
1✔
1410
        .value ("showResetToDefaultsButton", Toolbar::CustomisationFlags::showResetToDefaultsButton)
1✔
1411
        .value ("allCustomisationOptionsEnabled", Toolbar::CustomisationFlags::allCustomisationOptionsEnabled)
1✔
1412
        .export_values();
1✔
1413

1414
    classToolbar
1415
        .def (py::init<>())
1✔
1416
        .def ("setVertical", &Toolbar::setVertical)
1✔
1417
        .def ("isVertical", &Toolbar::isVertical)
1✔
1418
        .def ("getThickness", &Toolbar::getThickness)
1✔
1419
        .def ("getLength", &Toolbar::getLength)
1✔
1420
        .def ("clear", &Toolbar::clear)
1✔
1421
        .def ("addItem", &Toolbar::addItem)
1✔
1422
        .def ("removeToolbarItem", &Toolbar::removeToolbarItem)
1✔
1423
        .def ("removeAndReturnItem", &Toolbar::removeAndReturnItem, py::return_value_policy::reference)
1✔
1424
        .def ("getNumItems", &Toolbar::getNumItems)
1✔
1425
        .def ("getItemId", &Toolbar::getItemId)
1✔
1426
        .def ("getItemComponent", &Toolbar::getItemComponent, py::return_value_policy::reference)
1✔
1427
        .def ("addDefaultItems", &Toolbar::addDefaultItems)
1✔
1428
        .def ("getStyle", &Toolbar::getStyle)
1✔
1429
        .def ("setStyle", &Toolbar::setStyle)
1✔
1430
        .def ("showCustomisationDialog", &Toolbar::showCustomisationDialog)
1✔
1431
        .def ("setEditingActive", &Toolbar::setEditingActive)
1✔
1432
        .def ("toString", &Toolbar::toString)
1✔
1433
        .def ("restoreFromString", &Toolbar::restoreFromString)
1✔
1434
    ;
1435

1436
    classToolbar.attr ("backgroundColourId") = py::int_ (static_cast<int> (Toolbar::backgroundColourId));
1✔
1437
    classToolbar.attr ("separatorColourId") = py::int_ (static_cast<int> (Toolbar::separatorColourId));
1✔
1438
    classToolbar.attr ("buttonMouseOverBackgroundColourId") = py::int_ (static_cast<int> (Toolbar::buttonMouseOverBackgroundColourId));
1✔
1439
    classToolbar.attr ("buttonMouseDownBackgroundColourId") = py::int_ (static_cast<int> (Toolbar::buttonMouseDownBackgroundColourId));
1✔
1440
    classToolbar.attr ("labelTextColourId") = py::int_ (static_cast<int> (Toolbar::labelTextColourId));
1✔
1441
    classToolbar.attr ("editingModeOutlineColourId") = py::int_ (static_cast<int> (Toolbar::editingModeOutlineColourId));
1✔
1442

1443
    // ============================================================================================ juce::ToolbarItemComponent
1444

1445
    py::class_<ToolbarItemComponent, Button, PyToolbarItemComponent<>> classToolbarItemComponent (m, "ToolbarItemComponent");
2✔
1446

1447
    py::enum_<ToolbarItemComponent::ToolbarEditingMode> (classToolbarItemComponent, "ToolbarEditingMode")
2✔
1448
        .value ("normalMode", ToolbarItemComponent::ToolbarEditingMode::normalMode)
1✔
1449
        .value ("editableOnToolbar", ToolbarItemComponent::ToolbarEditingMode::editableOnToolbar)
1✔
1450
        .value ("editableOnPalette", ToolbarItemComponent::ToolbarEditingMode::editableOnPalette)
1✔
1451
        .export_values();
1✔
1452

1453
    classToolbarItemComponent
1454
        .def (py::init<int, const String&, bool>())
1✔
1455
        .def ("getItemId", &ToolbarItemComponent::getItemId)
1✔
1456
        .def ("getToolbar", &ToolbarItemComponent::getToolbar, py::return_value_policy::reference)
1✔
1457
        .def ("isToolbarVertical", &ToolbarItemComponent::isToolbarVertical)
1✔
1458
        .def ("getStyle", &ToolbarItemComponent::getStyle)
1✔
1459
        .def ("setStyle", &ToolbarItemComponent::setStyle)
1✔
1460
        .def ("getContentArea", &ToolbarItemComponent::getContentArea)
1✔
1461
        .def ("getToolbarItemSizes", &ToolbarItemComponent::getToolbarItemSizes)
1✔
1462
        .def ("paintButtonArea", &ToolbarItemComponent::paintButtonArea)
1✔
1463
        .def ("contentAreaChanged", &ToolbarItemComponent::contentAreaChanged)
1✔
1464
        .def ("setEditingMode", &ToolbarItemComponent::setEditingMode)
1✔
1465
        .def ("getEditingMode", &ToolbarItemComponent::getEditingMode)
1✔
1466
    ;
1467

1468
    // ============================================================================================ juce::MenuBarModel
1469

1470
    py::class_<MenuBarModel, PyMenuBarModel> classMenuBarModel (m, "MenuBarModel");
2✔
1471

1472
    py::class_<MenuBarModel::Listener, PyMenuBarModelListener> classMenuBarModelListener (m, "Listener");
2✔
1473

1474
    classMenuBarModelListener
1475
        .def (py::init<>())
1✔
1476
        .def ("menuBarItemsChanged", &MenuBarModel::Listener::menuBarItemsChanged)
1✔
1477
        .def ("menuCommandInvoked", &MenuBarModel::Listener::menuCommandInvoked)
1✔
1478
        .def ("menuBarActivated", &MenuBarModel::Listener::menuBarActivated)
1✔
1479
    ;
1480

1481
    classMenuBarModel
1482
        .def (py::init<>())
1✔
1483
        .def ("menuItemsChanged", &MenuBarModel::menuItemsChanged)
1✔
1484
    //.def ("setApplicationCommandManagerToWatch", &MenuBarModel::setApplicationCommandManagerToWatch)
1485
        .def ("addListener", &MenuBarModel::addListener)
1✔
1486
        .def ("removeListener", &MenuBarModel::removeListener)
1✔
1487
        .def ("getMenuBarNames", &MenuBarModel::getMenuBarNames)
1✔
1488
        .def ("getMenuForIndex", &MenuBarModel::getMenuForIndex)
1✔
1489
        .def ("menuItemSelected", &MenuBarModel::menuItemSelected)
1✔
1490
        .def ("menuBarActivated", &MenuBarModel::menuBarActivated)
1✔
1491
#if JUCE_MAC
1492
        .def_static ("setMacMainMenu", &MenuBarModel::setMacMainMenu)
1493
        .def_static ("getMacMainMenu", &MenuBarModel::getMacMainMenu, py::return_value_policy::reference)
1494
    //.def_static ("getMacExtraAppleItemsMenu", &MenuBarModel::getMacExtraAppleItemsMenu, py::return_value_policy::reference)
1495
#endif
1496
    ;
1497

1498
    // ============================================================================================ juce::Label
1499

1500
    py::class_<Label, Component, PyLabel<>> classLabel (m, "Label");
2✔
1501
    py::class_<Label::Listener, PyLabelListener> classLabelListener (classLabel, "Listener");
2✔
1502

1503
    classLabelListener
1504
        .def (py::init<>())
1✔
1505
        .def ("labelTextChanged", &Label::Listener::labelTextChanged)
1✔
1506
        .def ("editorShown", &Label::Listener::editorShown)
1✔
1507
        .def ("editorHidden", &Label::Listener::editorHidden)
1✔
1508
    ;
1509

1510
    classLabel
1511
        .def (py::init<const String&, const String&>(), "componentName"_a = String(), "labelText"_a = String())
2✔
1512
        .def ("setText", &Label::setText)
1✔
1513
        .def ("getText", &Label::getText, "returnActiveEditorContents"_a = false)
2✔
1514
        .def ("getTextValue", &Label::getTextValue, py::return_value_policy::reference_internal)
1✔
1515
        .def ("setFont", &Label::setFont)
1✔
1516
        .def ("getFont", &Label::getFont)
1✔
1517
        .def ("setJustificationType", &Label::setJustificationType)
1✔
1518
        .def ("setJustificationType", [](Label& self, Justification::Flags flags) { self.setJustificationType (flags); })
1✔
1519
        .def ("setJustificationType", [](Label& self, int flags) { self.setJustificationType (Justification (flags)); })
1✔
1520
        .def ("getJustificationType", &Label::getJustificationType)
1✔
1521
        .def ("setBorderSize", &Label::setBorderSize)
1✔
1522
        .def ("getBorderSize", &Label::getBorderSize)
1✔
1523
        .def ("attachToComponent", &Label::attachToComponent)
1✔
1524
        .def ("getAttachedComponent", &Label::getAttachedComponent, py::return_value_policy::reference)
1✔
1525
        .def ("isAttachedOnLeft", &Label::isAttachedOnLeft)
1✔
1526
        .def ("setMinimumHorizontalScale", &Label::setMinimumHorizontalScale)
1✔
1527
        .def ("getMinimumHorizontalScale", &Label::getMinimumHorizontalScale)
1✔
1528
    //.def ("setKeyboardType", &Label::setKeyboardType)
1529
        .def ("addListener", &Label::addListener)
1✔
1530
        .def ("removeListener", &Label::removeListener)
1✔
1531
        .def_readwrite ("onTextChange", &Label::onTextChange)
1✔
1532
        .def_readwrite ("onEditorShow", &Label::onEditorShow)
1✔
1533
        .def_readwrite ("onEditorHide", &Label::onEditorHide)
1✔
1534
        .def ("setEditable", &Label::setEditable, "editOnSingleClick"_a, "editOnDoubleClick"_a = false, "lossOfFocusDiscardsChanges"_a = false)
2✔
1535
        .def ("isEditableOnSingleClick", &Label::isEditableOnSingleClick)
1✔
1536
        .def ("isEditableOnDoubleClick", &Label::isEditableOnDoubleClick)
1✔
1537
        .def ("doesLossOfFocusDiscardChanges", &Label::doesLossOfFocusDiscardChanges)
1✔
1538
        .def ("isEditable", &Label::isEditable)
1✔
1539
        .def ("showEditor", &Label::showEditor)
1✔
1540
        .def ("hideEditor", &Label::hideEditor)
1✔
1541
        .def ("isBeingEdited", &Label::isBeingEdited)
1✔
1542
    //.def ("getCurrentTextEditor", &Label::getCurrentTextEditor, py::return_value_policy::reference_internal)
1543
    //.def ("createAccessibilityHandler", &Label::createAccessibilityHandler)
1544
    ;
1545

1546
    classLabel.attr ("backgroundColourId") = py::int_ (static_cast<int> (Label::backgroundColourId));
1✔
1547
    classLabel.attr ("textColourId") = py::int_ (static_cast<int> (Label::textColourId));
1✔
1548
    classLabel.attr ("outlineColourId") = py::int_ (static_cast<int> (Label::outlineColourId));
1✔
1549
    classLabel.attr ("backgroundWhenEditingColourId") = py::int_ (static_cast<int> (Label::backgroundWhenEditingColourId));
1✔
1550
    classLabel.attr ("textWhenEditingColourId") = py::int_ (static_cast<int> (Label::textWhenEditingColourId));
1✔
1551
    classLabel.attr ("outlineWhenEditingColourId") = py::int_ (static_cast<int> (Label::outlineWhenEditingColourId));
1✔
1552

1553
    // ============================================================================================ juce::Label
1554

1555
    py::class_<TextEditor, TextInputTarget, Component, PyTextEditor<>> classTextEditor (m, "TextEditor", py::multiple_inheritance());
2✔
1556
    py::class_<TextEditor::Listener, PyTextEditorListener> classTextEditorListener (classTextEditor, "Listener");
2✔
1557
    py::class_<TextEditor::InputFilter, PyTextEditorInputFilter<>> classTextEditorInputFilter (classTextEditor, "InputFilter");
2✔
1558
    py::class_<TextEditor::LengthAndCharacterRestriction, TextEditor::InputFilter, PyTextEditorInputFilter<TextEditor::LengthAndCharacterRestriction>>
1559
        classTextEditorLengthAndCharacterRestriction (classTextEditor, "LengthAndCharacterRestriction");
2✔
1560

1561
    classTextEditorListener
1562
        .def (py::init<>())
1✔
1563
        .def ("textEditorTextChanged", &TextEditor::Listener::textEditorTextChanged)
1✔
1564
        .def ("textEditorReturnKeyPressed", &TextEditor::Listener::textEditorReturnKeyPressed)
1✔
1565
        .def ("textEditorEscapeKeyPressed", &TextEditor::Listener::textEditorEscapeKeyPressed)
1✔
1566
        .def ("textEditorFocusLost", &TextEditor::Listener::textEditorFocusLost)
1✔
1567
    ;
1568

1569
    classTextEditorInputFilter
1570
        .def (py::init<>())
1✔
1571
        .def ("filterNewText", &TextEditor::InputFilter::filterNewText)
1✔
1572
    ;
1573

1574
    classTextEditorLengthAndCharacterRestriction
1575
        .def (py::init<int, const String&>())
1✔
1576
    ;
1577

1578
    classTextEditor
1579
        .def (py::init<const String&, juce_wchar>(), "componentName"_a = String(), "passwordCharacter"_a = L'\0')
2✔
1580
    //.def (py::init([](const String& componentName, const String& passwordCharacter)
1581
    //    { return new TextEditor (componentName, passwordCharacter.isNotEmpty() ? passwordCharacter[0] : 0); }),
1582
    //    "componentName"_a = String(), "passwordCharacter"_a = "\0")
1583
        .def ("setMultiLine", &TextEditor::setMultiLine, "shouldBeMultiLine"_a, "shouldWordWrap"_a = true)
2✔
1584
        .def ("isMultiLine", &TextEditor::isMultiLine)
1✔
1585
        .def ("setReturnKeyStartsNewLine", &TextEditor::setReturnKeyStartsNewLine)
1✔
1586
        .def ("getReturnKeyStartsNewLine", &TextEditor::getReturnKeyStartsNewLine)
1✔
1587
        .def ("setTabKeyUsedAsCharacter", &TextEditor::setTabKeyUsedAsCharacter)
1✔
1588
        .def ("isTabKeyUsedAsCharacter", &TextEditor::isTabKeyUsedAsCharacter)
1✔
1589
        .def ("setEscapeAndReturnKeysConsumed", &TextEditor::setEscapeAndReturnKeysConsumed)
1✔
1590
        .def ("setReadOnly", &TextEditor::setReadOnly)
1✔
1591
        .def ("isReadOnly", &TextEditor::isReadOnly)
1✔
1592
        .def ("setCaretVisible", &TextEditor::setCaretVisible)
1✔
1593
        .def ("isCaretVisible", &TextEditor::isCaretVisible)
1✔
1594
        .def ("setScrollbarsShown", &TextEditor::setScrollbarsShown)
1✔
1595
        .def ("areScrollbarsShown", &TextEditor::areScrollbarsShown)
1✔
1596
    //.def ("setPasswordCharacter", &TextEditor::setPasswordCharacter)
1597
    //.def ("getPasswordCharacter", &TextEditor::getPasswordCharacter)
1598
        .def ("setPopupMenuEnabled", &TextEditor::setPopupMenuEnabled)
1✔
1599
        .def ("isPopupMenuEnabled", &TextEditor::isPopupMenuEnabled)
1✔
1600
        .def ("isPopupMenuCurrentlyActive", &TextEditor::isPopupMenuCurrentlyActive)
1✔
1601
        .def ("setFont", &TextEditor::setFont)
1✔
1602
        .def ("applyFontToAllText", &TextEditor::applyFontToAllText, "newFont"_a, "changeCurrentFont"_a = true)
2✔
1603
        .def ("getFont", &TextEditor::getFont)
1✔
1604
        .def ("applyColourToAllText", &TextEditor::applyColourToAllText, "newColour"_a, "changeCurrentTextColour"_a = true)
2✔
1605
        .def ("setWhitespaceUnderlined", &TextEditor::setWhitespaceUnderlined)
1✔
1606
        .def ("isWhitespaceUnderlined", &TextEditor::isWhitespaceUnderlined)
1✔
1607
        .def ("setSelectAllWhenFocused", &TextEditor::setSelectAllWhenFocused)
1✔
1608
        .def ("setTextToShowWhenEmpty", &TextEditor::setTextToShowWhenEmpty)
1✔
1609
        .def ("getTextToShowWhenEmpty", &TextEditor::getTextToShowWhenEmpty)
1✔
1610
        .def ("setScrollBarThickness", &TextEditor::setScrollBarThickness)
1✔
1611
        .def ("addListener", &TextEditor::addListener)
1✔
1612
        .def ("removeListener", &TextEditor::removeListener)
1✔
1613
        .def_readwrite ("onTextChange", &TextEditor::onTextChange)
1✔
1614
        .def_readwrite ("onReturnKey", &TextEditor::onReturnKey)
1✔
1615
        .def_readwrite ("onEscapeKey", &TextEditor::onEscapeKey)
1✔
1616
        .def_readwrite ("onFocusLost", &TextEditor::onFocusLost)
1✔
1617
        .def ("getText", &TextEditor::getText)
1✔
1618
        .def ("getTextInRange", &TextEditor::getTextInRange)
1✔
1619
        .def ("isEmpty", &TextEditor::isEmpty)
1✔
1620
        .def ("setText", &TextEditor::setText, "newText"_a, "sendTextChangeMessage"_a = true)
2✔
1621
        .def ("getTextValue", &TextEditor::getTextValue)
1✔
1622
        .def ("insertTextAtCaret", &TextEditor::insertTextAtCaret)
1✔
1623
        .def ("clear", &TextEditor::clear)
1✔
1624
        .def ("cut", &TextEditor::cut)
1✔
1625
        .def ("copy", &TextEditor::copy)
1✔
1626
        .def ("paste", &TextEditor::paste)
1✔
1627
        .def ("getCaretPosition", &TextEditor::getCaretPosition)
1✔
1628
        .def ("setCaretPosition", &TextEditor::setCaretPosition)
1✔
1629
        .def ("scrollEditorToPositionCaret", &TextEditor::scrollEditorToPositionCaret)
1✔
1630
        .def ("getCaretRectangleForCharIndex", &TextEditor::getCaretRectangleForCharIndex)
1✔
1631
        .def ("setHighlightedRegion", &TextEditor::setHighlightedRegion)
1✔
1632
        .def ("getHighlightedRegion", &TextEditor::getHighlightedRegion)
1✔
1633
        .def ("getHighlightedText", &TextEditor::getHighlightedText)
1✔
1634
    //.def ("getTextIndexAt", &TextEditor::getTextIndexAt)
1635
    //.def ("getTextIndexAt", &TextEditor::getTextIndexAt)
1636
        .def ("getCharIndexForPoint", &TextEditor::getCharIndexForPoint)
1✔
1637
        .def ("getTotalNumChars", &TextEditor::getTotalNumChars)
1✔
1638
        .def ("getTextWidth", &TextEditor::getTextWidth)
1✔
1639
        .def ("getTextHeight", &TextEditor::getTextHeight)
1✔
1640
        .def ("setIndents", &TextEditor::setIndents)
1✔
1641
        .def ("getTopIndent", &TextEditor::getTopIndent)
1✔
1642
        .def ("getLeftIndent", &TextEditor::getLeftIndent)
1✔
1643
        .def ("setBorder", &TextEditor::setBorder)
1✔
1644
        .def ("getBorder", &TextEditor::getBorder)
1✔
1645
        .def ("setScrollToShowCursor", &TextEditor::setScrollToShowCursor)
1✔
1646
        .def ("setJustification", &TextEditor::setJustification)
1✔
1647
        .def ("setJustification", [](TextEditor& self, Justification::Flags flags) { self.setJustification (flags); })
1✔
1648
        .def ("setJustification", [](TextEditor& self, int flags) { self.setJustification (Justification (flags)); })
1✔
1649
        .def ("getJustificationType", &TextEditor::getJustificationType)
1✔
1650
        .def ("setLineSpacing", &TextEditor::setLineSpacing)
1✔
1651
        .def ("getLineSpacing", &TextEditor::getLineSpacing)
1✔
1652
        .def ("getTextBounds", &TextEditor::getTextBounds)
1✔
1653
        .def ("moveCaretToEnd", py::overload_cast<> (&TextEditor::moveCaretToEnd))
1✔
1654
        .def ("moveCaretLeft", &TextEditor::moveCaretLeft)
1✔
1655
        .def ("moveCaretRight", &TextEditor::moveCaretRight)
1✔
1656
        .def ("moveCaretUp", &TextEditor::moveCaretUp)
1✔
1657
        .def ("moveCaretDown", &TextEditor::moveCaretDown)
1✔
1658
        .def ("pageUp", &TextEditor::pageUp)
1✔
1659
        .def ("pageDown", &TextEditor::pageDown)
1✔
1660
        .def ("scrollDown", &TextEditor::scrollDown)
1✔
1661
        .def ("scrollUp", &TextEditor::scrollUp)
1✔
1662
        .def ("moveCaretToTop", &TextEditor::moveCaretToTop)
1✔
1663
        .def ("moveCaretToStartOfLine", &TextEditor::moveCaretToStartOfLine)
1✔
1664
        .def ("moveCaretToEnd", py::overload_cast<bool> (&TextEditor::moveCaretToEnd))
1✔
1665
        .def ("moveCaretToEndOfLine", &TextEditor::moveCaretToEndOfLine)
1✔
1666
        .def ("deleteBackwards", &TextEditor::deleteBackwards)
1✔
1667
        .def ("deleteForwards", &TextEditor::deleteForwards)
1✔
1668
        .def ("copyToClipboard", &TextEditor::copyToClipboard)
1✔
1669
        .def ("cutToClipboard", &TextEditor::cutToClipboard)
1✔
1670
        .def ("pasteFromClipboard", &TextEditor::pasteFromClipboard)
1✔
1671
        .def ("selectAll", &TextEditor::selectAll)
1✔
1672
        .def ("undo", &TextEditor::undo)
1✔
1673
        .def ("redo", &TextEditor::redo)
1✔
1674
    //.def ("addPopupMenuItems", &TextEditor::addPopupMenuItems)
1675
    //.def ("performPopupMenuAction", &TextEditor::performPopupMenuAction)
1676
        .def ("setInputFilter", &TextEditor::setInputFilter)
1✔
1677
        .def ("getInputFilter", &TextEditor::getInputFilter, py::return_value_policy::reference)
1✔
1678
        .def ("setInputRestrictions", &TextEditor::setInputRestrictions, "maxTextLength"_a, "allowedCharacters"_a = String())
2✔
1679
    //.def ("setKeyboardType", &TextEditor::setKeyboardType)
1680
        .def ("setClicksOutsideDismissVirtualKeyboard", &TextEditor::setClicksOutsideDismissVirtualKeyboard)
1✔
1681
        .def ("getClicksOutsideDismissVirtualKeyboard", &TextEditor::getClicksOutsideDismissVirtualKeyboard)
1✔
1682
    ;
1683

1684
    // ============================================================================================ juce::GroupComponent
1685

1686
    py::class_<GroupComponent, PyComponent<GroupComponent>> classGroupComponent (m, "GroupComponent");
2✔
1687

1688
    classGroupComponent
1689
        .def (py::init<const String&, const String&>(), "componentName"_a, "labelText"_a)
1✔
1690
        .def ("setText", &GroupComponent::setText, "newText"_a)
1✔
1691
        .def ("getText", &GroupComponent::getText)
1✔
1692
        .def ("setTextLabelPosition", &GroupComponent::setTextLabelPosition, "justification"_a)
1✔
1693
        .def ("setTextLabelPosition", [](GroupComponent& self, Justification::Flags flags) { self.setTextLabelPosition (flags); }, "justification"_a)
1✔
1694
        .def ("setTextLabelPosition", [](GroupComponent& self, int flags) { self.setTextLabelPosition (Justification (flags)); }, "justification"_a)
1✔
1695
        .def ("getTextLabelPosition", &GroupComponent::getTextLabelPosition)
1✔
1696
    ;
1697

1698
    classGroupComponent.attr ("outlineColourId") = py::int_ (static_cast<int> (GroupComponent::outlineColourId));
1✔
1699
    classGroupComponent.attr ("textColourId") = py::int_ (static_cast<int> (GroupComponent::textColourId));
1✔
1700

1701
    // ============================================================================================ juce::ListBox
1702

1703
    py::class_<ListBoxModel, PyListBoxModel> classListBoxModel (m, "ListBoxModel");
2✔
1704

1705
    classListBoxModel
1706
        .def (py::init<>())
1✔
1707
        .def ("getNumRows", &ListBoxModel::getNumRows)
1✔
1708
        .def ("paintListBoxItem", &ListBoxModel::paintListBoxItem)
1✔
1709
        .def ("refreshComponentForRow", &ListBoxModel::refreshComponentForRow, py::return_value_policy::reference_internal)
1✔
1710
        .def ("getNameForRow", &ListBoxModel::getNameForRow)
1✔
1711
        .def ("listBoxItemClicked", &ListBoxModel::listBoxItemClicked)
1✔
1712
        .def ("listBoxItemDoubleClicked", &ListBoxModel::listBoxItemDoubleClicked)
1✔
1713
        .def ("backgroundClicked", &ListBoxModel::backgroundClicked)
1✔
1714
        .def ("selectedRowsChanged", &ListBoxModel::selectedRowsChanged)
1✔
1715
        .def ("deleteKeyPressed", &ListBoxModel::deleteKeyPressed)
1✔
1716
        .def ("returnKeyPressed", &ListBoxModel::returnKeyPressed)
1✔
1717
        .def ("listWasScrolled", &ListBoxModel::listWasScrolled)
1✔
1718
        .def ("getDragSourceDescription", &ListBoxModel::getDragSourceDescription)
1✔
1719
        .def ("mayDragToExternalWindows", &ListBoxModel::mayDragToExternalWindows)
1✔
1720
        .def ("getTooltipForRow", &ListBoxModel::getTooltipForRow)
1✔
1721
        .def ("getMouseCursorForRow", &ListBoxModel::getMouseCursorForRow)
1✔
1722
    ;
1723

1724
    py::class_<ListBox, Component, PyListBox<>> classListBox (m, "ListBox");
2✔
1725

1726
    classListBox
1727
        .def (py::init<const String&, ListBoxModel*>(), "componentName"_a = String(), "model"_a = nullptr)
2✔
1728
        .def ("setModel", &ListBox::setModel)
1✔
1729
        .def ("getListBoxModel", &ListBox::getListBoxModel, py::return_value_policy::reference)
1✔
1730
        .def ("updateContent", &ListBox::updateContent)
1✔
1731
        .def ("setMultipleSelectionEnabled", &ListBox::setMultipleSelectionEnabled)
1✔
1732
        .def ("setClickingTogglesRowSelection", &ListBox::setClickingTogglesRowSelection)
1✔
1733
        .def ("setRowSelectedOnMouseDown", &ListBox::setRowSelectedOnMouseDown)
1✔
1734
        .def ("getRowSelectedOnMouseDown", &ListBox::getRowSelectedOnMouseDown)
1✔
1735
        .def ("setMouseMoveSelectsRows", &ListBox::setMouseMoveSelectsRows)
1✔
1736
        .def ("selectRow", &ListBox::selectRow, "rowNumber"_a, "dontScrollToShowThisRow"_a = false, "deselectOthersFirst"_a = true)
2✔
1737
        .def ("selectRangeOfRows", &ListBox::selectRangeOfRows, "firstRow"_a, "lastRow"_a, "dontScrollToShowThisRange"_a = false)
2✔
1738
        .def ("deselectRow", &ListBox::deselectRow)
1✔
1739
        .def ("deselectAllRows", &ListBox::deselectAllRows)
1✔
1740
        .def ("flipRowSelection", &ListBox::flipRowSelection)
1✔
1741
        .def ("getSelectedRows", &ListBox::getSelectedRows)
1✔
1742
        .def ("setSelectedRows", py::overload_cast<const SparseSet<int>&, NotificationType> (&ListBox::setSelectedRows), "setOfRowsToBeSelected"_a, "sendNotificationEventToModel"_a = sendNotification)
2✔
1743
        .def ("isRowSelected", &ListBox::isRowSelected)
1✔
1744
        .def ("getNumSelectedRows", &ListBox::getNumSelectedRows)
1✔
1745
        .def ("getSelectedRow", &ListBox::getSelectedRow, "index"_a = 0)
2✔
1746
        .def ("getLastRowSelected", &ListBox::getLastRowSelected)
1✔
1747
        .def ("selectRowsBasedOnModifierKeys", &ListBox::selectRowsBasedOnModifierKeys)
1✔
1748
        .def ("setVerticalPosition", &ListBox::setVerticalPosition)
1✔
1749
        .def ("getVerticalPosition", &ListBox::getVerticalPosition)
1✔
1750
        .def ("scrollToEnsureRowIsOnscreen", &ListBox::scrollToEnsureRowIsOnscreen)
1✔
1751
    //.def ("getVerticalScrollBar", &ListBox::getVerticalScrollBar, py::return_value_policy::reference_internal)
1752
    //.def ("getHorizontalScrollBar", &ListBox::getHorizontalScrollBar, py::return_value_policy::reference_internal)
1753
        .def ("getRowContainingPosition", &ListBox::getRowContainingPosition)
1✔
1754
        .def ("getInsertionIndexForPosition", &ListBox::getInsertionIndexForPosition)
1✔
1755
        .def ("getRowPosition", &ListBox::getRowPosition)
1✔
1756
        .def ("getComponentForRowNumber", &ListBox::getComponentForRowNumber, py::return_value_policy::reference_internal)
1✔
1757
        .def ("getRowNumberOfComponent", &ListBox::getRowNumberOfComponent)
1✔
1758
        .def ("getVisibleRowWidth", &ListBox::getVisibleRowWidth)
1✔
1759
        .def ("setRowHeight", &ListBox::setRowHeight)
1✔
1760
        .def ("getRowHeight", &ListBox::getRowHeight)
1✔
1761
        .def ("getNumRowsOnScreen", &ListBox::getNumRowsOnScreen)
1✔
1762
        .def ("setOutlineThickness", &ListBox::setOutlineThickness)
1✔
1763
        .def ("getOutlineThickness", &ListBox::getOutlineThickness)
1✔
1764
    //.def ("setHeaderComponent", &ListBox::setHeaderComponent)
1765
    //.def ("getHeaderComponent", &ListBox::getHeaderComponent, py::return_value_policy::reference_internal)
1766
        .def ("setMinimumContentWidth", &ListBox::setMinimumContentWidth)
1✔
1767
        .def ("getVisibleContentWidth", &ListBox::getVisibleContentWidth)
1✔
1768
        .def ("repaintRow", &ListBox::repaintRow)
1✔
1769
    //.def ("createSnapshotOfRows", &ListBox::createSnapshotOfRows)
1770
    //.def ("getViewport", &ListBox::getViewport, py::return_value_policy::reference_internal)
1771
    ;
1772

1773
    classListBox.attr ("backgroundColourId") = py::int_ (static_cast<int> (ListBox::backgroundColourId));
1✔
1774
    classListBox.attr ("outlineColourId") = py::int_ (static_cast<int> (ListBox::outlineColourId));
1✔
1775
    classListBox.attr ("textColourId") = py::int_ (static_cast<int> (ListBox::textColourId));
1✔
1776

1777
    // ============================================================================================ juce::TableHeaderComponent
1778

1779
    py::class_<TableHeaderComponent, Component, PyTableHeaderComponent<>> classTableHeaderComponent (m, "TableHeaderComponent");
2✔
1780

1781
    Helpers::makeArithmeticEnum<TableHeaderComponent::ColumnPropertyFlags> (classTableHeaderComponent, "ColumnPropertyFlags")
2✔
1782
        .value ("visible", TableHeaderComponent::ColumnPropertyFlags::visible)
1✔
1783
        .value ("resizable", TableHeaderComponent::ColumnPropertyFlags::resizable)
1✔
1784
        .value ("draggable", TableHeaderComponent::ColumnPropertyFlags::draggable)
1✔
1785
        .value ("appearsOnColumnMenu", TableHeaderComponent::ColumnPropertyFlags::appearsOnColumnMenu)
1✔
1786
        .value ("sortable", TableHeaderComponent::ColumnPropertyFlags::sortable)
1✔
1787
        .value ("sortedForwards", TableHeaderComponent::ColumnPropertyFlags::sortedForwards)
1✔
1788
        .value ("sortedBackwards", TableHeaderComponent::ColumnPropertyFlags::sortedBackwards)
1✔
1789
        .value ("defaultFlags", TableHeaderComponent::ColumnPropertyFlags::defaultFlags)
1✔
1790
        .value ("notResizable", TableHeaderComponent::ColumnPropertyFlags::notResizable)
1✔
1791
        .value ("notResizableOrSortable", TableHeaderComponent::ColumnPropertyFlags::notResizableOrSortable)
1✔
1792
        .value ("notSortable", TableHeaderComponent::ColumnPropertyFlags::notSortable)
1✔
1793
        .export_values();
1✔
1794

1795
    py::class_<TableHeaderComponent::Listener, PyTableHeaderComponentListener> classTableHeaderComponentListener (classTableHeaderComponent, "Listener");
2✔
1796

1797
    classTableHeaderComponentListener
1798
        .def (py::init<>())
1✔
1799
        // TODO
1800
    ;
1801

1802
    classTableHeaderComponent
1803
        .def (py::init<>())
1✔
1804
        .def ("addColumn", &TableHeaderComponent::addColumn,
×
1805
            "columnName"_a, "columnId"_a, "width"_a, "minimumWidth"_a = 30, "maximumWidth"_a = -1, "propertyFlags"_a = TableHeaderComponent::defaultFlags, "insertIndex"_a = -1)
2✔
1806
        .def ("addColumn", [](TableHeaderComponent& self, const String& columnName, int columnId, int width, int minimumWidth, int maximumWidth, TableHeaderComponent::ColumnPropertyFlags propertyFlags, int insertIndex)
×
1807
        {
1808
            self.addColumn (columnName, columnId, width, minimumWidth, maximumWidth, static_cast<int> (propertyFlags), insertIndex);
×
1809
        }, "columnName"_a, "columnId"_a, "width"_a, "minimumWidth"_a = 30, "maximumWidth"_a = -1, "propertyFlags"_a = TableHeaderComponent::defaultFlags, "insertIndex"_a = -1)
2✔
1810
        .def ("removeColumn", &TableHeaderComponent::removeColumn)
1✔
1811
        .def ("removeAllColumns", &TableHeaderComponent::removeAllColumns)
1✔
1812
        .def ("getNumColumns", &TableHeaderComponent::getNumColumns)
1✔
1813
        .def ("getColumnName", &TableHeaderComponent::getColumnName)
1✔
1814
        .def ("setColumnName", &TableHeaderComponent::setColumnName)
1✔
1815
        .def ("moveColumn", &TableHeaderComponent::moveColumn)
1✔
1816
        .def ("getColumnWidth", &TableHeaderComponent::getColumnWidth)
1✔
1817
        .def ("setColumnWidth", &TableHeaderComponent::setColumnWidth)
1✔
1818
        .def ("setColumnVisible", &TableHeaderComponent::setColumnVisible)
1✔
1819
        .def ("isColumnVisible", &TableHeaderComponent::isColumnVisible)
1✔
1820
        .def ("setSortColumnId", &TableHeaderComponent::setSortColumnId)
1✔
1821
        .def ("getSortColumnId", &TableHeaderComponent::getSortColumnId)
1✔
1822
        .def ("isSortedForwards", &TableHeaderComponent::isSortedForwards)
1✔
1823
        .def ("reSortTable", &TableHeaderComponent::reSortTable)
1✔
1824
        .def ("getTotalWidth", &TableHeaderComponent::getTotalWidth)
1✔
1825
        .def ("getIndexOfColumnId", &TableHeaderComponent::getIndexOfColumnId)
1✔
1826
        .def ("getColumnIdOfIndex", &TableHeaderComponent::getColumnIdOfIndex)
1✔
1827
        .def ("getColumnPosition", &TableHeaderComponent::getColumnPosition)
1✔
1828
        .def ("getColumnIdAtX", &TableHeaderComponent::getColumnIdAtX)
1✔
1829
        .def ("setStretchToFitActive", &TableHeaderComponent::setStretchToFitActive)
1✔
1830
        .def ("isStretchToFitActive", &TableHeaderComponent::isStretchToFitActive)
1✔
1831
        .def ("resizeAllColumnsToFit", &TableHeaderComponent::resizeAllColumnsToFit)
1✔
1832
        .def ("setPopupMenuActive", &TableHeaderComponent::setPopupMenuActive)
1✔
1833
        .def ("isPopupMenuActive", &TableHeaderComponent::isPopupMenuActive)
1✔
1834
        .def ("toString", &TableHeaderComponent::toString)
1✔
1835
        .def ("restoreFromString", &TableHeaderComponent::restoreFromString)
1✔
1836
        .def ("addListener", &TableHeaderComponent::addListener)
1✔
1837
        .def ("removeListener", &TableHeaderComponent::removeListener)
1✔
1838
        .def ("columnClicked", &TableHeaderComponent::columnClicked)
1✔
1839
    //.def ("addMenuItems", &TableHeaderComponent::addMenuItems)
1840
        .def ("reactToMenuItem", &TableHeaderComponent::reactToMenuItem)
1✔
1841
        .def ("showColumnChooserMenu", &TableHeaderComponent::showColumnChooserMenu)
1✔
1842
    ;
1843

1844
    classTableHeaderComponent.attr ("textColourId") = py::int_ (static_cast<int> (TableHeaderComponent::textColourId));
1✔
1845
    classTableHeaderComponent.attr ("backgroundColourId") = py::int_ (static_cast<int> (TableHeaderComponent::backgroundColourId));
1✔
1846
    classTableHeaderComponent.attr ("outlineColourId") = py::int_ (static_cast<int> (TableHeaderComponent::outlineColourId));
1✔
1847
    classTableHeaderComponent.attr ("highlightColourId") = py::int_ (static_cast<int> (TableHeaderComponent::highlightColourId));
1✔
1848

1849
    // ============================================================================================ juce::TableListBox
1850

1851
    py::class_<TableListBoxModel, PyTableListBoxModel> classTableListBoxModel (m, "TableListBoxModel");
2✔
1852

1853
    classTableListBoxModel
1854
        .def (py::init<>())
1✔
1855
        // TODO
1856
    ;
1857

1858
    py::class_<TableListBox, ListBox, PyListBox<TableListBox>> classTableListBox (m, "TableListBox");
2✔
1859

1860
    classTableListBox
1861
        .def (py::init<const String&, TableListBoxModel*>(), "componentName"_a = String(), "model"_a = nullptr)
2✔
1862
        .def ("setModel", &TableListBox::setModel)
1✔
1863
        .def ("getTableListBoxModel", &TableListBox::getTableListBoxModel, py::return_value_policy::reference)
1✔
1864
        .def ("getHeader", &TableListBox::getHeader, py::return_value_policy::reference_internal)
1✔
1865
        .def ("setHeader", [](TableListBox& self, py::object header)
×
1866
        {
1867
            if (header.is_none() || ! py::isinstance<TableHeaderComponent> (header))
×
1868
                py::pybind11_fail ("Invalid specified message type in \"TableListBox::setHeader\"");
×
1869

1870
            self.setHeader (std::unique_ptr<TableHeaderComponent> (header.release().cast<TableHeaderComponent*>()));
×
1871
        })
1✔
1872
        .def ("setHeaderHeight", &TableListBox::setHeaderHeight)
1✔
1873
        .def ("getHeaderHeight", &TableListBox::getHeaderHeight)
1✔
1874
        .def ("autoSizeColumn", &TableListBox::autoSizeColumn)
1✔
1875
        .def ("autoSizeAllColumns", &TableListBox::autoSizeAllColumns)
1✔
1876
        .def ("setAutoSizeMenuOptionShown", &TableListBox::setAutoSizeMenuOptionShown)
1✔
1877
        .def ("isAutoSizeMenuOptionShown", &TableListBox::isAutoSizeMenuOptionShown)
1✔
1878
        .def ("getCellPosition", &TableListBox::getCellPosition)
1✔
1879
        .def ("getCellComponent", &TableListBox::getCellComponent, py::return_value_policy::reference)
1✔
1880
        .def ("scrollToEnsureColumnIsOnscreen", &TableListBox::scrollToEnsureColumnIsOnscreen)
1✔
1881
    ;
1882

1883
    // ============================================================================================ juce::Slider
1884

1885
    py::class_<Slider, Component, PySlider<>> classSlider (m, "Slider");
2✔
1886

1887
    py::enum_<Slider::SliderStyle> (classSlider, "SliderStyle")
2✔
1888
        .value ("LinearHorizontal", Slider::SliderStyle::LinearHorizontal)
1✔
1889
        .value ("LinearVertical", Slider::SliderStyle::LinearVertical)
1✔
1890
        .value ("LinearBar", Slider::SliderStyle::LinearBar)
1✔
1891
        .value ("LinearBarVertical", Slider::SliderStyle::LinearBarVertical)
1✔
1892
        .value ("Rotary", Slider::SliderStyle::Rotary)
1✔
1893
        .value ("RotaryHorizontalDrag", Slider::SliderStyle::RotaryHorizontalDrag)
1✔
1894
        .value ("RotaryVerticalDrag", Slider::SliderStyle::RotaryVerticalDrag)
1✔
1895
        .value ("RotaryHorizontalVerticalDrag", Slider::SliderStyle::RotaryHorizontalVerticalDrag)
1✔
1896
        .value ("IncDecButtons", Slider::SliderStyle::IncDecButtons)
1✔
1897
        .value ("TwoValueHorizontal", Slider::SliderStyle::TwoValueHorizontal)
1✔
1898
        .value ("TwoValueVertical", Slider::SliderStyle::TwoValueVertical)
1✔
1899
        .value ("ThreeValueHorizontal", Slider::SliderStyle::ThreeValueHorizontal)
1✔
1900
        .value ("ThreeValueVertical", Slider::SliderStyle::ThreeValueVertical)
1✔
1901
        .export_values();
1✔
1902

1903
    py::enum_<Slider::TextEntryBoxPosition> (classSlider, "TextEntryBoxPosition")
2✔
1904
        .value ("NoTextBox", Slider::TextEntryBoxPosition::NoTextBox)
1✔
1905
        .value ("TextBoxLeft", Slider::TextEntryBoxPosition::TextBoxLeft)
1✔
1906
        .value ("TextBoxRight", Slider::TextEntryBoxPosition::TextBoxRight)
1✔
1907
        .value ("TextBoxAbove", Slider::TextEntryBoxPosition::TextBoxAbove)
1✔
1908
        .value ("TextBoxBelow", Slider::TextEntryBoxPosition::TextBoxBelow)
1✔
1909
        .export_values();
1✔
1910

1911
    py::enum_<Slider::DragMode> (classSlider, "DragMode")
2✔
1912
        .value ("notDragging", Slider::DragMode::notDragging)
1✔
1913
        .value ("absoluteDrag", Slider::DragMode::absoluteDrag)
1✔
1914
        .value ("velocityDrag", Slider::DragMode::velocityDrag)
1✔
1915
        .export_values();
1✔
1916

1917
    py::enum_<Slider::IncDecButtonMode> (classSlider, "IncDecButtonMode")
2✔
1918
        .value ("incDecButtonsNotDraggable", Slider::IncDecButtonMode::incDecButtonsNotDraggable)
1✔
1919
        .value ("incDecButtonsDraggable_AutoDirection", Slider::IncDecButtonMode::incDecButtonsDraggable_AutoDirection)
1✔
1920
        .value ("incDecButtonsDraggable_Horizontal", Slider::IncDecButtonMode::incDecButtonsDraggable_Horizontal)
1✔
1921
        .value ("incDecButtonsDraggable_Vertical", Slider::IncDecButtonMode::incDecButtonsDraggable_Vertical)
1✔
1922
        .export_values();
1✔
1923

1924
    py::class_<Slider::Listener, PySliderListener> classSliderListener (classSlider, "Listener");
2✔
1925

1926
    classSliderListener
1927
        .def (py::init<>())
1✔
1928
        .def ("sliderValueChanged", &Slider::Listener::sliderValueChanged)
1✔
1929
        .def ("sliderDragStarted", &Slider::Listener::sliderDragStarted)
1✔
1930
        .def ("sliderDragEnded", &Slider::Listener::sliderDragEnded)
1✔
1931
    ;
1932

1933
    py::class_<Slider::RotaryParameters> classSliderRotaryParameters (classSlider, "RotaryParameters");
2✔
1934

1935
    classSliderRotaryParameters
1936
        .def (py::init<>())
1✔
1937
        .def_readwrite ("startAngleRadians", &Slider::RotaryParameters::startAngleRadians)
1✔
1938
        .def_readwrite ("endAngleRadians", &Slider::RotaryParameters::endAngleRadians)
1✔
1939
        .def_readwrite ("stopAtEnd", &Slider::RotaryParameters::stopAtEnd)
1✔
1940
    ;
1941

1942
    py::class_<Slider::SliderLayout> classSliderSliderLayout (classSlider, "SliderLayout");
2✔
1943

1944
    classSliderSliderLayout
1945
        .def (py::init<>())
1✔
1946
        .def_readwrite ("sliderBounds", &Slider::SliderLayout::sliderBounds)
1✔
1947
        .def_readwrite ("textBoxBounds", &Slider::SliderLayout::textBoxBounds)
1✔
1948
    ;
1949

1950
    classSlider
1951
        .def (py::init<>())
1✔
1952
        .def (py::init<const String&>(), "componentName"_a)
1✔
1953
        .def (py::init<Slider::SliderStyle, Slider::TextEntryBoxPosition>(), "style"_a, "textBoxPosition"_a)
1✔
1954
        .def ("setSliderStyle", &Slider::setSliderStyle, "newStyle"_a)
1✔
1955
        .def ("getSliderStyle", &Slider::getSliderStyle)
1✔
1956
        .def ("setRotaryParameters", py::overload_cast<Slider::RotaryParameters> (&Slider::setRotaryParameters), "newParameters"_a)
1✔
1957
        .def ("setRotaryParameters", py::overload_cast<float, float, bool> (&Slider::setRotaryParameters), "startAngleRadians"_a, "endAngleRadians"_a, "stopAtEnd"_a)
1✔
1958
        .def ("getRotaryParameters", &Slider::getRotaryParameters)
1✔
1959
        .def ("setMouseDragSensitivity", &Slider::setMouseDragSensitivity, "distanceForFullScaleDrag"_a)
1✔
1960
        .def ("getMouseDragSensitivity", &Slider::getMouseDragSensitivity)
1✔
1961
        .def ("setVelocityBasedMode", &Slider::setVelocityBasedMode, "isVelocityBased"_a)
1✔
1962
        .def ("getVelocityBasedMode", &Slider::getVelocityBasedMode)
1✔
1963
        .def ("setVelocityModeParameters", &Slider::setVelocityModeParameters,
×
1964
            "sensitivity"_a = 1.0, "threshold"_a = 1, "offset"_a = 0.0, "userCanPressKeyToSwapMode"_a = true, "modifiersToSwapModes"_a = ModifierKeys::ctrlAltCommandModifiers)
2✔
1965
        .def ("getVelocitySensitivity", &Slider::getVelocitySensitivity)
1✔
1966
        .def ("getVelocityThreshold", &Slider::getVelocityThreshold)
1✔
1967
        .def ("getVelocityOffset", &Slider::getVelocityOffset)
1✔
1968
        .def ("getVelocityModeIsSwappable", &Slider::getVelocityModeIsSwappable)
1✔
1969
        .def ("setSkewFactor", &Slider::setSkewFactor, "factor"_a, "symmetricSkew"_a = false)
2✔
1970
        .def ("setSkewFactorFromMidPoint", &Slider::setSkewFactorFromMidPoint, "sliderValueToShowAtMidPoint"_a)
1✔
1971
        .def ("getSkewFactor", &Slider::getSkewFactor)
1✔
1972
        .def ("isSymmetricSkew", &Slider::isSymmetricSkew)
1✔
1973
        .def ("setIncDecButtonsMode", &Slider::setIncDecButtonsMode)
1✔
1974
        .def ("setTextBoxStyle", &Slider::setTextBoxStyle, "newPosition"_a, "isReadOnly"_a, "textEntryBoxWidth"_a, "textEntryBoxHeight"_a)
1✔
1975
        .def ("getTextBoxPosition", &Slider::getTextBoxPosition)
1✔
1976
        .def ("getTextBoxWidth", &Slider::getTextBoxWidth)
1✔
1977
        .def ("getTextBoxHeight", &Slider::getTextBoxHeight)
1✔
1978
        .def ("setTextBoxIsEditable", &Slider::setTextBoxIsEditable, "shouldBeEditable"_a)
1✔
1979
        .def ("isTextBoxEditable", &Slider::isTextBoxEditable)
1✔
1980
        .def ("showTextBox", &Slider::showTextBox)
1✔
1981
        .def ("hideTextBox", &Slider::hideTextBox, "discardCurrentEditorContents"_a)
1✔
1982
        .def ("setValue", py::overload_cast<double, NotificationType> (&Slider::setValue), "newValue"_a, "notification"_a = sendNotificationAsync)
2✔
1983
        .def ("getValue", &Slider::getValue)
1✔
1984
        .def ("getValueObject", &Slider::getValueObject, py::return_value_policy::reference_internal)
1✔
1985
        .def ("setRange", py::overload_cast<double, double, double> (&Slider::setRange), "newMinimum"_a, "newMaximum"_a, "newInterval"_a = 0.0)
2✔
1986
        .def ("setRange", py::overload_cast<Range<double>, double> (&Slider::setRange), "newRange"_a, "newInterval"_a)
1✔
1987
    //.def ("setNormalisableRange", &Slider::setNormalisableRange)
1988
    //.def ("getNormalisableRange", &Slider::getNormalisableRange)
1989
        .def ("getRange", &Slider::getRange)
1✔
1990
        .def ("getMaximum", &Slider::getMaximum)
1✔
1991
        .def ("getMinimum", &Slider::getMinimum)
1✔
1992
        .def ("getInterval", &Slider::getInterval)
1✔
1993
        .def ("getMinValue", &Slider::getMinValue)
1✔
1994
        .def ("getMinValueObject", &Slider::getMinValueObject, py::return_value_policy::reference_internal)
1✔
1995
        .def ("setMinValue", py::overload_cast<double, NotificationType, bool> (&Slider::setMinValue), "newValue"_a, "notification"_a = sendNotificationAsync, "allowNudgingOfOtherValues"_a = false)
2✔
1996
        .def ("getMaxValue", &Slider::getMaxValue)
1✔
1997
        .def ("getMaxValueObject", &Slider::getMaxValueObject, py::return_value_policy::reference_internal)
1✔
1998
        .def ("setMaxValue", py::overload_cast<double, NotificationType, bool> (&Slider::setMaxValue), "newValue"_a, "notification"_a = sendNotificationAsync, "allowNudgingOfOtherValues"_a = false)
2✔
1999
        .def ("setMinAndMaxValues", py::overload_cast<double, double, NotificationType> (&Slider::setMinAndMaxValues), "newMinValue"_a, "newMaxValue"_a, "notification"_a = sendNotificationAsync)
2✔
2000
        .def ("addListener", &Slider::addListener)
1✔
2001
        .def ("removeListener", &Slider::removeListener)
1✔
2002
        .def_readwrite ("onValueChange", &Slider::onValueChange)
1✔
2003
        .def_readwrite ("onDragStart", &Slider::onDragStart)
1✔
2004
        .def_readwrite ("onDragEnd", &Slider::onDragEnd)
1✔
2005
        .def_readwrite ("valueFromTextFunction", &Slider::valueFromTextFunction)
1✔
2006
        .def_readwrite ("textFromValueFunction", &Slider::textFromValueFunction)
1✔
2007
        .def ("setDoubleClickReturnValue", &Slider::setDoubleClickReturnValue)
1✔
2008
        .def ("getDoubleClickReturnValue", &Slider::getDoubleClickReturnValue)
1✔
2009
        .def ("isDoubleClickReturnEnabled", &Slider::isDoubleClickReturnEnabled)
1✔
2010
        .def ("setChangeNotificationOnlyOnRelease", &Slider::setChangeNotificationOnlyOnRelease)
1✔
2011
        .def ("setSliderSnapsToMousePosition", &Slider::setSliderSnapsToMousePosition)
1✔
2012
        .def ("getSliderSnapsToMousePosition", &Slider::getSliderSnapsToMousePosition)
1✔
2013
        .def ("setPopupDisplayEnabled", &Slider::setPopupDisplayEnabled)
1✔
2014
        .def ("getCurrentPopupDisplay", &Slider::getCurrentPopupDisplay, py::return_value_policy::reference)
1✔
2015
        .def ("setPopupMenuEnabled", &Slider::setPopupMenuEnabled)
1✔
2016
        .def ("setScrollWheelEnabled", &Slider::setScrollWheelEnabled)
1✔
2017
        .def ("isScrollWheelEnabled", &Slider::isScrollWheelEnabled)
1✔
2018
        .def ("getThumbBeingDragged", &Slider::getThumbBeingDragged)
1✔
2019
        .def ("startedDragging", &Slider::startedDragging)
1✔
2020
        .def ("stoppedDragging", &Slider::stoppedDragging)
1✔
2021
        .def ("valueChanged", &Slider::valueChanged)
1✔
2022
        .def ("getValueFromText", &Slider::getValueFromText)
1✔
2023
        .def ("getTextFromValue", &Slider::getTextFromValue)
1✔
2024
        .def ("setTextValueSuffix", &Slider::setTextValueSuffix)
1✔
2025
        .def ("getTextValueSuffix", &Slider::getTextValueSuffix)
1✔
2026
        .def ("getNumDecimalPlacesToDisplay", &Slider::getNumDecimalPlacesToDisplay)
1✔
2027
        .def ("setNumDecimalPlacesToDisplay", &Slider::setNumDecimalPlacesToDisplay)
1✔
2028
        .def ("proportionOfLengthToValue", &Slider::proportionOfLengthToValue)
1✔
2029
        .def ("valueToProportionOfLength", &Slider::valueToProportionOfLength)
1✔
2030
        .def ("getPositionOfValue", &Slider::getPositionOfValue)
1✔
2031
        .def ("snapValue", &Slider::snapValue)
1✔
2032
        .def ("updateText", &Slider::updateText)
1✔
2033
        .def ("isHorizontal", &Slider::isHorizontal)
1✔
2034
        .def ("isVertical", &Slider::isVertical)
1✔
2035
        .def ("isRotary", &Slider::isRotary)
1✔
2036
        .def ("isBar", &Slider::isBar)
1✔
2037
        .def ("isTwoValue", &Slider::isTwoValue)
1✔
2038
        .def ("isThreeValue", &Slider::isThreeValue)
1✔
2039
    ;
2040

2041
    classSlider.attr ("backgroundColourId") = py::int_ (static_cast<int> (Slider::backgroundColourId));
1✔
2042
    classSlider.attr ("thumbColourId") = py::int_ (static_cast<int> (Slider::thumbColourId));
1✔
2043
    classSlider.attr ("trackColourId") = py::int_ (static_cast<int> (Slider::trackColourId));
1✔
2044
    classSlider.attr ("rotarySliderFillColourId") = py::int_ (static_cast<int> (Slider::rotarySliderFillColourId));
1✔
2045
    classSlider.attr ("rotarySliderOutlineColourId") = py::int_ (static_cast<int> (Slider::rotarySliderOutlineColourId));
1✔
2046
    classSlider.attr ("textBoxTextColourId") = py::int_ (static_cast<int> (Slider::textBoxTextColourId));
1✔
2047
    classSlider.attr ("textBoxBackgroundColourId") = py::int_ (static_cast<int> (Slider::textBoxBackgroundColourId));
1✔
2048
    classSlider.attr ("textBoxHighlightColourId") = py::int_ (static_cast<int> (Slider::textBoxHighlightColourId));
1✔
2049
    classSlider.attr ("textBoxOutlineColourId") = py::int_ (static_cast<int> (Slider::textBoxOutlineColourId));
1✔
2050

2051
    // ============================================================================================ juce::TopLevelWindow
2052

2053
    py::class_<TopLevelWindow, Component, PyComponent<TopLevelWindow>> classTopLevelWindow (m, "TopLevelWindow");
2✔
2054

2055
    classTopLevelWindow
2056
        .def (py::init<const String&, bool>())
1✔
2057
        .def ("isActiveWindow", &TopLevelWindow::isActiveWindow)
1✔
2058
        .def ("centreAroundComponent", &TopLevelWindow::centreAroundComponent)
1✔
2059
        .def ("setDropShadowEnabled", &TopLevelWindow::setDropShadowEnabled)
1✔
2060
        .def ("isDropShadowEnabled", &TopLevelWindow::isDropShadowEnabled)
1✔
2061
        .def ("setUsingNativeTitleBar", &TopLevelWindow::setUsingNativeTitleBar)
1✔
2062
        .def ("isUsingNativeTitleBar", &TopLevelWindow::isUsingNativeTitleBar)
1✔
2063
        .def_static ("getNumTopLevelWindows", &TopLevelWindow::getNumTopLevelWindows)
1✔
2064
        .def_static ("getTopLevelWindow", &TopLevelWindow::getTopLevelWindow, py::return_value_policy::reference)
1✔
2065
        .def_static ("getActiveTopLevelWindow", &TopLevelWindow::getActiveTopLevelWindow, py::return_value_policy::reference)
1✔
2066
        .def ("addToDesktop", py::overload_cast<>(&TopLevelWindow::addToDesktop))
1✔
2067
    ;
2068

2069
    // ============================================================================================ juce::ResizableWindow
2070

2071
    py::class_<ResizableWindow, TopLevelWindow, PyComponent<ResizableWindow>> classResizableWindow (m, "ResizableWindow");
2✔
2072

2073
    classResizableWindow
2074
        .def (py::init<const String&, bool>())
1✔
2075
        .def (py::init<const String&, Colour, bool>())
1✔
2076
        .def ("getBackgroundColour", &ResizableWindow::getBackgroundColour)
1✔
2077
        .def ("setBackgroundColour", &ResizableWindow::setBackgroundColour)
1✔
2078
        .def ("setResizable", &ResizableWindow::setResizable)
1✔
2079
        .def ("isResizable", &ResizableWindow::isResizable)
1✔
2080
        .def ("setResizeLimits", &ResizableWindow::setResizeLimits)
1✔
2081
        .def ("setDraggable", &ResizableWindow::setDraggable)
1✔
2082
        .def ("isDraggable", &ResizableWindow::isDraggable)
1✔
2083
    //.def ("getConstrainer", &ResizableWindow::getConstrainer)
2084
    //.def ("setConstrainer", &ResizableWindow::setConstrainer)
2085
        .def ("setBoundsConstrained", &ResizableWindow::setBoundsConstrained)
1✔
2086
        .def ("isFullScreen", &ResizableWindow::isFullScreen)
1✔
2087
        .def ("setFullScreen", &ResizableWindow::setFullScreen)
1✔
2088
        .def ("isMinimised", &ResizableWindow::isMinimised)
1✔
2089
        .def ("setMinimised", &ResizableWindow::setMinimised)
1✔
2090
        .def ("isKioskMode", &ResizableWindow::isKioskMode)
1✔
2091
        .def ("getWindowStateAsString", &ResizableWindow::getWindowStateAsString)
1✔
2092
        .def ("restoreWindowStateFromString", &ResizableWindow::restoreWindowStateFromString)
1✔
2093
        .def ("getContentComponent", &ResizableWindow::getContentComponent, py::return_value_policy::reference)
1✔
2094
        .def ("setContentOwned", &ResizableWindow::setContentOwned)
1✔
2095
        .def ("setContentNonOwned", &ResizableWindow::setContentNonOwned)
1✔
2096
        .def ("clearContentComponent", &ResizableWindow::clearContentComponent)
1✔
2097
        .def ("setContentComponentSize", &ResizableWindow::setContentComponentSize)
1✔
2098
    //.def ("getBorderThickness", &ResizableWindow::getBorderThickness)
2099
    //.def ("getContentComponentBorder", &ResizableWindow::getContentComponentBorder)
2100
    ;
2101

2102
    classResizableWindow.attr ("backgroundColourId") = py::int_ (static_cast<int> (ResizableWindow::backgroundColourId));
1✔
2103

2104
    // ============================================================================================ juce::DocumentWindow
2105

2106
    py::class_<DocumentWindow, ResizableWindow, PyDocumentWindow<>> classDocumentWindow (m, "DocumentWindow");
2✔
2107

2108
    Helpers::makeArithmeticEnum<DocumentWindow::TitleBarButtons> (classDocumentWindow, "TitleBarButtons")
2✔
2109
        .value ("minimiseButton", DocumentWindow::minimiseButton)
1✔
2110
        .value ("maximiseButton", DocumentWindow::maximiseButton)
1✔
2111
        .value ("closeButton", DocumentWindow::closeButton)
1✔
2112
        .value ("allButtons", DocumentWindow::allButtons)
1✔
2113
        .export_values();
1✔
2114

2115
    classDocumentWindow
2116
        .def (py::init(
×
2117
            [](const String& name, Colour backgroundColour, DocumentWindow::TitleBarButtons requiredButtons, bool addToDesktop)
×
2118
                { return new DocumentWindow (name, backgroundColour, static_cast<int> (requiredButtons), addToDesktop); },
×
2119
            [](const String& name, Colour backgroundColour, DocumentWindow::TitleBarButtons requiredButtons, bool addToDesktop)
3✔
2120
                { return new PyDocumentWindow<> (name, backgroundColour, static_cast<int> (requiredButtons), addToDesktop); }),
4✔
2121
            "name"_a, "backgroundColour"_a, "requiredButtons"_a, "addToDesktop"_a = true)
2✔
2122
        .def (py::init(
×
2123
            [](const String& name, Colour backgroundColour, int requiredButtons, bool addToDesktop)
×
2124
                { return new DocumentWindow (name, backgroundColour, requiredButtons, addToDesktop); },
×
2125
            [](const String& name, Colour backgroundColour, int requiredButtons, bool addToDesktop)
2✔
2126
                { return new PyDocumentWindow<> (name, backgroundColour, requiredButtons, addToDesktop); }),
3✔
2127
            "name"_a, "backgroundColour"_a, "requiredButtons"_a, "addToDesktop"_a = true)
3✔
2128
        .def ("setName", &DocumentWindow::setName)
1✔
2129
        .def ("setIcon", &DocumentWindow::setIcon)
1✔
2130
        .def ("setTitleBarHeight", &DocumentWindow::setTitleBarHeight)
1✔
2131
        .def ("getTitleBarHeight", &DocumentWindow::getTitleBarHeight)
1✔
2132
        .def ("setTitleBarButtonsRequired", [](DocumentWindow& self, DocumentWindow::TitleBarButtons requiredButtons, bool positionTitleBarButtonsOnLeft)
×
2133
        {
2134
            self.setTitleBarButtonsRequired (static_cast<int> (requiredButtons), positionTitleBarButtonsOnLeft);
×
2135
        })
1✔
2136
        .def ("setTitleBarTextCentred", &DocumentWindow::setTitleBarTextCentred)
1✔
2137
        .def ("setMenuBar", &DocumentWindow::setMenuBar)
1✔
2138
        .def ("getMenuBarComponent", &DocumentWindow::getMenuBarComponent, py::return_value_policy::reference)
1✔
2139
        .def ("setMenuBarComponent", &DocumentWindow::setMenuBarComponent)
1✔
2140
        .def ("closeButtonPressed", &DocumentWindow::closeButtonPressed)
1✔
2141
        .def ("minimiseButtonPressed", &DocumentWindow::minimiseButtonPressed)
1✔
2142
        .def ("maximiseButtonPressed", &DocumentWindow::maximiseButtonPressed)
1✔
2143
        .def ("getCloseButton", &DocumentWindow::getCloseButton, py::return_value_policy::reference)
1✔
2144
        .def ("getMinimiseButton", &DocumentWindow::getMinimiseButton, py::return_value_policy::reference)
1✔
2145
        .def ("getMaximiseButton", &DocumentWindow::getMaximiseButton, py::return_value_policy::reference)
1✔
2146
    ;
2147

2148
    classDocumentWindow.attr ("textColourId") = py::int_ (static_cast<int> (DocumentWindow::textColourId));
1✔
2149

2150
    // ============================================================================================ juce::DialogWindow
2151

2152
    py::class_<DialogWindow, DocumentWindow, PyDocumentWindow<DialogWindow>> classDialogWindow (m, "DialogWindow");
2✔
2153

2154
    py::class_<DialogWindow::LaunchOptions> classDialogWindowLaunchOptions (classDialogWindow, "LaunchOptions");
2✔
2155

2156
    classDialogWindowLaunchOptions
2157
        .def (py::init<>())
1✔
2158
        .def_readwrite ("dialogTitle", &DialogWindow::LaunchOptions::dialogTitle)
1✔
2159
        .def_readwrite ("dialogBackgroundColour", &DialogWindow::LaunchOptions::dialogBackgroundColour)
1✔
2160
    //.def_readwrite ("content", &DialogWindow::LaunchOptions::content)
2161
        .def_readwrite ("componentToCentreAround", &DialogWindow::LaunchOptions::componentToCentreAround)
1✔
2162
        .def_readwrite ("escapeKeyTriggersCloseButton", &DialogWindow::LaunchOptions::escapeKeyTriggersCloseButton)
1✔
2163
        .def_readwrite ("useNativeTitleBar", &DialogWindow::LaunchOptions::useNativeTitleBar)
1✔
2164
        .def_readwrite ("resizable", &DialogWindow::LaunchOptions::resizable)
1✔
2165
        .def_readwrite ("useBottomRightCornerResizer", &DialogWindow::LaunchOptions::useBottomRightCornerResizer)
1✔
2166
        .def ("launchAsync", &DialogWindow::LaunchOptions::launchAsync)
1✔
2167
        .def ("create", &DialogWindow::LaunchOptions::create)
1✔
2168
#if JUCE_MODAL_LOOPS_PERMITTED
2169
        .def ("runModal", &DialogWindow::LaunchOptions::runModal)
1✔
2170
#endif
2171
    ;
2172

2173
    classDialogWindow
2174
        .def (py::init<const String&, Colour, bool, bool, float>(),
1✔
2175
            "name"_a, "backgroundColour"_a, "escapeKeyTriggersCloseButton"_a, "addToDesktop"_a = true, "desktopScale"_a = 1.0f)
3✔
NEW
2176
        .def_static ("showDialog", &DialogWindow::showDialog,
×
2177
            "dialogTitle"_a, "contentComponent"_a, "componentToCentreAround"_a, "backgroundColour"_a, "escapeKeyTriggersCloseButton"_a, "shouldBeResizable"_a = false, "useBottomRightCornerResizer"_a = false)
2✔
2178
#if JUCE_MODAL_LOOPS_PERMITTED
NEW
2179
        .def_static ("showModalDialog", &DialogWindow::showModalDialog,
×
2180
            "dialogTitle"_a, "contentComponent"_a, "componentToCentreAround"_a, "backgroundColour"_a, "escapeKeyTriggersCloseButton"_a, "shouldBeResizable"_a = false, "useBottomRightCornerResizer"_a = false)
1✔
2181
#endif
2182
    ;
2183

2184
    // ============================================================================================ juce::TooltipWindow
2185

2186
    py::class_<TooltipWindow, Component, PyTooltipWindow<>> classTooltipWindow (m, "TooltipWindow");
2✔
2187

2188
    classTooltipWindow
2189
        .def (py::init<Component*, int>(), "parentComponent"_a = static_cast<Component*>(nullptr), "millisecondsBeforeTipAppears"_a = 700)
2✔
2190
        .def ("setMillisecondsBeforeTipAppears", &TooltipWindow::setMillisecondsBeforeTipAppears, "newTimeMs"_a = 700)
2✔
2191
        .def ("displayTip", &TooltipWindow::displayTip)
1✔
2192
        .def ("hideTip", &TooltipWindow::hideTip)
1✔
2193
        .def ("getTipFor", &TooltipWindow::getTipFor)
1✔
2194
        .def ("displayTip", &TooltipWindow::displayTip)
1✔
2195
    ;
2196

2197
    classTooltipWindow.attr ("backgroundColourId") = py::int_ (static_cast<int> (TooltipWindow::backgroundColourId));
1✔
2198
    classTooltipWindow.attr ("textColourId") = py::int_ (static_cast<int> (TooltipWindow::textColourId));
1✔
2199
    classTooltipWindow.attr ("outlineColourId") = py::int_ (static_cast<int> (TooltipWindow::outlineColourId));
1✔
2200

2201
    // ============================================================================================ juce::ThreadWithProgressWindow
2202

2203
    py::class_<ThreadWithProgressWindow, Thread, PyThreadWithProgressWindow<>> classThreadWithProgressWindow (m, "ThreadWithProgressWindow");
2✔
2204

2205
    classThreadWithProgressWindow
2206
        .def (py::init<const String&, bool, bool, int, const String&, Component*>(),
1✔
2207
            "windowTitle"_a, "hasProgressBar"_a, "hasCancelButton"_a, "timeOutMsWhenCancelling"_a = 10000, "cancelButtonText"_a = String(), "componentToCentreAround"_a = static_cast<Component*>(nullptr))
3✔
2208
#if JUCE_MODAL_LOOPS_PERMITTED
2209
        .def ("runThread", &ThreadWithProgressWindow::runThread)
1✔
2210
#endif
2211
        .def ("launchThread", &ThreadWithProgressWindow::launchThread)
1✔
2212
        .def ("setProgress", &ThreadWithProgressWindow::setProgress)
1✔
2213
        .def ("setStatusMessage", &ThreadWithProgressWindow::setStatusMessage)
1✔
2214
    //.def ("getAlertWindow", &ThreadWithProgressWindow::getAlertWindow)
2215
        .def ("threadComplete", &ThreadWithProgressWindow::threadComplete)
1✔
2216
    ;
2217

2218
    // ============================================================================================ juce::FileChooser
2219

2220
    py::class_<FileChooser> classFileChooser (m, "FileChooser");
2✔
2221

2222
    classFileChooser
2223
        .def (py::init<const String&, const File&, const String&, bool, bool, Component*>(),
1✔
2224
            "dialogBoxTitle"_a, "initialFileOrDirectory"_a = File(), "filePatternsAllowed"_a = String(), "useOSNativeDialogBox"_a = true, "treatFilePackagesAsDirectories"_a = false, "parentComponent"_a = static_cast<Component*> (nullptr))
3✔
2225
#if JUCE_MODAL_LOOPS_PERMITTED
2226
    //.def ("browseForFileToOpen", &FileChooser::browseForFileToOpen, py::call_guard<py::gil_scoped_release>())
2227
        .def ("browseForFileToOpen", [](FileChooser& self) { return self.browseForFileToOpen(); }, py::call_guard<py::gil_scoped_release>())
1✔
2228
    //.def ("browseForMultipleFilesToOpen", &FileChooser::browseForFileToOpen, py::call_guard<py::gil_scoped_release>())
2229
        .def ("browseForMultipleFilesToOpen", [](FileChooser& self) { return self.browseForMultipleFilesToOpen(); }, py::call_guard<py::gil_scoped_release>())
1✔
2230
        .def ("browseForFileToSave", &FileChooser::browseForFileToSave, "warnAboutOverwritingExistingFiles"_a, py::call_guard<py::gil_scoped_release>())
1✔
2231
        .def ("browseForDirectory", &FileChooser::browseForDirectory, py::call_guard<py::gil_scoped_release>())
1✔
2232
    //.def ("browseForMultipleFilesOrDirectories", &FileChooser::browseForMultipleFilesOrDirectories, py::call_guard<py::gil_scoped_release>())
2233
        .def ("browseForMultipleFilesOrDirectories", [](FileChooser& self) { return self.browseForMultipleFilesOrDirectories(); }, py::call_guard<py::gil_scoped_release>())
1✔
2234
    //.def ("showDialog", &FileChooser::showDialog, py::call_guard<py::gil_scoped_release>())
2235
        .def ("showDialog", [](FileChooser& self, int flags) { return self.showDialog (flags, nullptr); }, py::call_guard<py::gil_scoped_release>())
1✔
2236
#endif
2237
    //.def ("launchAsync", &FileChooser::launchAsync)
2238
        .def ("launchAsync", [](FileChooser& self, int flags, std::function<void (const FileChooser&)> callback) { self.launchAsync (flags, std::move (callback), nullptr); })
1✔
2239
        .def ("getResult", &FileChooser::getResult)
1✔
2240
        .def ("getResults", &FileChooser::getResults)
1✔
2241
        .def ("getURLResult", &FileChooser::getURLResult)
1✔
2242
        .def ("getURLResults", &FileChooser::getURLResults)
1✔
2243
        .def_static ("isPlatformDialogAvailable", &FileChooser::isPlatformDialogAvailable)
1✔
2244
        .def_static ("registerCustomMimeTypeForFileExtension", &FileChooser::registerCustomMimeTypeForFileExtension)
1✔
2245
    ;
2246

2247
    // ============================================================================================ juce::FlexBox
2248

2249
    py::class_<FlexBox> classFlexBox (m, "FlexBox");
2✔
2250

2251
    py::enum_<FlexBox::Direction> (classFlexBox, "Direction")
2✔
2252
        .value ("row", FlexBox::Direction::row)
1✔
2253
        .value ("rowReverse", FlexBox::Direction::rowReverse)
1✔
2254
        .value ("column", FlexBox::Direction::column)
1✔
2255
        .value ("columnReverse", FlexBox::Direction::columnReverse);
1✔
2256

2257
    py::enum_<FlexBox::Wrap> (classFlexBox, "Wrap")
2✔
2258
        .value ("noWrap", FlexBox::Wrap::noWrap)
1✔
2259
        .value ("wrap", FlexBox::Wrap::wrap)
1✔
2260
        .value ("wrapReverse", FlexBox::Wrap::wrapReverse);
1✔
2261

2262
    py::enum_<FlexBox::AlignContent> (classFlexBox, "AlignContent")
2✔
2263
        .value ("stretch", FlexBox::AlignContent::stretch)
1✔
2264
        .value ("flexStart", FlexBox::AlignContent::flexStart)
1✔
2265
        .value ("flexEnd", FlexBox::AlignContent::flexEnd)
1✔
2266
        .value ("center", FlexBox::AlignContent::center)
1✔
2267
        .value ("spaceBetween", FlexBox::AlignContent::spaceBetween)
1✔
2268
        .value ("spaceAround", FlexBox::AlignContent::spaceAround);
1✔
2269

2270
    py::enum_<FlexBox::AlignItems> (classFlexBox, "AlignItems")
2✔
2271
        .value ("stretch", FlexBox::AlignItems::stretch)
1✔
2272
        .value ("flexStart", FlexBox::AlignItems::flexStart)
1✔
2273
        .value ("flexEnd", FlexBox::AlignItems::flexEnd)
1✔
2274
        .value ("center", FlexBox::AlignItems::center);
1✔
2275

2276
    py::enum_<FlexBox::JustifyContent> (classFlexBox, "JustifyContent")
2✔
2277
        .value ("flexStart", FlexBox::JustifyContent::flexStart)
1✔
2278
        .value ("flexEnd", FlexBox::JustifyContent::flexEnd)
1✔
2279
        .value ("center", FlexBox::JustifyContent::center)
1✔
2280
        .value ("spaceBetween", FlexBox::JustifyContent::spaceBetween)
1✔
2281
        .value ("spaceAround", FlexBox::JustifyContent::spaceAround);
1✔
2282

2283
    py::class_<FlexItem> classFlexItem (m, "FlexItem");
2✔
2284

2285
    py::class_<FlexItem::Margin> classFlexItemMargin (classFlexItem, "Margin");
2✔
2286

2287
    py::enum_<FlexItem::AlignSelf> (classFlexItem, "AlignSelf")
2✔
2288
        .value ("autoAlign", FlexItem::AlignSelf::autoAlign)
1✔
2289
        .value ("flexStart", FlexItem::AlignSelf::flexStart)
1✔
2290
        .value ("flexEnd", FlexItem::AlignSelf::flexEnd)
1✔
2291
        .value ("center", FlexItem::AlignSelf::center)
1✔
2292
        .value ("stretch", FlexItem::AlignSelf::stretch);
1✔
2293

2294
    classFlexBox
2295
        .def (py::init<>())
1✔
2296
        .def (py::init<FlexBox::Direction, FlexBox::Wrap, FlexBox::AlignContent, FlexBox::AlignItems, FlexBox::JustifyContent>())
1✔
2297
        .def (py::init<FlexBox::JustifyContent>())
1✔
2298
        .def ("performLayout", py::overload_cast<Rectangle<float>> (&FlexBox::performLayout))
1✔
2299
        .def ("performLayout", py::overload_cast<Rectangle<int>> (&FlexBox::performLayout))
1✔
2300
        .def_readwrite ("flexDirection", &FlexBox::flexDirection)
1✔
2301
        .def_readwrite ("flexWrap", &FlexBox::flexWrap)
1✔
2302
        .def_readwrite ("alignContent", &FlexBox::alignContent)
1✔
2303
        .def_readwrite ("alignItems", &FlexBox::alignItems)
1✔
2304
        .def_readwrite ("justifyContent", &FlexBox::justifyContent)
1✔
2305
        .def_readwrite ("items", &FlexBox::items)
1✔
2306
    ;
2307

2308
    classFlexItemMargin
2309
        .def (py::init<>())
1✔
2310
        .def (py::init<float>())
1✔
2311
        .def (py::init<float, float, float, float>())
1✔
2312
        .def_readwrite ("left", &FlexItem::Margin::left)
1✔
2313
        .def_readwrite ("right", &FlexItem::Margin::right)
1✔
2314
        .def_readwrite ("top", &FlexItem::Margin::top)
1✔
2315
        .def_readwrite ("bottom", &FlexItem::Margin::bottom)
1✔
2316
    ;
2317

2318
    classFlexItem
2319
        .def (py::init<>())
1✔
2320
        .def (py::init<float, float>())
1✔
2321
        .def (py::init<float, float, Component&>())
1✔
2322
        .def (py::init<float, float, FlexBox&>())
1✔
2323
        .def (py::init<Component&>())
1✔
2324
        .def (py::init<FlexBox&>())
1✔
2325
        .def_readwrite ("currentBounds", &FlexItem::currentBounds)
1✔
2326
        .def_readwrite ("associatedComponent", &FlexItem::associatedComponent, py::return_value_policy::reference)
1✔
2327
        .def_readwrite ("associatedFlexBox", &FlexItem::associatedFlexBox, py::return_value_policy::reference)
1✔
2328
        .def_readwrite ("order", &FlexItem::order)
1✔
2329
        .def_readwrite ("flexGrow", &FlexItem::flexGrow)
1✔
2330
        .def_readwrite ("flexShrink", &FlexItem::flexShrink)
1✔
2331
        .def_readwrite ("flexBasis", &FlexItem::flexBasis)
1✔
2332
        .def_readwrite ("alignSelf", &FlexItem::alignSelf)
1✔
2333
    //.def_property_readonly_static ("autoValue", [] { return FlexItem::autoValue; })
2334
    //.def_property_readonly_static ("notAssigned", [] { return FlexItem::notAssigned; })
2335
        .def_readwrite ("width", &FlexItem::width)
1✔
2336
        .def_readwrite ("minWidth", &FlexItem::minWidth)
1✔
2337
        .def_readwrite ("maxWidth", &FlexItem::maxWidth)
1✔
2338
        .def_readwrite ("height", &FlexItem::height)
1✔
2339
        .def_readwrite ("minHeight", &FlexItem::minHeight)
1✔
2340
        .def_readwrite ("maxHeight", &FlexItem::maxHeight)
1✔
2341
        .def_readwrite ("margin", &FlexItem::margin)
1✔
2342
        .def ("withFlex", py::overload_cast<float> (&FlexItem::withFlex, py::const_))
1✔
2343
        .def ("withFlex", py::overload_cast<float, float> (&FlexItem::withFlex, py::const_))
1✔
2344
        .def ("withFlex", py::overload_cast<float, float, float> (&FlexItem::withFlex, py::const_))
1✔
2345
        .def ("withWidth", &FlexItem::withWidth)
1✔
2346
        .def ("withMinWidth", &FlexItem::withMinWidth)
1✔
2347
        .def ("withMaxWidth", &FlexItem::withMaxWidth)
1✔
2348
        .def ("withHeight", &FlexItem::withHeight)
1✔
2349
        .def ("withMinHeight", &FlexItem::withMinHeight)
1✔
2350
        .def ("withMaxHeight", &FlexItem::withMaxHeight)
1✔
2351
        .def ("withMargin", &FlexItem::withMargin)
1✔
2352
        .def ("withOrder", &FlexItem::withOrder)
1✔
2353
        .def ("withAlignSelf", &FlexItem::withAlignSelf)
1✔
2354
    ;
2355

2356
    registerArray<Array, FlexItem> (m);
1✔
2357
}
1✔
2358

2359
} // namespace popsicle::Bindings
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc