// Returns the marker symbol id for markerNum in the target view.
int MARKERSYMBOL(int markerNumber, unsigned int targetView)
{
if ( (markerNumber > npp_plugin::markers::NB_MAX_PLUGINMARKERS) || (markerNumber < 0) ||
(targetView > SUB_VIEW) ) return -1;
// Make the protected ViewStyle public to allow access to the marker array.
class MarkerAccessor : public Editor {
public:
using Editor::vs;
};
MarkerAccessor* ma = reinterpret_cast<MarkerAccessor *>(::GetWindowLongPtr( npp_plugin::hViewByInt( targetView ), 0));
int markType = -1;
LineMarker* lm = &ma->vs.markers[markerNumber]; // Mark to test.
LineMarker em; // Empty mark to test against.
markType = lm->markType;
// Test if the marker is still at default values.
if ( ( em.markType == lm->markType ) &&
( em.alpha == lm->alpha ) &&
( em.fore.allocated.AsLong() == lm->fore.allocated.AsLong() ) &&
( em.back.allocated.AsLong() == lm->back.allocated.AsLong() ) ) {
markType = npp_plugin::markers::SC_MARK_AVAILABLE;
}
return ( markType );
}
// Reset a marker definition back to default values, and delete marker from margin.
void MARKERUNDEFINE( int markerNumber, unsigned int targetView)
{
if ( (markerNumber > npp_plugin::markers::NB_MAX_PLUGINMARKERS) || (markerNumber < 0) ||
(targetView > SUB_VIEW) ) return;
HWND hView = npp_plugin::hViewByInt( targetView );
LineMarker em; // Empty mark to copy from.
// Remove existing marker in margin
::SendMessage( hView, SCI_MARKERDELETEALL, markerNumber, 0 );
// Since PIXMAP definitions are sent as pointers to Scintilla the calling plugin is
// reponsible to clear thos.
::SendMessage( hView, SCI_MARKERDEFINE, markerNumber, em.markType );
::SendMessage( hView, SCI_MARKERSETFORE, markerNumber, em.fore.allocated.AsLong() );
::SendMessage( hView, SCI_MARKERSETBACK, markerNumber, em.back.allocated.AsLong() );
::SendMessage( hView, SCI_MARKERSETALPHA, markerNumber, em.alpha );
}