Browse Source

tags/2021-05-28
jules 18 years ago
parent
commit
b48a4e7856
12 changed files with 77 additions and 76 deletions
  1. +1
    -1
      build/win32/platform_specific_code/juce_win32_Messaging.cpp
  2. +1
    -0
      extras/juce demo/src/demos/TreeViewDemo.cpp
  3. +4
    -4
      src/juce_appframework/application/juce_ApplicationProperties.cpp
  4. +4
    -4
      src/juce_appframework/application/juce_ApplicationProperties.h
  5. +1
    -1
      src/juce_appframework/application/juce_PropertiesFile.cpp
  6. +1
    -1
      src/juce_appframework/application/juce_PropertiesFile.h
  7. +2
    -2
      src/juce_appframework/events/juce_ChangeListenerList.cpp
  8. +19
    -28
      src/juce_appframework/events/juce_MessageManager.cpp
  9. +12
    -12
      src/juce_appframework/events/juce_MessageManager.h
  10. +30
    -21
      src/juce_appframework/gui/components/controls/juce_TreeView.cpp
  11. +1
    -1
      src/juce_core/containers/juce_PropertySet.cpp
  12. +1
    -1
      src/juce_core/containers/juce_PropertySet.h

+ 1
- 1
build/win32/platform_specific_code/juce_win32_Messaging.cpp View File

@@ -162,7 +162,7 @@ static BOOL CALLBACK BroadcastEnumWindowProc (HWND hwnd, LPARAM lParam)
return TRUE; return TRUE;
} }
void MessageManager::broadcastMessage (const String& value)
void MessageManager::broadcastMessage (const String& value) throw()
{ {
VoidArray windows; VoidArray windows;
EnumWindows (&BroadcastEnumWindowProc, (LPARAM) &windows); EnumWindows (&BroadcastEnumWindowProc, (LPARAM) &windows);


+ 1
- 0
extras/juce demo/src/demos/TreeViewDemo.cpp View File

@@ -209,6 +209,7 @@ public:
addAndMakeVisible (treeView = new TreeView()); addAndMakeVisible (treeView = new TreeView());
treeView->setRootItem (rootItem); treeView->setRootItem (rootItem);
treeView->setMultiSelectEnabled (true);
resized(); resized();
} }


+ 4
- 4
src/juce_appframework/application/juce_ApplicationProperties.cpp View File

@@ -43,7 +43,7 @@ juce_ImplementSingleton (ApplicationProperties)
//============================================================================== //==============================================================================
ApplicationProperties::ApplicationProperties()
ApplicationProperties::ApplicationProperties() throw()
: userProps (0), : userProps (0),
commonProps (0), commonProps (0),
msBeforeSaving (3000), msBeforeSaving (3000),
@@ -62,7 +62,7 @@ void ApplicationProperties::setStorageParameters (const String& applicationName,
const String& fileNameSuffix, const String& fileNameSuffix,
const String& folderName_, const String& folderName_,
const int millisecondsBeforeSaving, const int millisecondsBeforeSaving,
const int propertiesFileOptions)
const int propertiesFileOptions) throw()
{ {
appName = applicationName; appName = applicationName;
fileSuffix = fileNameSuffix; fileSuffix = fileNameSuffix;
@@ -116,7 +116,7 @@ bool ApplicationProperties::testWriteAccess (const bool testUserSettings,
} }
//============================================================================== //==============================================================================
PropertiesFile* ApplicationProperties::getUserSettings()
PropertiesFile* ApplicationProperties::getUserSettings() throw()
{ {
if (userProps == 0) if (userProps == 0)
{ {
@@ -138,7 +138,7 @@ PropertiesFile* ApplicationProperties::getUserSettings()
return userProps; return userProps;
} }
PropertiesFile* ApplicationProperties::getCommonSettings()
PropertiesFile* ApplicationProperties::getCommonSettings() throw()
{ {
if (commonProps == 0) if (commonProps == 0)
{ {


+ 4
- 4
src/juce_appframework/application/juce_ApplicationProperties.h View File

@@ -68,7 +68,7 @@ public:
Before using it, you must call setStorageParameters() to give it the info Before using it, you must call setStorageParameters() to give it the info
it needs to create the property files. it needs to create the property files.
*/ */
ApplicationProperties();
ApplicationProperties() throw();
/** Destructor. /** Destructor.
*/ */
@@ -87,7 +87,7 @@ public:
const String& fileNameSuffix, const String& fileNameSuffix,
const String& folderName, const String& folderName,
const int millisecondsBeforeSaving, const int millisecondsBeforeSaving,
const int propertiesFileOptions);
const int propertiesFileOptions) throw();
/** Tests whether the files can be successfully written to, and can show /** Tests whether the files can be successfully written to, and can show
an error message if not. an error message if not.
@@ -110,7 +110,7 @@ public:
@see getCommonSettings @see getCommonSettings
*/ */
PropertiesFile* getUserSettings();
PropertiesFile* getUserSettings() throw();
/** Returns the common settings file. /** Returns the common settings file.
@@ -121,7 +121,7 @@ public:
@see getUserSettings @see getUserSettings
*/ */
PropertiesFile* getCommonSettings();
PropertiesFile* getCommonSettings() throw();
//============================================================================== //==============================================================================
/** Saves both files if they need to be saved. /** Saves both files if they need to be saved.


+ 1
- 1
src/juce_appframework/application/juce_PropertiesFile.cpp View File

@@ -55,7 +55,7 @@ static const tchar* const propertyTagName = T("VALUE");
//============================================================================== //==============================================================================
PropertiesFile::PropertiesFile (const File& f, PropertiesFile::PropertiesFile (const File& f,
const int millisecondsBeforeSaving, const int millisecondsBeforeSaving,
const int options_)
const int options_) throw()
: PropertySet (ignoreCaseOfKeyNames), : PropertySet (ignoreCaseOfKeyNames),
file (f), file (f),
timerInterval (millisecondsBeforeSaving), timerInterval (millisecondsBeforeSaving),


+ 1
- 1
src/juce_appframework/application/juce_PropertiesFile.h View File

@@ -85,7 +85,7 @@ public:
*/ */
PropertiesFile (const File& file, PropertiesFile (const File& file,
const int millisecondsBeforeSaving, const int millisecondsBeforeSaving,
const int options);
const int options) throw();
/** Destructor. /** Destructor.


+ 2
- 2
src/juce_appframework/events/juce_ChangeListenerList.cpp View File

@@ -69,7 +69,7 @@ void ChangeListenerList::removeAllChangeListeners() throw()
listeners.clear(); listeners.clear();
} }
void ChangeListenerList::sendChangeMessage (void* objectThatHasChanged) throw()
void ChangeListenerList::sendChangeMessage (void* const objectThatHasChanged) throw()
{ {
const ScopedLock sl (lock); const ScopedLock sl (lock);
@@ -86,7 +86,7 @@ void ChangeListenerList::handleMessage (const Message& message)
sendSynchronousChangeMessage (message.pointerParameter); sendSynchronousChangeMessage (message.pointerParameter);
} }
void ChangeListenerList::sendSynchronousChangeMessage (void* objectThatHasChanged)
void ChangeListenerList::sendSynchronousChangeMessage (void* const objectThatHasChanged)
{ {
const ScopedLock sl (lock); const ScopedLock sl (lock);
messagePending = false; messagePending = false;


+ 19
- 28
src/juce_appframework/events/juce_MessageManager.cpp View File

@@ -201,19 +201,14 @@ bool MessageManager::runDispatchLoop()
//============================================================================== //==============================================================================
void MessageManager::postQuitMessage (const bool useMaximumForce) void MessageManager::postQuitMessage (const bool useMaximumForce)
{ {
if (! quitMessagePosted)
{
Message* const m = new Message (quitMessageId, (useMaximumForce) ? 1 : 0, 0, 0);
m->messageRecipient = 0;
if (! juce_postMessageToSystemQueue (m))
delete m;
Message* const m = new Message (quitMessageId, (useMaximumForce) ? 1 : 0, 0, 0);
m->messageRecipient = 0;
postMessageToQueue (m);
quitMessagePosted = true;
}
quitMessagePosted = true;
} }
bool MessageManager::hasQuitMessageBeenPosted() const
bool MessageManager::hasQuitMessageBeenPosted() const throw()
{ {
return quitMessagePosted; return quitMessagePosted;
} }
@@ -221,13 +216,11 @@ bool MessageManager::hasQuitMessageBeenPosted() const
//============================================================================== //==============================================================================
void MessageManager::deliverBroadcastMessage (const String& value) void MessageManager::deliverBroadcastMessage (const String& value)
{ {
if (broadcastListeners == 0)
broadcastListeners = new ActionListenerList();
broadcastListeners->sendActionMessage (value);
if (broadcastListeners != 0)
broadcastListeners->sendActionMessage (value);
} }
void MessageManager::registerBroadcastListener (ActionListener* listener)
void MessageManager::registerBroadcastListener (ActionListener* const listener) throw()
{ {
if (broadcastListeners == 0) if (broadcastListeners == 0)
broadcastListeners = new ActionListenerList(); broadcastListeners = new ActionListenerList();
@@ -235,24 +228,22 @@ void MessageManager::registerBroadcastListener (ActionListener* listener)
broadcastListeners->addActionListener (listener); broadcastListeners->addActionListener (listener);
} }
void MessageManager::deregisterBroadcastListener (ActionListener* listener)
void MessageManager::deregisterBroadcastListener (ActionListener* const listener) throw()
{ {
if (broadcastListeners == 0)
broadcastListeners = new ActionListenerList();
broadcastListeners->removeActionListener (listener);
if (broadcastListeners != 0)
broadcastListeners->removeActionListener (listener);
} }
//============================================================================== //==============================================================================
// This gets called occasionally by the timer thread (to save using an extra thread // This gets called occasionally by the timer thread (to save using an extra thread
// for it). // for it).
void MessageManager::inactivityCheckCallback()
void MessageManager::inactivityCheckCallback() throw()
{ {
if (instance != 0) if (instance != 0)
instance->inactivityCheckCallbackInt(); instance->inactivityCheckCallbackInt();
} }
void MessageManager::inactivityCheckCallbackInt()
void MessageManager::inactivityCheckCallbackInt() throw()
{ {
const unsigned int now = Time::getApproximateMillisecondCounter(); const unsigned int now = Time::getApproximateMillisecondCounter();
@@ -277,7 +268,7 @@ void MessageManager::inactivityCheckCallbackInt()
} }
} }
void MessageManager::delayWaitCursor()
void MessageManager::delayWaitCursor() throw()
{ {
if (instance != 0) if (instance != 0)
{ {
@@ -291,7 +282,7 @@ void MessageManager::delayWaitCursor()
} }
} }
void MessageManager::setTimeBeforeShowingWaitCursor (const int millisecs)
void MessageManager::setTimeBeforeShowingWaitCursor (const int millisecs) throw()
{ {
// if this is a bit too small you'll get a lot of unwanted hourglass cursors.. // if this is a bit too small you'll get a lot of unwanted hourglass cursors..
jassert (millisecs <= 0 || millisecs > 200); jassert (millisecs <= 0 || millisecs > 200);
@@ -311,22 +302,22 @@ void MessageManager::timerCallback()
++messageCounter; ++messageCounter;
} }
int MessageManager::getTimeBeforeShowingWaitCursor() const
int MessageManager::getTimeBeforeShowingWaitCursor() const throw()
{ {
return timeBeforeWaitCursor; return timeBeforeWaitCursor;
} }
bool MessageManager::isThisTheMessageThread() const
bool MessageManager::isThisTheMessageThread() const throw()
{ {
return Thread::getCurrentThreadId() == messageThreadId; return Thread::getCurrentThreadId() == messageThreadId;
} }
void MessageManager::setCurrentMessageThread (const int threadId)
void MessageManager::setCurrentMessageThread (const int threadId) throw()
{ {
messageThreadId = threadId; messageThreadId = threadId;
} }
bool MessageManager::currentThreadHasLockedMessageManager() const
bool MessageManager::currentThreadHasLockedMessageManager() const throw()
{ {
return Thread::getCurrentThreadId() == currentLockingThreadId; return Thread::getCurrentThreadId() == currentLockingThreadId;
} }


+ 12
- 12
src/juce_appframework/events/juce_MessageManager.h View File

@@ -106,14 +106,14 @@ public:
void* userData); void* userData);
/** Returns true if the caller-thread is the message thread. */ /** Returns true if the caller-thread is the message thread. */
bool isThisTheMessageThread() const;
bool isThisTheMessageThread() const throw();
/** Called to tell the manager which thread is the one that's running the dispatch loop. /** Called to tell the manager which thread is the one that's running the dispatch loop.
(Best to ignore this method unless you really know what you're doing..) (Best to ignore this method unless you really know what you're doing..)
@see getCurrentMessageThread @see getCurrentMessageThread
*/ */
void setCurrentMessageThread (const int threadId);
void setCurrentMessageThread (const int threadId) throw();
/** Returns the ID of the current message thread, as set by setCurrentMessageThread(). /** Returns the ID of the current message thread, as set by setCurrentMessageThread().
@@ -129,7 +129,7 @@ public:
This will be true if the caller is the message thread, because that automatically This will be true if the caller is the message thread, because that automatically
gains a lock while a message is being dispatched. gains a lock while a message is being dispatched.
*/ */
bool currentThreadHasLockedMessageManager() const;
bool currentThreadHasLockedMessageManager() const throw();
//============================================================================== //==============================================================================
/** Sends a message to all other JUCE applications that are running. /** Sends a message to all other JUCE applications that are running.
@@ -138,7 +138,7 @@ public:
method of the broadcast listeners in the other app. method of the broadcast listeners in the other app.
@see registerBroadcastListener, ActionListener @see registerBroadcastListener, ActionListener
*/ */
static void broadcastMessage (const String& messageText);
static void broadcastMessage (const String& messageText) throw();
/** Registers a listener to get told about broadcast messages. /** Registers a listener to get told about broadcast messages.
@@ -147,10 +147,10 @@ public:
@see broadcastMessage @see broadcastMessage
*/ */
void registerBroadcastListener (ActionListener* listener);
void registerBroadcastListener (ActionListener* listener) throw();
/** Deregisters a broadcast listener. */ /** Deregisters a broadcast listener. */
void deregisterBroadcastListener (ActionListener* listener);
void deregisterBroadcastListener (ActionListener* listener) throw();
//============================================================================== //==============================================================================
/** Sets a time-limit for the app to be 'busy' before an hourglass cursor will be shown. /** Sets a time-limit for the app to be 'busy' before an hourglass cursor will be shown.
@@ -160,24 +160,24 @@ public:
Mac the system might still decide to show it after a while). Mac the system might still decide to show it after a while).
@see MouseCursor::showWaitCursor @see MouseCursor::showWaitCursor
*/ */
void setTimeBeforeShowingWaitCursor (const int millisecs);
void setTimeBeforeShowingWaitCursor (const int millisecs) throw();
/** Returns the time-out before the 'busy' cursor is shown when the app is busy. /** Returns the time-out before the 'busy' cursor is shown when the app is busy.
@see setTimeBeforeShowingWaitCursor, MouseCursor::showWaitCursor @see setTimeBeforeShowingWaitCursor, MouseCursor::showWaitCursor
*/ */
int getTimeBeforeShowingWaitCursor() const;
int getTimeBeforeShowingWaitCursor() const throw();
/** Tells the message manager that the system isn't locked-up, even if the message /** Tells the message manager that the system isn't locked-up, even if the message
loop isn't active. loop isn't active.
Used internally, this is handy when an OS enters its own modal loop. Used internally, this is handy when an OS enters its own modal loop.
*/ */
static void delayWaitCursor();
static void delayWaitCursor() throw();
//============================================================================== //==============================================================================
/** Returns true if JUCEApplication::quit() has been called. */ /** Returns true if JUCEApplication::quit() has been called. */
bool hasQuitMessageBeenPosted() const;
bool hasQuitMessageBeenPosted() const throw();
//============================================================================== //==============================================================================
/** @internal */ /** @internal */
@@ -219,8 +219,8 @@ private:
static void doPlatformSpecificShutdown(); static void doPlatformSpecificShutdown();
friend class InternalTimerThread; friend class InternalTimerThread;
static void inactivityCheckCallback();
void inactivityCheckCallbackInt();
static void inactivityCheckCallback() throw();
void inactivityCheckCallbackInt() throw();
friend class MessageManagerLock; friend class MessageManagerLock;
CriticalSection messageDispatchLock; CriticalSection messageDispatchLock;


+ 30
- 21
src/juce_appframework/gui/components/controls/juce_TreeView.cpp View File

@@ -58,25 +58,19 @@ public:
void mouseDown (const MouseEvent& e) void mouseDown (const MouseEvent& e)
{ {
isDragging = false; isDragging = false;
needSelectionOnMouseUp = false;
Rectangle pos; Rectangle pos;
TreeViewItem* const item = findItemAt (e.y, pos); TreeViewItem* const item = findItemAt (e.y, pos);
if (item != 0 && e.x >= pos.getX()) if (item != 0 && e.x >= pos.getX())
{ {
if (item->isSelected() && owner->isMultiSelectEnabled()
&& (e.mods.isCommandDown() || e.mods.isCtrlDown()))
{
item->setSelected (false, false);
}
if (! owner->isMultiSelectEnabled())
item->setSelected (true, true);
else if (item->isSelected())
needSelectionOnMouseUp = ! e.mods.isPopupMenu();
else else
{
item->setSelected (true,
! (owner->isMultiSelectEnabled()
&& (e.mods.isCommandDown()
|| e.mods.isCtrlDown()
|| e.mods.isShiftDown())));
}
selectBasedOnModifiers (item, e.mods);
MouseEvent e2 (e); MouseEvent e2 (e);
e2.x -= pos.getX(); e2.x -= pos.getX();
@@ -87,16 +81,22 @@ public:
void mouseUp (const MouseEvent& e) void mouseUp (const MouseEvent& e)
{ {
if (e.mouseWasClicked())
{
Rectangle pos;
TreeViewItem* const item = findItemAt (e.y, pos);
Rectangle pos;
TreeViewItem* const item = findItemAt (e.y, pos);
if (item != 0
&& e.x >= pos.getX() - owner->getIndentSize()
&& e.x < pos.getX())
if (item != 0 && e.mouseWasClicked())
{
if (needSelectionOnMouseUp)
{
selectBasedOnModifiers (item, e.mods);
}
else if (e.mouseWasClicked())
{ {
item->setOpen (! item->isOpen());
if (e.x >= pos.getX() - owner->getIndentSize()
&& e.x < pos.getX())
{
item->setOpen (! item->isOpen());
}
} }
} }
} }
@@ -258,10 +258,19 @@ private:
VoidArray rowComponentItems; VoidArray rowComponentItems;
Array <int> rowComponentIds; Array <int> rowComponentIds;
VoidArray rowComponents; VoidArray rowComponents;
bool isDragging;
bool isDragging, needSelectionOnMouseUp;
TreeViewContentComponent (const TreeViewContentComponent&); TreeViewContentComponent (const TreeViewContentComponent&);
const TreeViewContentComponent& operator= (const TreeViewContentComponent&); const TreeViewContentComponent& operator= (const TreeViewContentComponent&);
static void selectBasedOnModifiers (TreeViewItem* const item, const ModifierKeys& modifiers)
{
const bool shft = modifiers.isShiftDown();
const bool cmd = modifiers.isCommandDown();
item->setSelected (shft || (! cmd) || (cmd && ! item->isSelected()),
! (shft || cmd));
}
}; };
//============================================================================== //==============================================================================


+ 1
- 1
src/juce_core/containers/juce_PropertySet.cpp View File

@@ -40,7 +40,7 @@ BEGIN_JUCE_NAMESPACE
//============================================================================== //==============================================================================
PropertySet::PropertySet (const bool ignoreCaseOfKeyNames)
PropertySet::PropertySet (const bool ignoreCaseOfKeyNames) throw()
: properties (ignoreCaseOfKeyNames), : properties (ignoreCaseOfKeyNames),
ignoreCaseOfKeys (ignoreCaseOfKeyNames) ignoreCaseOfKeys (ignoreCaseOfKeyNames)
{ {


+ 1
- 1
src/juce_core/containers/juce_PropertySet.h View File

@@ -55,7 +55,7 @@ public:
@param ignoreCaseOfKeyNames if true, the names of properties are compared in a @param ignoreCaseOfKeyNames if true, the names of properties are compared in a
case-insensitive way case-insensitive way
*/ */
PropertySet (const bool ignoreCaseOfKeyNames = false);
PropertySet (const bool ignoreCaseOfKeyNames = false) throw();
/** Destructor. */ /** Destructor. */
virtual ~PropertySet(); virtual ~PropertySet();


Loading…
Cancel
Save