diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp index 5d75846ba4..0f62edec9c 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.cpp @@ -1,19 +1,18 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. - * Copyright 2011-2013, Rene Gollent, rene@gollent.com. + * Copyright 2011-2014, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ #include "VariablesView.h" -#include - #include #include #include +#include #include #include #include @@ -1822,6 +1821,11 @@ VariablesView::MessageReceived(BMessage* message) fVariableTableModel->NotifyNodeChanged(node); break; } + case B_COPY: + { + _CopyVariableValueToClipboard(); + break; + } default: BGroupView::MessageReceived(message); break; @@ -2084,6 +2088,15 @@ VariablesView::_GetContextActionsForNode(ModelNode* node, if (valueNode == NULL) return B_OK; + if (valueNode->LocationAndValueResolutionState() == B_OK) { + result = _AddContextAction("Copy Value", B_COPY, actions, message); + if (result != B_OK) + return result; + } + + // if the current node isn't itself a ranged container, check if it + // contains a hidden node which is, since in the latter case we + // want to present the range selection as well. if (!valueNode->IsRangedContainer()) { if (node->CountChildren() == 1 && node->ChildAt(0)->IsHidden()) { valueNode = node->ChildAt(0)->NodeChild()->Node(); @@ -2296,6 +2309,26 @@ VariablesView::_ApplyViewStateDescendentNodeInfos(VariablesViewState* viewState, } +void +VariablesView::_CopyVariableValueToClipboard() +{ + ModelNode* node = reinterpret_cast( + fVariableTable->SelectionModel()->NodeAt(0)); + + Value* value = node->GetValue(); + BString valueData; + if (value != NULL && value->ToString(valueData)) { + be_clipboard->Lock(); + be_clipboard->Data()->RemoveData("text/plain"); + be_clipboard->Data()->AddData ("text/plain", + B_MIME_TYPE, valueData.String(), + valueData.Length()); + be_clipboard->Commit(); + be_clipboard->Unlock(); + } +} + + // #pragma mark - Listener diff --git a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h index 9db6c3b53e..83583f49c0 100644 --- a/src/apps/debugger/user_interface/gui/team_window/VariablesView.h +++ b/src/apps/debugger/user_interface/gui/team_window/VariablesView.h @@ -1,6 +1,6 @@ /* * Copyright 2009, Ingo Weinhold, ingo_weinhold@gmx.de. - * Copyright 2012, Rene Gollent, rene@gollent.com. + * Copyright 2012-2014, Rene Gollent, rene@gollent.com. * Distributed under the terms of the MIT License. */ #ifndef VARIABLES_VIEW_H @@ -86,6 +86,7 @@ private: status_t _ApplyViewStateDescendentNodeInfos( VariablesViewState* viewState, void* parent, TreeTablePath& path); + void _CopyVariableValueToClipboard(); private: Thread* fThread;