1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-02-01 03:10:06 +00:00
JUCE/src/gui/components/windows/juce_AlertWindow.h

375 lines
18 KiB
C++

/*
==============================================================================
This file is part of the JUCE library - "Jules' Utility Class Extensions"
Copyright 2004-9 by Raw Material Software Ltd.
------------------------------------------------------------------------------
JUCE can be redistributed and/or modified under the terms of the GNU General
Public License (Version 2), as published by the Free Software Foundation.
A copy of the license is included in the JUCE distribution, or can be found
online at www.gnu.org/licenses.
JUCE is distributed in the hope that it will be useful, but WITHOUT ANY
WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
------------------------------------------------------------------------------
To release a closed-source product which uses JUCE, commercial licenses are
available: visit www.rawmaterialsoftware.com/juce for more information.
==============================================================================
*/
#ifndef __JUCE_ALERTWINDOW_JUCEHEADER__
#define __JUCE_ALERTWINDOW_JUCEHEADER__
#include "juce_TopLevelWindow.h"
#include "../../graphics/fonts/juce_TextLayout.h"
#include "../controls/juce_ComboBox.h"
#include "../mouse/juce_ComponentDragger.h"
//==============================================================================
/** A window that displays a message and has buttons for the user to react to it.
For simple dialog boxes with just a couple of buttons on them, there are
some static methods for running these.
For more complex dialogs, an AlertWindow can be created, then it can have some
buttons and components added to it, and its runModalLoop() method is then used to
show it. The value returned by runModalLoop() shows which button the
user pressed to dismiss the box.
@see ThreadWithProgressWindow
*/
class JUCE_API AlertWindow : public TopLevelWindow,
private ButtonListener
{
public:
//==============================================================================
/** The type of icon to show in the dialog box. */
enum AlertIconType
{
NoIcon, /**< No icon will be shown on the dialog box. */
QuestionIcon, /**< A question-mark icon, for dialog boxes that need the
user to answer a question. */
WarningIcon, /**< An exclamation mark to indicate that the dialog is a
warning about something and shouldn't be ignored. */
InfoIcon /**< An icon that indicates that the dialog box is just
giving the user some information, which doesn't require
a response from them. */
};
//==============================================================================
/** Creates an AlertWindow.
@param title the headline to show at the top of the dialog box
@param message a longer, more descriptive message to show underneath the
headline
@param iconType the type of icon to display
@param associatedComponent if this is non-zero, it specifies the component that the
alert window should be associated with. Depending on the look
and feel, this might be used for positioning of the alert window.
*/
AlertWindow (const String& title,
const String& message,
AlertIconType iconType,
Component* associatedComponent = 0);
/** Destroys the AlertWindow */
~AlertWindow();
//==============================================================================
/** Returns the type of alert icon that was specified when the window
was created. */
AlertIconType getAlertType() const throw() { return alertIconType; }
//==============================================================================
/** Changes the dialog box's message.
This will also resize the window to fit the new message if required.
*/
void setMessage (const String& message);
//==============================================================================
/** Adds a button to the window.
@param name the text to show on the button
@param returnValue the value that should be returned from runModalLoop()
if this is the button that the user presses.
@param shortcutKey1 an optional key that can be pressed to trigger this button
@param shortcutKey2 a second optional key that can be pressed to trigger this button
*/
void addButton (const String& name,
const int returnValue,
const KeyPress& shortcutKey1 = KeyPress(),
const KeyPress& shortcutKey2 = KeyPress());
/** Returns the number of buttons that the window currently has. */
int getNumButtons() const;
//==============================================================================
/** Adds a textbox to the window for entering strings.
@param name an internal name for the text-box. This is the name to pass to
the getTextEditorContents() method to find out what the
user typed-in.
@param initialContents a string to show in the text box when it's first shown
@param onScreenLabel if this is non-empty, it will be displayed next to the
text-box to label it.
@param isPasswordBox if true, the text editor will display asterisks instead of
the actual text
@see getTextEditorContents
*/
void addTextEditor (const String& name,
const String& initialContents,
const String& onScreenLabel = String::empty,
const bool isPasswordBox = false);
/** Returns the contents of a named textbox.
After showing an AlertWindow that contains a text editor, this can be
used to find out what the user has typed into it.
@param nameOfTextEditor the name of the text box that you're interested in
@see addTextEditor
*/
const String getTextEditorContents (const String& nameOfTextEditor) const;
//==============================================================================
/** Adds a drop-down list of choices to the box.
After the box has been shown, the getComboBoxComponent() method can
be used to find out which item the user picked.
@param name the label to use for the drop-down list
@param items the list of items to show in it
@param onScreenLabel if this is non-empty, it will be displayed next to the
combo-box to label it.
@see getComboBoxComponent
*/
void addComboBox (const String& name,
const StringArray& items,
const String& onScreenLabel = String::empty);
/** Returns a drop-down list that was added to the AlertWindow.
@param nameOfList the name that was passed into the addComboBox() method
when creating the drop-down
@returns the ComboBox component, or 0 if none was found for the given name.
*/
ComboBox* getComboBoxComponent (const String& nameOfList) const;
//==============================================================================
/** Adds a block of text.
This is handy for adding a multi-line note next to a textbox or combo-box,
to provide more details about what's going on.
*/
void addTextBlock (const String& text);
//==============================================================================
/** Adds a progress-bar to the window.
@param progressValue a variable that will be repeatedly checked while the
dialog box is visible, to see how far the process has
got. The value should be in the range 0 to 1.0
*/
void addProgressBarComponent (double& progressValue);
//==============================================================================
/** Adds a user-defined component to the dialog box.
@param component the component to add - its size should be set up correctly
before it is passed in. The caller is responsible for deleting
the component later on - the AlertWindow won't delete it.
*/
void addCustomComponent (Component* const component);
/** Returns the number of custom components in the dialog box.
@see getCustomComponent, addCustomComponent
*/
int getNumCustomComponents() const;
/** Returns one of the custom components in the dialog box.
@param index a value 0 to (getNumCustomComponents() - 1). Out-of-range indexes
will return 0
@see getNumCustomComponents, addCustomComponent
*/
Component* getCustomComponent (const int index) const;
/** Removes one of the custom components in the dialog box.
Note that this won't delete it, it just removes the component from the window
@param index a value 0 to (getNumCustomComponents() - 1). Out-of-range indexes
will return 0
@returns the component that was removed (or zero)
@see getNumCustomComponents, addCustomComponent
*/
Component* removeCustomComponent (const int index);
//==============================================================================
/** Returns true if the window contains any components other than just buttons.*/
bool containsAnyExtraComponents() const;
//==============================================================================
// easy-to-use message box functions:
/** Shows a dialog box that just has a message and a single button to get rid of it.
The box is shown modally, and the method returns after the user
has clicked the button (or pressed the escape or return keys).
@param iconType the type of icon to show
@param title the headline to show at the top of the box
@param message a longer, more descriptive message to show underneath the
headline
@param buttonText the text to show in the button - if this string is empty, the
default string "ok" (or a localised version) will be used.
@param associatedComponent if this is non-zero, it specifies the component that the
alert window should be associated with. Depending on the look
and feel, this might be used for positioning of the alert window.
*/
static void JUCE_CALLTYPE showMessageBox (AlertIconType iconType,
const String& title,
const String& message,
const String& buttonText = String::empty,
Component* associatedComponent = 0);
/** Shows a dialog box with two buttons.
Ideal for ok/cancel or yes/no choices. The return key can also be used
to trigger the first button, and the escape key for the second button.
@param iconType the type of icon to show
@param title the headline to show at the top of the box
@param message a longer, more descriptive message to show underneath the
headline
@param button1Text the text to show in the first button - if this string is
empty, the default string "ok" (or a localised version of it)
will be used.
@param button2Text the text to show in the second button - if this string is
empty, the default string "cancel" (or a localised version of it)
will be used.
@param associatedComponent if this is non-zero, it specifies the component that the
alert window should be associated with. Depending on the look
and feel, this might be used for positioning of the alert window.
@returns true if button 1 was clicked, false if it was button 2
*/
static bool JUCE_CALLTYPE showOkCancelBox (AlertIconType iconType,
const String& title,
const String& message,
const String& button1Text = String::empty,
const String& button2Text = String::empty,
Component* associatedComponent = 0);
/** Shows a dialog box with three buttons.
Ideal for yes/no/cancel boxes.
The escape key can be used to trigger the third button.
@param iconType the type of icon to show
@param title the headline to show at the top of the box
@param message a longer, more descriptive message to show underneath the
headline
@param button1Text the text to show in the first button - if an empty string, then
"yes" will be used (or a localised version of it)
@param button2Text the text to show in the first button - if an empty string, then
"no" will be used (or a localised version of it)
@param button3Text the text to show in the first button - if an empty string, then
"cancel" will be used (or a localised version of it)
@param associatedComponent if this is non-zero, it specifies the component that the
alert window should be associated with. Depending on the look
and feel, this might be used for positioning of the alert window.
@returns one of the following values:
- 0 if the third button was pressed (normally used for 'cancel')
- 1 if the first button was pressed (normally used for 'yes')
- 2 if the middle button was pressed (normally used for 'no')
*/
static int JUCE_CALLTYPE showYesNoCancelBox (AlertIconType iconType,
const String& title,
const String& message,
const String& button1Text = String::empty,
const String& button2Text = String::empty,
const String& button3Text = String::empty,
Component* associatedComponent = 0);
//==============================================================================
/** Shows an operating-system native dialog box.
@param title the title to use at the top
@param bodyText the longer message to show
@param isOkCancel if true, this will show an ok/cancel box, if false,
it'll show a box with just an ok button
@returns true if the ok button was pressed, false if they pressed cancel.
*/
static bool JUCE_CALLTYPE showNativeDialogBox (const String& title,
const String& bodyText,
bool isOkCancel);
//==============================================================================
/** A set of colour IDs to use to change the colour of various aspects of the alert box.
These constants can be used either via the Component::setColour(), or LookAndFeel::setColour()
methods.
@see Component::setColour, Component::findColour, LookAndFeel::setColour, LookAndFeel::findColour
*/
enum ColourIds
{
backgroundColourId = 0x1001800, /**< The background colour for the window. */
textColourId = 0x1001810, /**< The colour for the text. */
outlineColourId = 0x1001820 /**< An optional colour to use to draw a border around the window. */
};
//==============================================================================
juce_UseDebuggingNewOperator
protected:
/** @internal */
void paint (Graphics& g);
/** @internal */
void mouseDown (const MouseEvent& e);
/** @internal */
void mouseDrag (const MouseEvent& e);
/** @internal */
bool keyPressed (const KeyPress& key);
/** @internal */
void buttonClicked (Button* button);
/** @internal */
void lookAndFeelChanged();
/** @internal */
void userTriedToCloseWindow();
/** @internal */
int getDesktopWindowStyleFlags() const;
private:
String text;
TextLayout textLayout;
AlertIconType alertIconType;
ComponentBoundsConstrainer constrainer;
ComponentDragger dragger;
Rectangle textArea;
VoidArray buttons, textBoxes, comboBoxes;
VoidArray progressBars, customComps, textBlocks, allComps;
StringArray textboxNames, comboBoxNames;
Font font;
Component* associatedComponent;
void updateLayout (const bool onlyIncreaseSize);
// disable copy constructor
AlertWindow (const AlertWindow&);
const AlertWindow& operator= (const AlertWindow&);
};
#endif // __JUCE_ALERTWINDOW_JUCEHEADER__