Add tooltips to breakpoint marker view.
- If the user hovers over a valid breakpoint marker location, emit a tooltip message indicating the action that can be taken.
This commit is contained in:
@@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2009-2012, Ingo Weinhold, [email protected].
|
* Copyright 2009-2012, Ingo Weinhold, [email protected].
|
||||||
* Copyright 2009, Rene Gollent, [email protected].
|
* Copyright 2009-2013, Rene Gollent, [email protected].
|
||||||
* Distributed under the terms of the MIT License.
|
* Distributed under the terms of the MIT License.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -22,6 +22,7 @@
|
|||||||
#include <Region.h>
|
#include <Region.h>
|
||||||
#include <ScrollBar.h>
|
#include <ScrollBar.h>
|
||||||
#include <ScrollView.h>
|
#include <ScrollView.h>
|
||||||
|
#include <ToolTip.h>
|
||||||
|
|
||||||
#include <AutoLocker.h>
|
#include <AutoLocker.h>
|
||||||
#include <ObjectList.h>
|
#include <ObjectList.h>
|
||||||
@@ -45,6 +46,13 @@ static const int32 kSpacesPerTab = 4;
|
|||||||
// TODO: Should be settable!
|
// TODO: Should be settable!
|
||||||
static const bigtime_t kScrollTimer = 10000LL;
|
static const bigtime_t kScrollTimer = 10000LL;
|
||||||
|
|
||||||
|
static const char* kClearBreakpointMessage = "Click to clear breakpoint at "
|
||||||
|
"line %" B_PRId32 ".";
|
||||||
|
static const char* kDisableBreakpointMessage = "Click to disable breakpoint at "
|
||||||
|
"line %" B_PRId32 ".";
|
||||||
|
static const char* kEnableBreakpointMessage = "Click to enable breakpoint at "
|
||||||
|
"line %" B_PRId32 ".";
|
||||||
|
|
||||||
|
|
||||||
class SourceView::BaseView : public BView {
|
class SourceView::BaseView : public BView {
|
||||||
public:
|
public:
|
||||||
@@ -157,6 +165,8 @@ public:
|
|||||||
|
|
||||||
virtual void MouseDown(BPoint where);
|
virtual void MouseDown(BPoint where);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual bool GetToolTipAt(BPoint point, BToolTip** _tip);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Team* fTeam;
|
Team* fTeam;
|
||||||
@@ -944,6 +954,59 @@ SourceView::MarkerView::MouseDown(BPoint where)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
SourceView::MarkerView::GetToolTipAt(BPoint point, BToolTip** _tip)
|
||||||
|
{
|
||||||
|
if (fSourceCode == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
int32 line = LineAtOffset(point.y);
|
||||||
|
if (line < 0)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
AutoLocker<Team> locker(fTeam);
|
||||||
|
Statement* statement;
|
||||||
|
if (fTeam->GetStatementAtSourceLocation(fSourceCode,
|
||||||
|
SourceLocation(line), statement) != B_OK) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
BReference<Statement> statementReference(statement, true);
|
||||||
|
if (statement->StartSourceLocation().Line() != line)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
SourceView::MarkerManager::BreakpointMarker* marker =
|
||||||
|
fMarkerManager->BreakpointMarkerAtLine(line);
|
||||||
|
|
||||||
|
BString text;
|
||||||
|
if (marker == NULL) {
|
||||||
|
text.SetToFormat(kEnableBreakpointMessage, line);
|
||||||
|
} else if ((modifiers() & B_SHIFT_KEY) != 0) {
|
||||||
|
if (!marker->IsEnabled()) {
|
||||||
|
text.SetToFormat(kClearBreakpointMessage, line);
|
||||||
|
} else {
|
||||||
|
text.SetToFormat(kDisableBreakpointMessage, line);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if (marker->IsEnabled()) {
|
||||||
|
text.SetToFormat(kClearBreakpointMessage, line);
|
||||||
|
} else {
|
||||||
|
text.SetToFormat(kEnableBreakpointMessage, line);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (text.Length() > 0) {
|
||||||
|
BTextToolTip* tip = new(std::nothrow) BTextToolTip(text);
|
||||||
|
if (tip == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
*_tip = tip;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// #pragma mark - TextView
|
// #pragma mark - TextView
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user