35 #include <wx/msgdlg.h>
114 return (
dynamic_cast<const T*
>(arg)) !=
NULL;
122 if (pos != string::npos) {
134 , m_BackForwardPos(0)
138 , m_MouseMode(eMouse_Idle)
141 , m_MarkerHandlerIndex(0)
145 , m_VectorPane(
false)
146 #ifdef ATTRIB_MENU_SUPPORT
186 #ifdef ATTRIB_MENU_SUPPORT
198 strings->AddString(
"GL Default");
201 m_GlRenderer =
"GL Default";
217 #ifdef ATTRIB_MENU_SUPPORT
233 GetClientSize(&w, &h);
299 bool b_shift = wxGetKeyState(WXK_SHIFT);
301 switch (event.GetKeyCode()) {
421 if (wxGetKeyState(wxKeyCode(
'Z')) ||
422 wxGetKeyState(wxKeyCode(
'R')) ||
423 wxGetKeyState(wxKeyCode(
'P')) )
444 bool rect_select =
event.ShiftDown();
445 bool inc_select =
event.CmdDown();
449 if (last_hit_glyph && !inc_select && !rect_select ) {
464 }
else if (inc_select) {
470 if (last_hit_glyph && last_hit_glyph->
OnLeftDown(pos)) {
484 if ( !HasCapture() ) {
496 if (wxGetKeyState(wxKeyCode(
'Z')) ||
497 wxGetKeyState(wxKeyCode(
'R')) ||
498 wxGetKeyState(wxKeyCode(
'P')) )
511 wxPoint pos =
event.GetPosition();
524 }
else if (last_hit_glyph && last_hit_glyph->
IsClickable()) {
539 if (wxGetKeyState(wxKeyCode(
'Z')) ||
540 wxGetKeyState(wxKeyCode(
'R')) ||
541 wxGetKeyState(wxKeyCode(
'P')) )
547 int shift =
event.GetWheelRotation()/4;
565 wxPoint pos =
event.GetPosition();
661 string track_name =
"";
722 if (!glyph_o.
Empty()) {
725 string track_name =
"";
756 if ( !glyphs.empty() ) {
757 glyph = glyphs.front();
780 if (iter->second->IsRemoved())
continue;
800 img_height =
max(220, img_height);
859 if (last_hit_glyph && !last_hit_glyph->IsSelected()) {
866 int mouse_x,
int mouse_y)
902 objs.push_back(sel_obj);
974 glClearColor(1, 1, 1, 0);
975 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
989 #ifdef ATTRIB_MENU_SUPPORT
990 if (m_GlRenderer !=
"GL Default") {
1000 if (rdebug ==
NULL) {
1001 LOG_POST(
Error <<
"CGlRenderDebug: unable to cast render manager to CGlRenderDebug");
1026 gl.
BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1033 if (iter->second->IsRemoved())
continue;
1055 #ifdef ATTRIB_MENU_SUPPORT
1057 m_RenderMs =
t.Elapsed();
1089 gl.
BlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
1096 if (iter->second->IsRemoved())
continue;
1120 float vert_offset = title_height + 2.0f;
1123 if (title.size() > 0)
1131 gl.
Viewport(0, vp_height-vert_offset, vp_width, vert_offset);
1134 gl.
Ortho(0, vp_width, 0, vert_offset, -1.0, 1.0);
1139 gl.
Rectf(0.0f, 0.0f,
float(vp_width),
float(vert_offset));
1189 the_point->ChangeSwitchPoint(marker_pos, 0);
1190 }
catch (std::exception&) {
1191 LOG_POST(
Error <<
"x_ChangeSwitchPoint(): error chaning switch point");
1224 vector<TipLocation>::const_iterator curr_tip = tip_rects.begin();
1225 while (curr_tip != tip_rects.end() && curr_tip->TipID !=
m_ActivatedTipId) {
1229 if (glyph && curr_tip != tip_rects.end()) {
1244 glyph->GetPosInWorld(glyph_pos);
1247 glyph_rect.
SetTop(glyph_pos.
Y());
1248 glyph_rect.
SetRight(glyph_pos.
X() + glyph->GetWidth());
1249 glyph_rect.
SetBottom(glyph_pos.
Y() + glyph->GetHeight());
1256 gl.
Color4f(1.0f, 0.0f, 0.0f, 0.4f);
1270 gl.
Vertex3d(x_right, glyph_rect.
Top() - band_w, 0.0);
1271 gl.
Vertex3d(x_left, glyph_rect.
Top() - band_w, 0.0);
1283 gl.
Vertex3d(x_left - band_w_x, glyph_rect.
Top(), 0.0);
1289 gl.
Vertex3d(x_right + band_w_x, glyph_rect.
Top(), 0.0);
1295 gl.
Vertex3d(x_left, glyph_rect.
Top() - band_w, 0.0);
1296 gl.
Vertex3d(x_left - band_w_x, glyph_rect.
Top() - band_w, 0.0);
1297 gl.
Vertex3d(x_left - band_w_x, glyph_rect.
Top(), 0.0);
1301 gl.
Vertex3d(x_right + band_w_x, glyph_rect.
Top(), 0.0);
1302 gl.
Vertex3d(x_right + band_w_x, glyph_rect.
Top() - band_w, 0.0);
1303 gl.
Vertex3d(x_right, glyph_rect.
Top() - band_w, 0.0);
1309 gl.
Vertex3d(x_left - band_w_x, glyph_rect.
Bottom() + band_w, 0.0);
1315 gl.
Vertex3d(x_right + band_w_x, glyph_rect.
Bottom() + band_w, 0.0);
1330 bool no_connector =
false;
1331 if (tip_rect_m.
Bottom() < glyph_rect.
Top()) {
1343 }
else if (tip_rect_m.
Top() > glyph_rect.
Bottom()) {
1355 }
else if (tip_rect_m.
Left() > glyph_rect.
Right()) {
1367 }
else if (tip_rect_m.
Right() < glyph_rect.
Left()) {
1381 no_connector =
true;
1384 if ( !no_connector ) {
1392 TModelUnit off_x = dist < small_num ? len_pix : dy * len_pix / dist;
1393 TModelUnit off_y = dist < small_num ? 0.0 : dx * len_pix / dist;
1394 if (
fabs(off_x) < small_num) {
1395 start_pnt1.
m_X = start_pnt2.
m_X = start_pnt.
m_X;
1396 start_pnt1.
m_Y = start_pnt.
m_Y - len_pix * 0.5;
1397 start_pnt2.
m_Y = start_pnt.
m_Y + len_pix * 0.5;
1401 }
else if (start_pnt2.
m_Y > t_v.
GetTo()) {
1402 shift = t_v.
GetTo() - start_pnt2.
m_Y;
1404 start_pnt1.
m_Y += shift;
1405 start_pnt2.
m_Y += shift;
1406 }
else if (
fabs(off_y) < small_num) {
1407 start_pnt1.
m_Y = start_pnt2.
m_Y = start_pnt.
m_Y;
1408 start_pnt1.
m_X = start_pnt.
m_X -
ctx->ScreenToSeq(len_pix) * 0.5;
1409 start_pnt2.
m_X = start_pnt.
m_X +
ctx->ScreenToSeq(len_pix) * 0.5;
1413 }
else if (start_pnt2.
m_X > t_h.
GetTo()) {
1414 shift = t_h.
GetTo() - start_pnt2.
m_X;
1416 start_pnt1.
m_X += shift;
1417 start_pnt2.
m_X += shift;
1423 start_pnt1.
m_X = start_pnt.
m_X;
1424 start_pnt2.
m_Y = start_pnt.
m_Y;
1425 start_pnt1.
m_Y = start_pnt.
m_Y + off_y;
1426 start_pnt2.
m_X = start_pnt.
m_X +
ctx->ScreenToSeq(off_x);
1429 gl.
Color4f(1.0f, 1.0f, 0.65f, 0.4f);
1430 ctx->DrawTriangle(start_pnt1.
m_X, start_pnt1.
m_Y,
1431 start_pnt2.
m_X, start_pnt2.
m_Y,
1432 end_pnt.
m_X, end_pnt.
m_Y);
1435 gl.
Enable(GL_LINE_SMOOTH);
1437 gl.
Color4f(0.0f, 0.0f, 0.0f, 0.9f);
1438 ctx->DrawLine(start_pnt1.
m_X, start_pnt1.
m_Y, end_pnt.
m_X, end_pnt.
m_Y);
1439 ctx->DrawLine(start_pnt2.
m_X, start_pnt2.
m_Y, end_pnt.
m_X, end_pnt.
m_Y);
1459 gl.
Color4f(0.0f, 0.0f, 0.0f, 1.0f);
1461 gl.
Enable(GL_LINE_STIPPLE);
1571 if (r_cur != r_old) {
1602 Uint4 fingerprint = 0;
1603 Uint4 ds_fingerprint = 0;
1607 subtype, fingerprint, ds_fingerprint, ds_name, &
m_DS->
GetScope());
1624 tip_rect_m.
SetTop(tip_rect.y - win_rect.y -
1625 (win_rect.GetHeight() - vp_rect.
Height()) + offset_y);
1627 tip_rect_m.
SetBottom(tip_rect_m.
Top() + tip_rect.GetHeight());
1630 bool need_shift =
true;
1638 glyph->GetPosInWorld(glyph_pos);
1641 glyph_rect.
SetTop(glyph_pos.
Y());
1642 glyph_rect.
SetRight(glyph_pos.
X() + glyph->GetWidth());
1643 glyph_rect.
SetBottom(glyph_pos.
Y() + glyph->GetHeight());
1664 shift = obj_r.
GetFrom() - target_pos;
1667 shift = obj_r.
GetTo() - target_pos;
1685 Uint4 fingerprint = 0;
1686 Uint4 ds_fingerprint = 0;
1690 subtype, fingerprint, ds_fingerprint, ds_name, &
m_DS->
GetScope());
1710 if (last_hit_glyph) {
1737 default:
_ASSERT(
false);
return -1;
1780 return GetClientSize().y - 1 - y;
1831 default:
_ASSERT(
false);
return -1;
1841 default:
_ASSERT(
false);
return -1;
1880 if (
range.NotEmpty())
1888 if(mfo.HasMappedFeat()) {
1889 const CSeq_feat& feat = mfo.GetMappedFeat().GetOriginalFeature();
1896 range = mfo.GetRange();
1904 range.SetFrom(
range.GetFrom() > margin ?
range.GetFrom() - margin : 0);
1956 if (last_hit_glyph) {
1998 srand(
static_cast<unsigned>(time(
NULL)));
2010 if (last_hit_glyph) {
2015 if (last_hit_glyph->NeedTooltip(pos, *tooltip, title)) {
2021 if (tip_id.empty()) {
2038 if (last_hit_glyph) {
2051 info.SetTipText(tooltip->Render());
2052 info.SetTitleText(tip_title);
2068 info.SetTipID(tip_id);
2074 info.SetToolTipOptions(0);
2079 wxT(
"Retrieving tooltip..."));
2090 return url_handler.
ProcessURL(href.ToStdString());
2101 names.push_back(iter->GetDescription());
2197 if ( !iter->second->IsRemoved() ) {
2266 const string&
label,
2271 marker = iter->second;
2310 TSeqPos pos = marker->GetPos();
2332 if (iter->second->IsRemoved())
continue;
2334 if (iter->second->m_Handler.HitMe()) {
2347 marker.
Reset(iter->second.GetPointer());
2380 if (intervals.size() == 0)
2401 TSeqPos t_dist = marker_pos >
t ? marker_pos -
t :
t - marker_pos;
2402 if (near_dist > t_dist) {
2406 TSeqPos f_dist = marker_pos >
f ? marker_pos -
f :
f - marker_pos;
2407 if (near_dist > f_dist) {
2412 if (marker_pos >=
f && marker_pos <=
t) {
2418 if (marker_pos <
f) {
2420 if (!neg_strand)
break;
2423 if (marker_pos >
t) {
2425 if (neg_strand)
break;
2428 if (pre == INT_MAX) pre = near_val;
2432 if (marker_pos == near_val) {
2436 bool have_next = (iter + 1) != intervals.end();
2437 bool have_prev = iter != intervals.begin();
2440 if (marker_pos ==
f &&
f ==
t && have_next) {
2441 marker_pos = (iter + 1)->GetFrom();
2443 }
else if (marker_pos ==
f) {
2446 }
else if (have_next) {
2447 marker_pos = (iter + 1)->GetTo();
2450 }
else if (marker_pos ==
t) {
2453 }
else if (have_next) {
2454 marker_pos = (iter + 1)->GetFrom();
2459 if (marker_pos ==
t &&
f ==
t && have_prev) {
2460 marker_pos = (iter - 1)->GetTo();
2461 }
else if (marker_pos ==
t) {
2464 }
else if (have_prev) {
2465 marker_pos = (iter - 1)->GetFrom();
2468 }
else if (marker_pos ==
f) {
2471 }
else if (have_prev) {
2472 marker_pos = (iter - 1)->GetTo();
2480 if (neg_strand) marker_pos = pre;
2481 else marker_pos =
next;
2483 if (neg_strand) marker_pos =
next;
2484 else marker_pos = pre;
2490 if (vis_r.
GetFrom() > marker_pos || vis_r.
GetTo() < marker_pos) {
2493 vis_r.
GetTo() + (marker_pos - center_x));
2539 return ( marker_pos >=
range.GetFrom() && marker_pos <=
range.GetTo() );
2546 const size_t str_l =
str.size();
2547 out.reserve(str_l + 2);
2548 for (
size_t i = 0;
i < str_l; ++
i) {
2549 const char& curr_char =
str[
i];
2550 if (curr_char ==
',' || curr_char ==
'|') {
2553 out.append(1, curr_char);
2564 if (iter->second->IsRemoved())
continue;
2585 typedef vector<string>
TTokens;
2591 size_t e_size = e_tokens.size();
2599 if (
arr.size() == 1) {
2600 TSeqPos pos = NStr::StringToNumeric<TSeqPos>(
arr[0]);
2603 else if (
arr.size() == 2) {
2605 NStr::StringToNumeric<TSeqPos>(
arr[1]));
2622 if (iter->second->IsRemoved()) {
2639 if (rc_ruler.
PtInRect(vp_x, vp_y)) {
2641 }
else if (rc_feat.
PtInRect(vp_x, vp_y)) {
2655 if (sel_glyphs.size() == 1) {
2656 glyph = sel_glyphs.front();
2674 }
else if (iter->second->IsRemoved()) {
2675 iter->second->SetPos(0);
2676 iter->second->SetRemoved(
false);
2680 return iter->second->m_Handler;
2684 const string&
label,
2711 iter->second->SetRemoved(
true);
2739 wxPoint pos = ScreenToClient(event.GetPosition());
std::invoke_result< _Fty, ICanceled & >::type GUI_AsyncExec(_Fty &&_Fnarg, const wxString &msg=wxT("Accessing network..."))
const string & GetParentTrackName() const
bool HasMatches(const CObject &object, objects::CScope &scope) const
CEvent - generic event implementation TODO TODO - Attachments.
virtual const objects::CSeq_loc & GetLocation(void) const
access the position of this object.
CConfigurableItems - a static list of items that can be configured.
CMappedFeatOrObject FindText(const string &text, bool match_case)
void ShowConfigureTracksDlg(const string &category)
virtual void ResetSearch()
CGlAttrGuard - guard class for restoring OpenGL attributes.
const CCachedTipHandle & m_TipHandle
CGlyphSearchVisitor(const CCachedTipHandle &handle, CScope &scope)
TSelectedGlyphs Search(CSeqGlyph *glyph)
virtual bool Visit(CSeqGlyph *glyph)
list< CWeakRef< CSeqGlyph > > TSelectedGlyphs
void Render(CGlPane &pane)
void SetHost(ITrackHandlerHost *host)
CLayoutTrackHandler inline methods.
virtual void SetPane(CGlPane *pane)
virtual string GetFullTitle() const
get a more meaningful title.
void Render(CGlPane &Pane, ERenderingOption option=eActiveState)
void SetSelection(const TRangeColl &C, bool bRedraw)
void ResetSelection(bool bRedraw)
const TRangeColl & GetSelection() const
void SetHost(ISelHandlerHost *host)
void SetOrientation(EOrientation orient)
Help class to manage markers.
void SetColor(const CRgbaColor &color)
void SetMarkerType(CSeqMarkHandler::EMarkerType t)
void SetExtendedPos(TModelUnit pos)
void SetRange(TSeqRange range)
CSeqMarkHandler m_Handler
void SetPos(TModelUnit pos)
void SetLabel(const string &label)
virtual void SetHost(IMouseZoomHandlerHost *pHost)
virtual void SetMode(EMode mode)
virtual void Render(CGlPane &Pane)
static void ParseSignature(const string &sig, objects::CSeq_id_Handle &sih, TSeqPos &from, TSeqPos &to, EObjectType &type, int &subtype, Uint4 &fingerprint, Uint4 &ds_fingerprint, string &ds_name, objects::CScope *scope)
parse signature with data source info.
bool operator()(const CObject *arg) const
CRenderingContext offers the basic context and utility methods for rendering layout objects in featur...
class CRgbaColor provides a simple abstraction for managing colors.
objects::CScope & GetScope(void) const
Get the scope from the handle.
TSeqPos GetSequenceLength() const
string GetAcc_Best() const
this is more suitable for display purposes since the returned string will not always be good to recon...
static const CFeatList * GetFeatList()
class CSeqGlyph defines an interface that wraps a rectilinear abstract object.
virtual bool IsClickable() const
Query if this glyph is clickable.
virtual void GetTooltip(const TModelPoint &, ITooltipFormatter &tt, string &t_title) const
Get the tooltip if available.
virtual bool OnLeftDblClick(const TModelPoint &)
virtual TSeqRange GetRange(void) const
get the total range of this object.
virtual bool OnLeftDown(const TModelPoint &)
virtual bool Accept(IGlyphVisitor *visitor)
Interface for accepting an IGlyphVisitor.
const CSeqGlyph * GetParent(void) const
list< CRef< CSeqGlyph > > TObjects
virtual bool OnContextMenu(wxContextMenuEvent &event)
list< CConstRef< CSeqGlyph > > TConstObjects
bool IsAjdustRulerToSelection() const
CRef< CGlTextureFont > GetTitleFont() const
void LoadSettings()
update the cached settings.
void SaveSettings(bool clear_themes=false)
CConstRef< CSeqGlyph > x_GetOnlyOneSelectedGlyph()
virtual void SMHH_SetSeqMark(TSeqPos mark) override
The derived class may choose do something differently when marker position is changed.
void OnTipRemoved(const string &tip_id)
string GetMarkers() const
get/set markers stored as a string.
void OnTipAdded(const string &tip_id)
void x_RemoveMarker(const string &id)
virtual TModelUnit SMHH_GetModelByWindow(int z, EOrientation orient) override
CSeqMarkHandler & x_GetDefaultMarker()
CConstRef< CSeqGlyph > GetSelectedLayoutObj()
void OnMiddleDown(wxMouseEvent &event)
void NextPrevSplice(EDirection dir)
CRef< CSeqGraphicConfig > m_ConfigSettings
void x_RenderTooltipConnector()
CSeqGraphicWidget * x_GetParent()
virtual void LTH_OnLayoutChanged() override
provides mouse coords in OpenGL viewport coord system
virtual void MZHH_SetScale(TModelUnit scale, const TModelPoint &point) override
@ eMouse_Idle
no button down
@ eMouse_RectSelect
with SHIFT key down
@ eMouse_IncRectSelect
with SHIFT and CTRL key down
@ eMouse_IncSelect
with CTRL key down
@ eMouse_Pan
left click and drag
@ eMouse_Down
left button down, not sure what to do yet
string GetNewMarkerName()
const TRangeColl & GetRangeSelection(void) const
virtual void UpdateVectorLayout() override
CConstRef< CMarker > GetMarker(const string &id)
TModelUnit GetHeight()
class CSeqGraphicPane
virtual ~CSeqGraphicPane()
virtual TModelPoint THH_GetModelByWindow(const wxPoint &pt) override
void SetRangeSelection(const TRangeColl &ranges)
void x_NotifyWidgetRangeChanged()
CTooltipInfo m_TooltipInfo
bool CanGoBack(void) const
virtual void MZHH_ZoomRect(const TModelRect &rc) override
virtual void PostDialogShow() override
Post-processing after showing a dialog.
CSeqGraphicPane(CSeqGraphicWidget *parent)
void SelectOnlyThisObject(const CSeqGlyph *glyph, int mouse_x, int mouse_y)
virtual const TVPRect & GetViewportRect() const override
virtual TVPUnit MZHH_GetVPPosByY(int y) const override
converts window coord to Viewport coord
void OnMouseCaptureLost(wxMouseCaptureLostEvent &)
void RemoveMarker(const string &marker_id)
void x_NotifyWidgetSelChanged()
void InitDataSource(SConstScopedObject &obj)
void SetViewportWidth(TSeqPos from, TSeqPos to, TVPUnit vp_width)
void SelectSeqLoc(const objects::CSeq_loc *loc)
TSeqRange FindText(const string &text, bool match_case)
bool CanGoForward(void) const
bool AllJobsFinished() const
virtual void SMHH_OnReset(const string &id) override
The derived class may need to do something differently when a marker gets reset, such as remove the m...
void AddPointMarker(const string &name, TSeqPos pos, const CRgbaColor color)
void GetFeatureNames(vector< string > &names)
void x_ChangeSwitchPoint()
void AdjustViewPort()
Potential actions include loading data and generating layouts.
void GetObjectSelection(TConstObjects &objs) const
retrieve the selections from our renderer.
CRef< CSeqGraphicConfig > GetConfig()
virtual void LTH_ZoomOnRange(const TSeqRange &range) override
notifies the host we need to zoom on to a range.
string GetHitMarker() const
CWeakRef< CSeqGlyph > x_GetGlyphByTipId(const string &tip_id)
void SetSeqStart(TSeqPos pos)
void SetInputObject(SConstScopedObject &obj)
void SetSeqStartMarker(const string &id)
bool IsHorizontal() const
void SetSeqStartPoint(TModelPoint point)
virtual void LTH_PopupMenu(wxMenu *menu) override
show track-specific context menu.
void x_RenderRectSelHandler(CGlPane &pane)
Rectangular selection.
virtual void PreDialogShow() override
Prepare for showing a dialog.
bool m_VectorPane
If true pane is only for creating vector graphics - ignore other draw events.
CWeakRef< CSeqGlyph > m_LastHitGlyph
last hit glyph.
virtual void x_Render() override
Draw the GL window.
CRef< CSGSequenceDS > m_DS
void OnMouseWheel(wxMouseEvent &event)
int m_MarkerHandlerIndex
Marker handler index among all registered handlers.
void SetHorizontal(bool b_horz, bool b_flip)
virtual void ResetSearch() override
TRangeVec m_BackForwardHistory
void OnLeftDblClick(wxMouseEvent &event)
void UpdateConfig()
the config object just changed. Do what is necessary.
bool AllTracksCreated() const
virtual TModelUnit MZHH_GetScale(EScaleType type) override
CMouseZoomHandler m_MouseZoomHandler
void ResetObjectSelection()
virtual void Update(void) override
void GetCurrentObject(int mouse_x, int mouse_y, TConstObjects &objs)
void SelectObject(const CObject *obj, bool verified)
virtual void MZHH_ZoomPoint(const TModelPoint &point, TModelUnit factor) override
CRef< CSeqGraphicRenderer > m_Renderer
virtual void LTH_PushEventHandler(wxEvtHandler *handler) override
CStickyTooltipHandler m_TooltipManager
void AdjustViewPortHeightToImage()
bool m_Title
When rendering vector image, add a title.
virtual CTooltipInfo TTHH_GetTooltip(const wxRect &rect) override
Return the contents to be displayed in the tool tip.
void x_OnPurgeMarkers(CEvent *)
CFeaturePanel * GetFeaturePanel()
void SetExternalGlyphs(const CSeqGlyph::TObjects &objs)
CSGSequenceDS * GetDataSource(void)
virtual int x_GetAreaByVPPos(int vp_x, int vp_y) override
void ResetRangeSelection()
virtual void LTH_ConfigureTracksDlg(const string &category) override
void OnKeyUp(wxKeyEvent &event)
void SaveCurrentRange()
For Back or Forward operations.
void OnLeftUp(wxMouseEvent &event)
bool x_HasDefaultMarker() const
void ModifyMarker(const string &id, const string &label, TSeqPos pos, const CRgbaColor color)
virtual void MZHH_EndOp() override
size_t GetMarkerNum() const
virtual void MZHH_Scroll(TModelUnit d_x, TModelUnit d_y) override
virtual TModelUnit SHH_GetModelByWindow(int z, EOrientation orient) override
virtual TVPPoint GetPortSize(void) override
Get GL view port size.
virtual TSeqPos SMHH_GetSeqMark() const override
If the host needs to dictate/store the marker position, then it needs to return a non (TSeqPos)-1 val...
virtual void SHH_OnChanged() override
ISelHandlerHost implementation.
size_t m_BackForwardPos
position in m_BackForwardHistory
CIRef< ISGDataSourceContext > m_DSContext
bool x_ModifyMarker(CRef< CMarker > &marker, const string &id, const string &label, const CRgbaColor color)
CLinearSelHandler::TRangeColl TRangeColl
virtual CRef< CLayoutTrack > THH_GetLayoutTrack() override
Get the layout track under the current mouse position.
virtual bool TTHH_ProcessURL(const wxString &href) override
Return true if the specified URL has been processed. Used for custom commands.
void DeSelectObject(const CObject *obj)
void SelectLastHitObject(int mouse_x, int mouse_y)
virtual string TTHH_NeedTooltip(const wxPoint &pt) override
Return id of the underlying element to dispaly a tooltip, otherwise "".
CLayoutTrackHandler m_TrackHandler
void OnSearchTip(const string &tip_id, const wxRect &tip_rect)
void OnLeftDown(wxMouseEvent &event)
int GetPopupArea(wxPoint pos)
void OnZoomTip(const string &tip_id, const wxRect &)
void OnKeyDown(wxKeyEvent &event)
virtual void RenderVectorGraphics(int vp_width, int vp_height) override
Render for vector output.
void SetMarkers(const string &markers)
virtual void LTH_PopEventHandler() override
string x_GetCachedTipId(const CSeqGlyph *glyph) const
bool CanZoomSelection(void)
void SetSeqMarker(TModelPoint point)
CLinearSelHandler m_SelHandler
void OnKillFocus(wxFocusEvent &event)
void SetNonAsnInput(const INonAsnTrackData &data)
void OnInfoTip(const string &)
void RenameMarker(const string &id, const string &label)
void x_AddNewMarker(CRef< CMarker > marker, const string &label, const CRgbaColor &color)
void OnMotion(wxMouseEvent &event)
void AddRangeMarker(const string &name, TSeqRange range, const CRgbaColor color)
void OnContextMenu(wxContextMenuEvent &event)
virtual TVPUnit SHH_GetWindowByModel(TModelUnit z, EOrientation orient) override
void UpdateData(TSeqPos from, TSeqPos to)
bool IsObjectSelected(const CObject *obj)
void RenderVectorGraphics()
CGlPane & GetRulerGlPane()
void SetNeedUpdateSelection()
CRef< CSeqGlyph > HitTest(int x, int y)
void SetVertScroll(TModelUnit val)
void ResetObjectSelection(void)
bool HasSelectedObjects() const
void DeSelectObject(const CObject *obj)
void GetObjectSelection(ncbi::TConstObjects &objs) const
CFeaturePanel * GetFeaturePanel()
void SelectObjByRect(const TVPRect &rc)
void SetNonAsnInput(const INonAsnTrackData &data)
void SetExternalGlyphs(const CSeqGlyph::TObjects &objs)
void SetDSContext(ISGDataSourceContext *ds_ctx)
CSeqGraphicRenderer inline methods.
void SetHost(ILayoutTrackHost *host)
void UpdateConfig(CRef< CSeqGraphicConfig > config)
bool AllJobsFinished() const
void SetHorizontal(bool b_horz, bool b_flip, const TVPRect &rc, bool reset_model_limit=false)
void SetInputObject(SConstScopedObject &obj)
const CSeqGlyph::TConstObjects & GetSelectedLayoutObjects()
TSeqPos Screen2Seq(TVPUnit x, TVPUnit y)
pixels to sequence translation.
TSeqPos Screen2SeqWidth(TVPUnit vp)
CGlPane & GetFeatGlPane()
Expose a few GlPanes.
void SelectObject(const CObject *obj, bool verified)
bool AllTracksCreated() const
TModelUnit GetLayoutHeight() const
retrieve the expected height of this widget.
void SetRulerSeqStart(TSeqPos pos)
Ruler Mark.
TSeqRange GetVisibleRange() const
void ZoomOnRange(const TModelRange &range, bool round_to_base=false)
zoom to the given range.
void UpdateVectorLayout()
Class CSeqMarkHandler represents in GUI a single "hairpin" on a sequence bar.
const CRgbaColor & GetColor() const
const string & GetLabel() const
void SetId(const string &id)
TSeqPos GetExtendedPos() const
EMarkerType GetMarkerType() const
void SetLabel(const string &label)
void SetPos(TModelUnit pos)
void SetHost(ISeqMarkHandlerHost *pHost)
namespace ncbi::objects::
@ eWidgetSelectionChanged
a view has been destroyed
@ eWidgetDataChanged
notification from child to parent that the underlying data has changed
@ eWidgetRangeChanged
notification from child to parent that the visible range has changed
Interface for testing cancellation request in a long lasting operation.
Visitor interface for applying any potential actions or algorithms.
virtual const TIntervals & GetIntervals(void) const =0
access sub-intervals (if any).
virtual CConstRef< CObject > GetObject(TSeqPos pos) const =0
access our core component - we wrap an object(s) of some sort.
virtual const objects::CSeq_loc & GetLocation(void) const =0
access the position of this object.
virtual string GetSignature() const =0
return signature for this glyph.
vector< TSeqRange > TIntervals
container_type::const_iterator const_iterator
container_type::iterator iterator
const_iterator begin() const
const_iterator end() const
iterator_bool insert(const value_type &val)
container_type::value_type value_type
const_iterator find(const key_type &key) const
void(*)(CSeq_entry_Handle seh, IWorkbench *wb, const CSerialObject &obj) handler
static vector< string > arr
static const struct name_t names[]
static DLIST_TYPE *DLIST_NAME() first(DLIST_LIST_TYPE *list)
static DLIST_TYPE *DLIST_NAME() next(DLIST_LIST_TYPE *list, DLIST_TYPE *item)
std::ofstream out("events_result.xml")
main entry point for tests
unsigned int TSeqPos
Type for sequence locations and lengths.
#define ITERATE(Type, Var, Cont)
ITERATE macro to sequence through container elements.
#define NON_CONST_ITERATE(Type, Var, Cont)
Non constant version of ITERATE macro.
void swap(NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair1, NCBI_NS_NCBI::pair_base_member< T1, T2 > &pair2)
#define LOG_POST(message)
This macro is deprecated and it's strongly recomended to move in all projects (except tests) to macro...
void Error(CExceptionArgs_Base &args)
#define NCBI_CATCH(message)
Catch CExceptions as well This macro is deprecated - use *_X or *_XX variant instead of it.
const string & GetMsg(void) const
Get message string.
void Warning(CExceptionArgs_Base &args)
CRef< objects::CSeqMapSwitchPoint > GetSwitchPoints() const
const objects::CSeq_loc & GetLocation(void) const
Access the alignments's remapped location.
static CGlResMgr & Instance()
virtual void Viewport(GLint x, GLint y, GLsizei width, GLsizei height)=0
virtual void Translatef(GLfloat x, GLfloat y, GLfloat z)=0
virtual void Enable(GLenum glstate)=0
virtual void LineStipple(GLint factor, GLushort pattern)=0
Set line stipple pattern: glLineStipple(). Deprecated in gl 3.2+.
CIRef< IRender > GetRenderer(ERenderTarget target)
Returns first renderer in m_Renderers that renders to 'target'.
virtual void Begin(GLenum mode)=0
Start rendering.
CGlPoint< TVPUnit > TVPPoint
virtual void BlendFunc(GLenum sfactor, GLenum dfactor)=0
Options to be used when GL_BLEND is enabled.
void Color3f(GLfloat r, GLfloat g, GLfloat b)
TModelPoint UnProject(TVPUnit m_x, TVPUnit m_y) const
virtual void MatrixMode(GLenum mode)=0
TVPUnit ProjectX(TModelUnit m_x) const
IRender & GetGl()
convenience function for getting current render manager
void Vertex2d(GLdouble x, GLdouble y)
TVPRect & GetViewport(void)
virtual void BeginText(const CGlTextureFont *font, const CRgbaColor &color)=0
Text is drawn is pixel coordinates.
TModelUnit GetOffsetY() const
virtual TModelUnit GetFontDescender() const
virtual void LoadIdentity()=0
TVPUnit ProjectY(TModelUnit m_y) const
virtual void EndText()=0
Pops matrices and attributes after writing text.
TModelUnit UnProjectX(TVPUnit m_x) const
virtual void PopMatrix()=0
CGlPoint< T > CenterPoint() const
virtual void ShadeModel(GLenum mode)=0
Set shade model for default lighting: glShadeModel(GL_FLAT or GL_SMOOTH)
void AddRenderer(CIRef< IRender > rm)
Get/Set Renderer.
bool PtInRect(T x, T y) const
virtual void End()=0
Finish rendering (create buffer and send to renderer)
#define CHECK_GLERROR()
Same as CGlUtils::CheckGlError except the log message will include the name of the function logging t...
TModelUnit UnProjectY(TVPUnit m_y) const
CRange< TModelUnit > TModelRange
TModelUnit GetZoomAllScaleX(void) const
void SetCurrentRenderer(CIRef< IRender > rm)
Set current renderer (rm must already be in m_Renderers)
void Color4f(GLfloat r, GLfloat g, GLfloat b, GLfloat a)
virtual void WriteText(TModelUnit x, TModelUnit y, const char *text, TModelUnit rotate_degrees=0.0)=0
Write text at specified model coords.
virtual TModelUnit TextHeight(void) const
TModelRect & GetVisibleRect(void)
void Vertex3d(GLdouble x, GLdouble y, GLdouble z)
virtual void Disable(GLenum glstate)=0
glDisable()
virtual void Ortho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble nearVal, GLdouble farVal)=0
virtual void LineWidth(GLfloat w)=0
Set line width for drawing: glLineWidth()
TModelUnit GetMinScaleX(void) const
TModelUnit GetScaleX(void) const
CGlPoint< TModelUnit > TModelPoint
virtual void Rectf(GLfloat x1, GLfloat y1, GLfloat x2, GLfloat y2)=0
Rect() functions also do Begin() and End() (as in OpenGL)
virtual void ColorC(const CRgbaColor &c)=0
Set current color (glColor{3,4}{f,d}{v,})
bool Intersects(const CGlRect &R) const
virtual void PushMatrix()=0
string ToString(bool printAlpha=true, bool uchars=true) const
Return a string representation of the current color.
vector< CConstRef< CObject > > TConstObjects
static CIRef< ITooltipFormatter > CreateTooltipFormatter(ETooltipFormatters)
factory for requested tooltip formatter creation
void Post(CRef< CEvent > evt, EDispatch disp_how=eDispatch_Default, int pool_name=ePool_Default)
Handles an event asynchronously (process and/or dispatch).
#define ON_EVENT(type, id, handler)
static void TokenizeWithEscape(const string &str, const string &delim, vector< string > &tokens, bool remove_escape=false)
Tokenize a string using the delim.
#define END_EVENT_MAP()
Ends definition of Command Map.
#define BEGIN_EVENT_MAP(thisClass, baseClass)
Begins definition of Command Map for CEventHandler-derived class.
virtual void AddListener(CEventHandler *listener, int pool_name=ePool_Default)
Add a listener.
virtual bool Send(CEvent *evt, EDispatch disp_how=eDispatch_Default, int pool_name=ePool_Default)
Sends an event synchronously.
@ eTooltipFormatter_Html
generated table is HTML attributes (no CSS) based, generate NCBI URLs are absolute (recommended for G...
@ eEvent_Message
message from one class to another
@ eDispatch_Default
dispatch until handled at least by one handler
TRange GetTotalRange(void) const
ENa_strand GetStrand(const CSeq_loc &loc, CScope *scope=0)
Returns eNa_strand_unknown if multiple Bioseqs in loc Returns eNa_strand_other if multiple strands in...
bool Empty(void) const THROWS_NONE
Check if CConstRef is empty – not pointing to any object which means having a null value.
TObjectType * GetPointer(void) const THROWS_NONE
Get pointer,.
TObjectType * GetPointer(void) THROWS_NONE
Get pointer,.
void Reset(void)
Reset reference object.
void Reset(void)
Reset reference object.
TRefType Lock(void) const
Lock the object and return reference to it.
void Reset(void)
Reset the containing pointer to null.
bool IsNull(void) const THROWS_NONE
Check if pointer is null – same effect as Empty().
TObjectType * GetPointerOrNull(void) THROWS_NONE
Get pointer value.
uint32_t Uint4
4-byte (32-bit) unsigned integer
position_type GetLength(void) const
bool IntersectingWith(const TThisType &r) const
TThisType IntersectionWith(const TThisType &r) const
CRange< TSeqPos > TSeqRange
typedefs for sequence ranges
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static string IntToString(int value, TNumToStringFlags flags=0, int base=10)
Convert int to string.
static SIZE_TYPE Find(const CTempString str, const CTempString pattern, ECase use_case=eCase, EDirection direction=eForwardSearch, SIZE_TYPE occurrence=0)
Find the pattern in the string.
static bool StartsWith(const CTempString str, const CTempString start, ECase use_case=eCase)
Check if a string starts with a specified prefix value.
static enable_if< is_arithmetic< TNumeric >::value||is_convertible< TNumeric, Int8 >::value, string >::type NumericToString(TNumeric value, TNumToStringFlags flags=0, int base=10)
Convert numeric value to string.
static string TruncateSpaces(const string &str, ETrunc where=eTrunc_Both)
Truncate spaces in a string.
@ eReverseSearch
Search in a backward direction.
@ eCase
Case sensitive compare.
unsigned short GetPort() const
Get the listening port number back.
static const char label[]
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
void SetTo(TTo value)
Assign a value to To data member.
static void text(MDB_val *v)
TSeqRange SplitPosOrRange(const string &text)
range(_Ty, _Ty) -> range< _Ty >
Defines: CTimeFormat - storage class for time format.
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
double f(double x_, const double &y_)
static const char *const strings[]
static string s_EscapeCommaAndPipe(const string &str)
static string s_GetRandomTipID()
ITooltip Implementation TC_NeedTooltip() and TC_GetTooltip() is evrything needed to show toolitps.
static string s_GetTrackName(const string &tip_id)
static const string kDefaultMarker
static const string kNamedMarker
static const string kCommonTipId
static const string kDefaultMarkerLabel
static const char * str(char *buf, int n)
void SetFocus(CRef< objects::CSeq_entry > entry)
C++ wrappers for the Perl-compatible regular expression (PCRE) library.
wxRect GetScreenRect(const wxWindow &win)
list< STokenInfo > TTokens