Changeset 8279:4b1ad78f862e in orange


Ignore:
Timestamp:
05/28/11 12:13:27 (3 years ago)
Author:
Noughmad <Noughmad@…>
Branch:
default
Convert:
737cfc917b0041f69f90d01b1d379165c3c83a44
Message:

Calculate positions for graph area, title and axes

Location:
orange/OrangeWidgets
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • orange/OrangeWidgets/Graph/axis.py

    r8274 r8279  
    22    The Axis class display an axis on a graph 
    33     
    4     The axis contains a line with configurable style, possible arrows, and a label 
     4    The axis contains a line with configurable style, possible arrows, and a title 
    55     
    66    .. attribute:: line_style 
    77        The LineStyle with which the axis line is drawn 
    88         
    9     .. attribute:: label 
     9    .. attribute:: title 
    1010        The string to be displayed alongside the axis 
    1111         
    12     .. method:: make_label 
    13         Makes a pretty label, with the quantity label in italics and the unit in normal text 
     12    .. method:: make_title 
     13        Makes a pretty title, with the quantity title in italics and the unit in normal text 
    1414""" 
    1515 
    16 from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsLineItem 
     16from PyQt4.QtGui import QGraphicsItemGroup, QGraphicsLineItem, QGraphicsTextItem 
    1717from PyQt4.QtCore import QLineF 
    1818 
     19from palette import * 
     20 
    1921class Axis(QGraphicsItemGroup): 
    20     def __init__(self, size, label, line = None, style=None, parent=None): 
     22    def __init__(self, size, title, line = None, style=None, parent=None): 
    2123        QGraphicsItemGroup.__init__(self, parent) 
    2224        self.size = size 
    23         if line: 
    24             self.line = line 
    25         else: 
    26             self.line = QLineF() 
    27             self.line.x1 = 0 
    28             self.line.y1 = 2 
    29             self.line.x2 = self.size.width() 
    30             self.line.y2 = 2 
    31         self.line_item = QGraphicsLineItem(self) 
    32         self.label_item = QGraphicsTextItem(self) 
    33         self.label = label 
     25        self.line = line 
     26        self.title = title 
    3427        if style: 
    3528            self.style = style 
    3629        else: 
    37             self.style = palette.shared_palette().axis_style 
     30            self.style = shared_palette().axis_style 
     31        self.line_item = QGraphicsLineItem(self) 
     32        self.title_item = QGraphicsTextItem(self) 
    3833        self.update() 
    3934 
    4035    def update(self): 
    4136        self.line_item.setLine(self.line) 
    42         self.label_item.setHtml(self.label) 
     37        self.title_item.setHtml(self.title) 
    4338         
    4439    @staticmethod 
    45     def make_label(label, unit = None): 
     40    def make_title(label, unit = None): 
    4641        lab = '<i>' + label + '</i>' 
    4742        if unit: 
    4843            lab = lab + ' [' + unit + ']' 
    4944        return lab 
     45         
     46    def set_line(self, line): 
     47        self.line = line 
     48        self.update() 
    5049     
     50    def set_title(self, title): 
     51        self.title = title 
     52        self.update() 
     53         
     54    def set_labels(self, labels): 
     55        #TODO 
     56        pass 
     57         
     58    def set_scale(self, min, max, step_size): 
     59        # TODO 
     60        pass 
     61     
     62    def set_tick_length(self, minor, medium, major): 
     63        # TODO 
     64        pass 
  • orange/OrangeWidgets/QtGraph.py

    r8278 r8279  
    3939 
    4040yLeft = 0 
    41 yRights = 1 
     41yRight = 1 
    4242xBottom = 2 
    4343xTop = 3 
     
    6767        self.setScene(self.canvas) 
    6868         
    69         self.axes = [xBottom, yLeft] 
     69        self.shown_axes = [xBottom, yLeft] 
     70        self.axes = dict() 
    7071        self.axis_margin = 150 
     72        self.title_margin = 100 
     73        self.showMainTitle = True 
     74        self.mainTitle = "Qt Graph" 
    7175        self.XaxisTitle = None 
    7276        self.YLaxisTitle = None 
     
    7478         
    7579        # Method aliases, because there are some methods with different names but same functions 
    76         self.replot = self.update 
    7780        self.repaint = self.update 
    7881        self.setCanvasBackground = self.setCanvasColor 
     
    157160            self.setTitle(self.mainTitle) 
    158161        else: 
    159             self.setTitle(QwtText()) 
     162            self.setTitle('') 
    160163        self.repaint() 
    161164 
     
    245248         
    246249    def setXlabels(self, labels): 
    247         # TODO 
    248         pass 
    249          
     250        if xBottom in self.axes: 
     251            self.setAxisLabels(xBottom, labels) 
     252        elif xTop in self.axes: 
     253            self.setAxisLabels(xTop, labels) 
     254         
     255    def setAxisLabels(self, axis_id, labels): 
     256        self.axes[axis_id].set_labels(labels) 
     257     
    250258    def setAxisScale(self, axis_id, min, max, step_size=0): 
    251         # TODO 
     259        self.axes[axis_id].set_scale(min, max, step_size) 
    252260        pass 
    253261         
    254262    def setAxisTitle(self, axis_id, title): 
    255         pass 
    256          
    257     def setTickLength(self, axis, minor, medium, major): 
     263        self.axes[axis_id].set_title(title) 
     264        pass 
     265         
     266    def setTickLength(self, axis_id, minor, medium, major): 
     267        self.axes[axis_id].set_tick_legth(minor, medium, major) 
    258268        pass 
    259269 
     
    278288    def addAxis(self, axis_id, line, text): 
    279289        a = axis.Axis() 
    280         self.axis[id] = a 
     290        self.axes[id] = a 
    281291         
    282292    def removeAllSelections(self): 
     
    287297            self.canvas.removeItem(c) 
    288298        del self.curves[:] 
     299         
     300    def replot(self): 
     301        graph_rect = QRectF(self.childrenRect()) 
     302         
     303        if self.showMainTitle and self.mainTitle: 
     304            self.title_item = QGraphicsTextItem(self.mainTitle) 
     305            title_size = self.title_item.boundingRect().size() 
     306            ## TODO: Check if the title is too big 
     307            self.title_item.setPos( graph_rect.width()/2 - title_size.width()/2, self.title_margin/2 - title_size.height()/2 ) 
     308            self.canvas.addItem(self.title_item) 
     309            graph_rect.setTop(graph_rect.top() + self.title_margin) 
     310             
     311        axis_rects = dict() 
     312        margin = min(self.axis_margin,  graph_rect.height()/4, graph_rect.height()/4) 
     313        if xBottom in self.shown_axes: 
     314            bottom_rect = graph_rect 
     315            bottom_rect.setTop( bottom_rect.top() - margin) 
     316            axis_rects[xBottom] = bottom_rect 
     317            graph_rect.setBottom( graph_rect.bottom() - margin) 
     318        if xTop in self.shown_axes: 
     319            top_rect = graph_rect 
     320            top_rect.setBottom(top_rect.bottom() + margin) 
     321            axis_rects[xTop] = top_rect 
     322            graph_rect.setTop(graph_rect.top() + margin) 
     323        if yLeft in self.shown_axes: 
     324            left_rect = graph_rect 
     325            left = graph_rect.left() + margin 
     326            left_rect.setRight(left) 
     327            graph_rect.setLeft(left) 
     328            axis_rects[yLeft] = left_rect 
     329            if xBottom in axis_rects: 
     330                axis_rects[xBottom].setLeft(left) 
     331            if xTop in axis_rects: 
     332                axis_rects[xTop].setLeft(left) 
     333        if yRight in self.shown_axes: 
     334            right_rect = graph_rect 
     335            right = graph_rect.right() - margin 
     336            right_rect.setLeft(right) 
     337            graph_rect.setRight(right) 
     338            axis_rects[yRight] = right_rect 
     339            if xBottom in axis_rects: 
     340                axis_rects[xBottom].setRight(right) 
     341            if xTop in axis_rects: 
     342                axis_rects[xTop].setRight(right) 
     343         
     344        self.axes = dict() 
     345             
     346        for id, rect in axis_rects.iteritems(): 
     347            if id is xBottom: 
     348                line = QLineF(rect.topLeft(),  rect.topRight()) 
     349            elif id is xTop: 
     350                line = QLineF(rect.bottomLeft(), rect.bottomRight()) 
     351            elif id is yLeft: 
     352                line = QLineF(rect.bottomLeft(), rect.topLeft()) 
     353            elif id is yRight: 
     354                line = QLineF(rect.bottomRight(), rect.topRight()) 
     355            self.axes[id] = axis.Axis(rect.size, 'Test', line ) 
     356            self.axes[id].setPos(rect.topLeft()) 
     357            self.canvas.addItem(self.axes[id]) 
     358            r = QGraphicsRectItem(rect) 
     359            r.setPen(QPen(Qt.red)) 
     360            self.canvas.addItem(r) 
Note: See TracChangeset for help on using the changeset viewer.