Event TMGraphView::findEventAt(QPoint pos) { // Converting screen coordinates to real address and time unsigned long long address = displayAddressToRealAddress(view_address + pos.x()/address_zoom_factor); unsigned long long time = (unsigned long long)(view_time + pos.y()/time_zoom_factor); // Looking for the right memory block for(QList<MemoryBlock>::iterator block_it = blocks.begin(); block_it != blocks.end(); block_it++) { if(address < block_it->address) break;// We are too far in memory space else if(address >= block_it->address && address < block_it->address + block_it->size) { // Looking for the right event (if it exist) for(QList<Event>::iterator event_it = block_it->events.begin(); event_it != block_it->events.end(); event_it++) { if(time < event_it->time) break; // We are too far in time else if(time == event_it->time && address >= event_it->address && address < event_it->address + event_it->size) return *event_it; // Found it! } } } Event ev; ev.type = EVENT_UFO; return ev; }
void TMGraphView::zoomToOverview() { view_address = 0; view_time = 0; address_zoom_factor = width()/(double)total_bytes; time_zoom_factor = height()/(double)total_time; emit positionChange(displayAddressToRealAddress(view_address), view_time); update(); }
void TMGraphView::addressMove(long long da) { if(da < 0 && -da > view_address) view_address = 0; else if(da > 0 && da > 0xFFFFFFFFFFFFFFFF - view_address) view_address = 0xFFFFFFFFFFFFFFFF; else view_address += da; emit positionChange(displayAddressToRealAddress(view_address), view_time); }
void TMGraphView::timeMove(long long dt) { if(dt < 0 && -dt > view_time) view_time = 0; else if(dt > 0 && dt > 0xFFFFFFFFFFFFFFFF - view_time) view_time = 0xFFFFFFFFFFFFFFFF; else view_time += dt; emit positionChange(displayAddressToRealAddress(view_address), view_time); }
void TMGraphView::zoomToOverview() { view_address = 0; view_time = 0; updateZoomFactors(); emit positionChange(displayAddressToRealAddress(view_address), view_time); update(); }
void TMGraphView::onWindowResize() { // Special behaviour if overview: fit to new window size if (view_address == 0 && view_time == 0) { updateZoomFactors(); } // Otherwise, repaint at the same zoom level, thus showing more stuff if you increase window size, less stuff if you decrease it emit positionChange(displayAddressToRealAddress(view_address), view_time); update(); }
void TMGraphView::mouseMoveEvent(QMouseEvent * event) { if(event->buttons() & Qt::LeftButton) { addressMove((long)((drag_last_pos.x()-event->pos().x())/address_zoom_factor)); drag_last_pos.setX(event->pos().x()); timeMove((long)((drag_last_pos.y()-event->pos().y())/time_zoom_factor)); drag_last_pos.setY(event->pos().y()); update(); } emit cursorPositionChange(displayAddressToRealAddress(view_address + (long long)(event->pos().x()/address_zoom_factor)), view_time + (long long)(event->pos().y()/time_zoom_factor)); }
void TMGraphView::setTime(unsigned long long time) { view_time = time; emit positionChange(displayAddressToRealAddress(view_address), view_time); update(); }