Beispiel #1
0
    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
Beispiel #2
0
 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()
Beispiel #3
0
 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
Beispiel #4
0
 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)
Beispiel #5
0
 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
Beispiel #6
0
 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()
Beispiel #7
0
 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()
Beispiel #8
0
 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
Beispiel #9
0
 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
Beispiel #10
0
 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)