Add support for actions to TableCellContextMenuTracker.
- VariablesView's context menu tracker now optionally accepts contextual actions to add to the menu in addition to the current renderer settings.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2009, Ingo Weinhold, [email protected].
|
* Copyright 2009, Ingo Weinhold, [email protected].
|
||||||
* Copyright 2011, Rene Gollent, [email protected].
|
* Copyright 2011-2012, Rene Gollent, [email protected].
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -19,6 +19,7 @@
|
|||||||
|
|
||||||
#include "table/TableColumns.h"
|
#include "table/TableColumns.h"
|
||||||
|
|
||||||
|
#include "ActionMenuItem.h"
|
||||||
#include "Architecture.h"
|
#include "Architecture.h"
|
||||||
#include "FunctionID.h"
|
#include "FunctionID.h"
|
||||||
#include "FunctionInstance.h"
|
#include "FunctionInstance.h"
|
||||||
@@ -487,7 +488,9 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
status_t Init(Settings* rendererSettings,
|
status_t Init(Settings* rendererSettings,
|
||||||
SettingsMenu* rendererSettingsMenu)
|
SettingsMenu* rendererSettingsMenu,
|
||||||
|
ContextActionList* preSettingsActions = NULL,
|
||||||
|
ContextActionList* postSettingsActions = NULL)
|
||||||
{
|
{
|
||||||
fRendererSettings = rendererSettings;
|
fRendererSettings = rendererSettings;
|
||||||
fRendererSettings->AcquireReference();
|
fRendererSettings->AcquireReference();
|
||||||
@@ -500,10 +503,23 @@ public:
|
|||||||
if (fContextMenu == NULL)
|
if (fContextMenu == NULL)
|
||||||
return B_NO_MEMORY;
|
return B_NO_MEMORY;
|
||||||
|
|
||||||
status_t error = fRendererSettingsMenu->AddToMenu(fContextMenu, 0);
|
status_t error = B_OK;
|
||||||
|
if (preSettingsActions != NULL) {
|
||||||
|
error = _AddActionItems(preSettingsActions);
|
||||||
|
if (error != B_OK)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
|
error = fRendererSettingsMenu->AddToMenu(fContextMenu, 0);
|
||||||
if (error != B_OK)
|
if (error != B_OK)
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
if (postSettingsActions != NULL) {
|
||||||
|
error = _AddActionItems(postSettingsActions);
|
||||||
|
if (error != B_OK)
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
AutoLocker<Settings> settingsLocker(fRendererSettings);
|
AutoLocker<Settings> settingsLocker(fRendererSettings);
|
||||||
fRendererSettings->AddListener(this);
|
fRendererSettings->AddListener(this);
|
||||||
|
|
||||||
@@ -516,6 +532,13 @@ public:
|
|||||||
{
|
{
|
||||||
fRendererSettingsMenu->PrepareToShow(fParentLooper);
|
fRendererSettingsMenu->PrepareToShow(fParentLooper);
|
||||||
|
|
||||||
|
for (int32 i = 0; i < fContextMenu->CountItems(); i++) {
|
||||||
|
ActionMenuItem* item = dynamic_cast<ActionMenuItem*>(
|
||||||
|
fContextMenu->ItemAt(i));
|
||||||
|
if (item != NULL)
|
||||||
|
item->PrepareToShow(fParentLooper, fContextMenu);
|
||||||
|
}
|
||||||
|
|
||||||
fMenuPreparedToShow = true;
|
fMenuPreparedToShow = true;
|
||||||
|
|
||||||
BRect mouseRect(screenWhere, screenWhere);
|
BRect mouseRect(screenWhere, screenWhere);
|
||||||
@@ -529,6 +552,15 @@ public:
|
|||||||
|
|
||||||
if (fMenuPreparedToShow) {
|
if (fMenuPreparedToShow) {
|
||||||
stillActive = fRendererSettingsMenu->Finish(fParentLooper, force);
|
stillActive = fRendererSettingsMenu->Finish(fParentLooper, force);
|
||||||
|
for (int32 i = 0; i < fContextMenu->CountItems(); i++) {
|
||||||
|
ActionMenuItem* item = dynamic_cast<ActionMenuItem*>(
|
||||||
|
fContextMenu->ItemAt(i));
|
||||||
|
if (item != NULL) {
|
||||||
|
stillActive |= item->Finish(fParentLooper, fContextMenu,
|
||||||
|
force);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fMenuPreparedToShow = stillActive;
|
fMenuPreparedToShow = stillActive;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -559,6 +591,24 @@ private:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
status_t _AddActionItems(ContextActionList* actions)
|
||||||
|
{
|
||||||
|
if (fContextMenu == NULL)
|
||||||
|
return B_BAD_VALUE;
|
||||||
|
|
||||||
|
int32 index = fContextMenu->CountItems();
|
||||||
|
for (int32 i = 0; ActionMenuItem* item = actions->ItemAt(i); i++) {
|
||||||
|
if (!fContextMenu->AddItem(item, index + i)) {
|
||||||
|
for (i--; i >= 0; i--)
|
||||||
|
fContextMenu->RemoveItem(fContextMenu->ItemAt(index + i));
|
||||||
|
|
||||||
|
return B_NO_MEMORY;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return B_OK;
|
||||||
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
ModelNode* fNode;
|
ModelNode* fNode;
|
||||||
BLooper* fParentLooper;
|
BLooper* fParentLooper;
|
||||||
|
|||||||
@@ -11,6 +11,7 @@
|
|||||||
#include "table/TreeTable.h"
|
#include "table/TreeTable.h"
|
||||||
|
|
||||||
|
|
||||||
|
class ActionMenuItem;
|
||||||
class CpuState;
|
class CpuState;
|
||||||
class SettingsMenu;
|
class SettingsMenu;
|
||||||
class StackFrame;
|
class StackFrame;
|
||||||
@@ -61,6 +62,7 @@ private:
|
|||||||
class VariableTableModel;
|
class VariableTableModel;
|
||||||
class ContextMenu;
|
class ContextMenu;
|
||||||
class TableCellContextMenuTracker;
|
class TableCellContextMenuTracker;
|
||||||
|
typedef BObjectList<ActionMenuItem> ContextActionList;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void _Init();
|
void _Init();
|
||||||
|
|||||||
Reference in New Issue
Block a user