void HexEditorCtrl::PaintSelection( void ){ PreparePaintTAGs(); if( select->GetState() ){ int64_t start_byte = select->StartOffset; int64_t end_byte = select->EndOffset; if(start_byte > end_byte){ // swap if start > end int64_t temp = start_byte; start_byte = end_byte; end_byte = temp; } if( start_byte >= page_offset + GetByteCount() ){ // ...[..].TAG... ClearPaint(); return; } else if( start_byte <= page_offset ) // ...TA[G..].... start_byte = page_offset; if( end_byte < page_offset ){ // ..TAG..[...]... ClearPaint(); return; } else if( end_byte >= page_offset + GetByteCount() ) //...[..T]AG... end_byte = GetByteCount() + page_offset; start_byte -= page_offset; end_byte -= page_offset; text_ctrl->SetSelection(start_byte/(GetCharToHexSize()/2), end_byte/(GetCharToHexSize()/2)+1); hex_ctrl ->SetSelection(start_byte*2, (end_byte+1)*2); } else ClearPaint(); }
void HexEditorCtrl::TagCreator( bool QuickTag ){ if( select->GetState() ){ TagElement *TE = new TagElement; TE->start=select->StartOffset; TE->end=select->EndOffset; srand ( time(NULL) ); //static keeps color values for next tag here! static wxColour last_tag_color = rand(); static wxColour last_font_color = wxSystemSettings::GetColour( wxSYS_COLOUR_WINDOWTEXT ); TE->NoteClrData.SetColour( QuickTag ? rand() : last_tag_color ); TE->FontClrData.SetColour( last_font_color ); int a=wxID_SAVE; if( not QuickTag ){ TagDialog x( *TE, this ); a=x.ShowModal(); } if( a == wxID_SAVE ){ last_tag_color = TE->NoteClrData.GetColour(); last_font_color = TE->FontClrData.GetColour(); MainTagArray.Add( TE ); PreparePaintTAGs(); ClearPaint(); text_ctrl->RePaint(); hex_ctrl ->RePaint(); } //delete TE; NO! Don't delete this tags! } //event.Skip( true ); wxUpdateUIEvent eventx( TAG_CHANGE_EVENT ); GetEventHandler()->ProcessEvent( eventx ); }
bool HexEditorCtrl::LoadTAGS( wxFileName flnm ){ wxXmlDocument doc; if( flnm.IsFileReadable() ) if( doc.Load( flnm.GetFullPath(), wxT("UTF-8")) ) if (doc.GetRoot()->GetName() == wxT("wxHexEditor_XML_TAG")){ wxXmlNode *child = doc.GetRoot()->GetChildren(); child = child->GetChildren(); //<filename> -> <TAG> while (child) { if (child->GetName() == wxT("TAG")) { wxString propvalue = child->GetAttribute(wxT("id"), wxEmptyString); #ifdef _DEBUG_TAG_ std::cout << "TAG ID:" << propvalue.ToAscii() << " readed.\n"; #endif TagElement *tmp = new TagElement(); long long unsigned xxl=0; for( wxXmlNode *element = child->GetChildren() ; element != NULL ; element = element->GetNext() ){ if (element->GetName() == wxT("start_offset")){ #ifdef __WXMSW__ //I don't knwo why but ToULongLong dowen't work on windows by mingw. xxl = atoll( element->GetNodeContent().ToAscii() ); #else element->GetNodeContent().ToULongLong( &xxl, 10 ); #endif tmp->start = xxl; } else if (element->GetName() == wxT("end_offset")){ #ifdef __WXMSW__ xxl = atoll( element->GetNodeContent().ToAscii() ); #else element->GetNodeContent().ToULongLong( &xxl, 10 ); #endif tmp->end = xxl; } else if (element->GetName() == wxT("tag_text")) tmp->tag = element->GetNodeContent(); else if (element->GetName() == wxT("font_colour")) tmp->FontClrData.SetColour( wxColour(element->GetNodeContent()) ); else if (element->GetName() == wxT("note_colour")) tmp->NoteClrData.SetColour( wxColour(element->GetNodeContent()) ); } #ifdef _DEBUG_TAG_ tmp->print(); #endif MainTagArray.Add(tmp); } child = child->GetNext(); } MainTagArray.Sort(TagElementSort); PreparePaintTAGs(); ClearPaint(); text_ctrl->RePaint(); hex_ctrl ->RePaint(); return true; } return false; }
void HexEditorCtrl::OnTagEdit( wxCommandEvent& event ){ TagElement *TAG; uint64_t pos = LastRightClickAt; #ifdef _DEBUG_TAG_ std::cout << " Tag Edit on " << pos << std::endl; #endif for( unsigned i = 0 ; i < MainTagArray.Count() ; i++ ){ TAG = MainTagArray.Item(i); if( TAG->isCover(pos) ){ TagHideAll(); //Hide first, or BUG by double hide... TagElement TAGtemp = *TAG; TagDialog *x=new TagDialog( TAGtemp, this ); switch( x->ShowModal() ){ case wxID_SAVE: *TAG = TAGtemp; PreparePaintTAGs(); ClearPaint(); text_ctrl->RePaint(); hex_ctrl ->RePaint(); break; case wxID_DELETE: delete TAG; MainTagArray.Remove(TAG); PreparePaintTAGs(); ClearPaint(); text_ctrl->RePaint(); hex_ctrl ->RePaint(); break; default: break; } } } wxUpdateUIEvent eventx( TAG_CHANGE_EVENT ); GetEventHandler()->ProcessEvent( eventx ); }