def change_track_position(self, track_uid, old_pos, new_pos): """ Change track position. :class:`~GRIPy-3.ui.mvc_classes.TrackController` Parameters ---------- track_uid : :class:`~GRIPy-3.ui.mvc_classes.TrackController` uid. The track identificator. labelpad : scalar, optional, default: None Spacing in points between the label and the x-axis. """ UIM = UIManager() track_pos = UIM.get(track_uid) pos = old_pos # if new_pos == self.view.get_adjusted_absolute_track_position( track_pos.uid): return if new_pos < old_pos: while pos > new_pos: tracks_next_pos = UIM.exec_query('track_controller', self.uid, 'pos=' + str(pos - 1)) if track_pos in tracks_next_pos: tracks_next_pos.remove(track_pos) if len(tracks_next_pos) == 0: return track_next_pos = tracks_next_pos[0] if not track_pos.overview and not track_next_pos.overview: if new_pos != self.view.get_track_position( track_pos.uid, False): self.view.change_absolute_track_position_on_splitter( track_pos.uid, new_pos) track_next_pos.pos += 1 pos -= 1 else: while pos < new_pos: tracks_next_pos = UIM.exec_query('track_controller', self.uid, 'pos=' + str(pos + 1)) if track_pos in tracks_next_pos: tracks_next_pos.remove(track_pos) if len(tracks_next_pos) == 0: return track_next_pos = tracks_next_pos[0] if not track_pos.overview and not track_next_pos.overview: if new_pos != self.view.get_track_position( track_pos.uid, False): self.view.change_absolute_track_position_on_splitter( track_pos.uid, new_pos) track_next_pos.pos -= 1 pos += 1
def _reload_tracks_titles(self, pos, exclude_track_uid=None): """ From position on, reload Tracks titles. When a new :class:`~GRIPy-3.ui.mvc_classes.TrackController` object is created, others Tracks with position equal or greater must have their titles updates. Parameters ---------- pos: int First position to have title updated. exclude_track_uid: :class:`~GRIPy-3.ui.mvc_classes.TrackController` uid, optional. If given, exclude the Track to have title updated. """ UIM = UIManager() tracks_affected = UIM.exec_query('track_controller', self._controller_uid, 'pos>=' + str(pos)) if exclude_track_uid: exclude_track = UIM.get(exclude_track_uid) tracks_affected.remove(exclude_track) for track in tracks_affected: track.reload_track_title()
def insert_track(self): """ Insert new tracks. If there is any selected track, create a new :class:`~GRIPy-3.ui.mvc_classes.TrackController` at last position. Instead, for every selected track creates a new :class:`~GRIPy-3.ui.mvc_classes.TrackController` object one position before. Returns ------- new_tracks_uids : list A list containing :class:`~GRIPy-3.ui.mvc_classes.TrackController` objects uids. """ UIM = UIManager() selected_tracks = UIM.exec_query('track_controller', self.uid, 'selected=True', orderby='pos', reverse=True) # There isn't any track selected if not selected_tracks: new_track = UIM.create('track_controller', self.uid, pos=len(self)) return [new_track.uid] # Instead, insert new tracks before every selected track new_tracks_uids = [] for track in selected_tracks: new_track = UIM.create('track_controller', self.uid, pos=track.pos) new_tracks_uids.append(new_track.uid) return new_tracks_uids
def remove_selected_tracks(self): """ Remove selected :class:`~GRIPy-3.ui.mvc_classes.TrackController` on :class:`WellPlot`. """ UIM = UIManager() selected_tracks = UIM.exec_query('track_controller', self.uid, 'selected=True', orderby='pos', reverse=True) for track in selected_tracks: UIM.remove(track.uid)
def get_overview_track(self): """ Returns the overview TrackController, if it exists. Returns ------- track : :class:`~GRIPy-3.ui.mvc_classes.TrackController` The track placed as Overview, or None if it does not exist. """ UIM = UIManager() query_list = UIM.exec_query('track_controller', self._controller_uid, 'overview=True') track = None if query_list: track = query_list[0] return track
def show_track(self, track_uid, show): UIM = UIManager() track = UIM.get(track_uid) if track.view.label: self._tracks_panel.top_splitter.ShowWindow(track.view.label, show) if not track.overview: self._tracks_panel.bottom_splitter.ShowWindow( track.view.track, show) else: raise Exception('show_track overview track???') tracks_affected = UIM.exec_query('track_controller', self._controller_uid, 'pos>=' + str(track.pos)) for track_affected in tracks_affected: if track_affected.uid != track.uid: #print 'track_affected.uid:', track_affected.uid track_affected.reload_track_title()
def _adjust_positions_after_track_deletion(self, pos): """ Adjust tracks position after a deletion. When one track (or more) is (are) deleted, the others with positions greater must have their positions adjusted. It is done in a silent way (not generating :class:`~GRIPy-3.ui.mvc_classes.TrackModel` events). Parameters ---------- pos: int Position of Track deleted. """ UIM = UIManager() tracks = UIM.exec_query('track_controller', self.uid, 'pos>' + str(pos)) for track in tracks: track.set_value_from_event('pos', track.pos - 1) track.reload_track_title()
def _change_width_for_selected_tracks(self, dragged_track_uid): """ Change width for a group of selected tracks. When some :class:`~GRIPy-3.ui.mvc_classes.TrackController` objects are selected and one of then have its width changed by a sash drag, the others will have the same new width. Parameters ---------- dragged_track_uid: :class:`~GRIPy-3.ui.mvc_classes.TrackController` uid. The track identificator for whose have its sash dragged. """ UIM = UIManager() dragged_track = UIM.get(dragged_track_uid) selected = UIM.exec_query('track_controller', self.uid, 'selected=True') for track in selected: if track.uid != dragged_track_uid: track.width = dragged_track.width
def _on_change_cursor_state(self, new_value, old_value): """ Unselect all tracks when WellPlotState.NORMAL_TOOL is trigged. Parameters ---------- new_value : WellPlotState. Tool type setted by user. old_value: Not used. Just to follow GRIPy's pubsub pattern. It is necessary and cannot be removed. """ if new_value != WellPlotState.NORMAL_TOOL: return UIM = UIManager() selected_tracks = UIM.exec_query('track_controller', self.uid, 'selected=True', orderby='pos') if selected_tracks: for track in selected_tracks: track.selected = False
def _increment_tracks_positions(self, pos, exclude_track_uid=None): """ From position on, increment Tracks positions by 1. When a new :class:`~GRIPy-3.ui.mvc_classes.TrackController` object is created, others Tracks with position equal or greater must have their positions incremented by 1. It is done in a silent way (not generating :class:`~GRIPy-3.ui.mvc_classes.TrackModel` events), because the overview Track keep its original position. Parameters ---------- pos: int First position to be incremented. exclude_track_uid: :class:`~GRIPy-3.ui.mvc_classes.TrackController` uid, optional. If given, exclude the Track to have position incremented. """ UIM = UIManager() controller = UIM.get(self._controller_uid) if pos >= len(controller): return tracks_affected = UIM.exec_query('track_controller', self._controller_uid, 'pos>=' + str(pos)) # There is only one Track and it should be the "exclude_track" if len(tracks_affected) == 1: return # else: if exclude_track_uid: exclude_track = UIM.get(exclude_track_uid) tracks_affected.remove(exclude_track) for track in tracks_affected: # Silent way - not generating model events. track.set_value_from_event('pos', track.pos + 1)