39 #include <wx/settings.h>
60 m_bHitResizable(
false),
62 m_CursorId(wxCURSOR_DEFAULT),
64 m_FillColor(0.5
f, 0.5
f, 1.0
f, 0.5
f),
65 m_FrameColor(0.25
f, 0.25
f, 0.5
f, 1.0
f),
68 m_DragArea = wxSystemSettings::GetMetric(wxSYS_DRAG_X);
200 return wxGetKeyState(wxKeyCode(
'M'));
207 wxPoint ms_pos =
event.GetPosition();
218 if(event.Dragging()) {
237 wxPoint ms_pos =
event.GetPosition();
250 int k =
event.GetKeyCode();
251 if(k == WXK_DELETE) {
413 bool hit_start =
false;
425 bool seq_start = (hit_start ==
positive);
438 start_pos = (
TSeqPos) floor(mX);
475 bool hit_start =
false;
499 bool bMinStart =
false;
511 int D =
abs(X - FromX);
512 if(MinD < 0 || MinD >
D) {
527 hit_start = bMinStart;
568 if(pos >
R.GetFrom()) {
572 R.SetToOpen(
R.GetFrom());
577 if(pos >
R.GetFrom()) {
580 R.SetToOpen(
R.GetFrom());
585 if(pos <=
R.GetToOpen()) {
588 R.SetFrom(
R.GetToOpen());
613 switch(
delta.m_StartState) {
619 if(
R.GetTo() > hit_r.
GetTo()) {
639 if(
R.GetTo() > hit_r.
GetTo()) {
658 if(! rcV.
IsEmpty() && pAlnDS && pModel) {
672 bool bVisible = ! (bottom_y < rcV.
Top() || top_y > rcV.
Bottom());
686 gl.
Rectd(x1, bottom_y - offset_y, x2, top_y - offset_y);
691 gl.
Rectd(x1, bottom_y - offset_y, x2, top_y - offset_y);
707 gl.
Color4d(0.25, 0.25, 1.0, 1.0);
709 gl.
Rectd(x1, bottom_y - offset_y,
710 x2, top_y - offset_y);
CAlignMarkHandler manages handling and editing of marks on alignments.
void SetHost(IAlignMarkHandlerHost *pHost)
wxStockCursor m_CursorId
operation type
void OnMouseCaptureLost(wxMouseCaptureLostEvent &evt)
void MarkRow(TNumrow row, const TRangeColl &C, bool set)
mark/unmark a collection of intervals in alignment coordinates
void OnLeftUp(wxMouseEvent &event)
IAlnExplorer::TNumrow TNumrow
TSeqPos x_ClipPosByRange(TSeqPos Pos)
void OnMotion(wxMouseEvent &event)
IAlignMarkHandlerHost::TRangeColl TRangeColl
void OnKeyUp(wxKeyEvent &event)
TRowToDeltaMap m_mpRowToDelta
Marks.
const IAlignMarkHandlerHost * x_GetHost() const
void x_OnSelectCursor(const wxPoint &ms_pos)
void MarkSelectedRows(const TRangeColl &C, bool set)
IAlignMarkHandlerHost * m_Host
Ranges being edited.
void x_OnChangeSelRange(const wxPoint &ms_pos)
void x_UpdateMarks()
applies changes in SMarkDelta to mark collection
TRowToMarkMap m_mpRowToMark
bool x_HitRangeBorder(const wxPoint &ms_pos) const
void Render(CGlPane &Pane)
IGenericHandlerHost * GetGenericHost()
virtual wxEvtHandler * GetEvtHandler()
void OnKeyDown(wxKeyEvent &event)
void x_UpdateSelection(TSeqPos NewPos)
void x_HitTest(TNumrow Row, const TRangeColl &C, int X, TSeqRange &Range, bool &bHitStart) const
void OnLeftDown(wxMouseEvent &event)
void x_OnEndSelRange(EState new_state, const wxPoint &ms_pos)
void x_InitDeltaMap(const wxPoint &ms_pos)
void x_UpdateDelta(TSeqRange &R, SMarkDelta::EExtState &State, TSeqPos Pos)
void MarkRowSeq(TNumrow row, const TRangeColl &C, bool set)
mark/unmark a collection of intervals in seq. coordinates
const TRowToMarkMap & GetMarks() const
bool x_HitSelectedLine(const wxPoint &ms_pos)
void x_OnStartSel(const wxPoint &ms_pos)
Signal handlers.
const TRangeColl * GetMark(TNumrow row) const
virtual void SetPane(CGlPane *pane)
void x_UpdateState(bool b_key, const wxPoint &ms_pos)
TSeqRange x_AlnRangeFromSeqRange(const IAlnMultiDataSource *pAlnDS, TNumrow row, const TSeqRange &seq_r)
TModelUnit x_MouseToSeqPos(const wxPoint &ms_pos)
helper functions
TRangeVector::const_iterator const_iterator
TThisType & CombineWith(const TRange &r)
TThisType & Subtract(const TRange &r)
interface IAlignMarkHandlerHost
virtual TModelUnit MHH_GetSeqPosByX(int X) const =0
virtual int MHH_GetLinePosY(int Index) const =0
virtual int MHH_GetLineByRowNum(TNumrow Row) const =0
virtual int MHH_GetLineByWindowY(int Y) const =0
virtual int MHH_GetLineHeight(int Index) const =0
virtual const TSelListModel * MHH_GetSelListModel() const =0
virtual const IAlnMultiDataSource * MHH_GetAlnDS() const =0
virtual TNumrow MHH_GetRowByLine(int Index) const =0
ESearchDirection
Position search options.
@ eRight
Towards higher aln coord (always to the right)
@ eLeft
Towards lower aln coord (always to the left)
IAlnMultiDataSource - interface to a data source representing an abstract multiple alignment.
virtual TSignedSeqPos GetSeqPosFromAlnPos(TNumrow for_row, TSeqPos aln_pos, IAlnExplorer::ESearchDirection dir=IAlnExplorer::eNone, bool try_reverse_dir=true) const =0
virtual bool IsPositiveStrand(TNumrow row) const =0
virtual TSignedSeqPos GetAlnPosFromSeqPos(TNumrow row, TSeqPos seq_pos, IAlnExplorer::ESearchDirection dir=IAlnExplorer::eNone, bool try_reverse_dir=true) const =0
virtual bool IsNegativeStrand(TNumrow row) const =0
virtual void GHH_ReleaseMouse()=0
releases captured mouse
virtual void GHH_Redraw()=0
redraws the Host and the handler
virtual void GHH_CaptureMouse()=0
captures mouse events in the hosting window for D&D
virtual void GHH_SetCursor(const wxCursor &cursor)=0
changes the cursor in the hosting window
virtual void SLM_GetSelectedIndices(TIndexVector &vIndices) const =0
virtual TItem SLM_GetItem(TIndex index) const =0
vector< TIndex > TIndexVector
virtual bool SLM_IsItemSelected(TIndex index) const =0
container_type::const_iterator const_iterator
container_type::iterator iterator
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
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.
TVPUnit ProjectX(TModelUnit m_x) const
IRender & GetGl()
convenience function for getting current render manager
TModelUnit GetOffsetY() const
void Color4d(GLdouble r, GLdouble g, GLdouble b, GLdouble a)
TModelRect & GetModelLimitsRect(void)
virtual void PolygonMode(GLenum face, GLenum mode)=0
Set the polygon rasterization mode.
TModelRect & GetVisibleRect(void)
TModelUnit GetOffsetX() const
virtual void ColorC(const CRgbaColor &c)=0
Set current color (glColor{3,4}{f,d}{v,})
void Rectd(GLdouble x1, GLdouble y1, GLdouble x2, GLdouble y2)
bool NotEmpty(void) const
position_type GetToOpen(void) const
TThisType & SetLength(position_type length)
CRange< TSeqPos > TSeqRange
typedefs for sequence ranges
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
void SetFrom(TFrom value)
Assign a value to From data member.
TTo GetTo(void) const
Get the To member data.
TFrom GetFrom(void) const
Get the From member data.
Int4 delta(size_t dimension_, const Int4 *score_)
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
#define row(bind, expected)
helper class representing range being edited