Changeset 8961:f65a43fc9f64 in orange


Ignore:
Timestamp:
09/14/11 11:00:09 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
793500d48b30e6b2b810b0cff9158198236aac1c
Message:

Rotate axis labels when there is not enough space to display them along the axis

File:
1 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/plot/owaxis.py

    r8735 r8961  
    131131 
    132132    def update(self, zoom_only = False): 
     133        self.update_ticks() 
    133134        line_color = self.plot.color(OWPalette.Axis) 
    134135        text_color = self.plot.color(OWPalette.Text) 
     
    148149        title_pos = self.graph_line.pointAt(title_p) 
    149150        v = self.graph_line.normalVector().unitVector() 
     151         
     152        dense_text = False 
    150153        if hasattr(self, 'title_margin'): 
    151154            offset = self.title_margin 
    152155        elif self._ticks: 
    153             if self.id in YAxes or self.always_horizontal_text: 
     156            if self.id in YAxes or self.always_horizontal_text or sum(len(t[1]) for t in self._ticks) > 60: 
    154157                offset = 50 
     158                dense_text = True 
    155159            else: 
    156160                offset = 35 
    157161        else: 
    158162            offset = 10 
     163 
    159164        if self.title_above: 
    160165            title_pos = title_pos + (v.p2() - v.p1())*(offset + QFontMetrics(self.title_item.font()).height()) 
     
    193198             
    194199        ## Labels 
    195          
    196         self.update_ticks() 
    197          
     200                 
    198201        n = len(self._ticks) 
    199202        resize_plot_item_list(self.label_items, n, QGraphicsTextItem, self) 
     
    226229                else: 
    227230                    item.setHtml(Qt.escape(text.strip())) 
    228             if self.id not in CartesianAxes and not self.always_horizontal_text: 
    229                 item.setRotation(-self.graph_line.angle()) 
    230231             
    231232            item.setTextWidth(-1) 
    232             if self.id in YAxes or self.always_horizontal_text: 
     233            text_angle = 0 
     234            if dense_text: 
    233235                w = min(item.boundingRect().width(), self.max_text_width) 
    234236                item.setTextWidth(w) 
     
    236238                    label_pos = tick_pos + n_p * (w + self.text_margin) + l_p * item.boundingRect().height()/2 
    237239                else: 
    238                     label_pos = tick_pos + n_p * (self.text_margin) + l_p * item.boundingRect().height()/2 
     240                    label_pos = tick_pos + n_p * (w + self.text_margin) - l_p * item.boundingRect().height()/2 
     241                text_angle = -90 if self.title_above else 90 
    239242            else: 
    240243                w = min(item.boundingRect().width(), QLineF(self.map_to_graph(pos - hs), self.map_to_graph(pos + hs) ).length()) 
    241244                label_pos = tick_pos + n_p * self.text_margin - l_p * w/2 
    242245                item.setTextWidth(w) 
     246                 
     247            if not self.always_horizontal_text: 
     248                item.setRotation(-self.graph_line.angle() - text_angle) 
    243249 
    244250            item.setPos(label_pos) 
Note: See TracChangeset for help on using the changeset viewer.