private void drawDigramData(GC gc, int arrowStartXPosition, int arrowStartYPosition, String contactLabel) {
        String modelingTime = MainWindow.getCurrentNode() + "";    

        List<Integer> points = new ArrayList<Integer>();

        int lowLevelHeight = 4; // 0
        int highLevelHeight = 18; // 1
        int xHeight = 16; // X
        
        int rowIndex = getRowIndex(contactLabel);
                
        // first point
        points.add(arrowStartXPosition); // X
        points.add(arrowStartYPosition - lowLevelHeight); // Y

        int previous = 0;
        int previousDisplacement = -1;
        
        for(int j=0; j<getLastColumnIndex(modelingTime); j++) {
            int data = Integer.parseInt(parsedLines[rowIndex][j+1]);
            int displacement = Integer.parseInt(parsedLines[0][j+1]);
            switch(data) {
            case 0:
                if(previous == 1){ // из 1 в 0
                    // 1
                    points.add(arrowStartXPosition + displacement); // X
                    points.add(arrowStartYPosition - highLevelHeight); // Y
                    // 0
                    points.add(arrowStartXPosition + displacement); // X
                    points.add(arrowStartYPosition - lowLevelHeight); // Y
                } else if(previous == 0){ // из 0 в 0
                    // 0
                    points.add(arrowStartXPosition + displacement); // X
                    points.add(arrowStartYPosition - lowLevelHeight); // Y
                } else { // из X в 0
                    gc.setBackground(DIAGRAMS_X_TEST);
                    int x = arrowStartXPosition + previousDisplacement;
                    int y = arrowStartYPosition - 1 - xHeight;
                    int h = xHeight;
                    int w = displacement - previousDisplacement;
                    gc.fillRectangle(new Rectangle(x, y, w, h));
                    gc.setBackground(LIGHT_GRAY);
                }
                previous = 0;
                break;
            case 1:
                if(previous == 0) { // из 0 в 1
                    //0
                    points.add(arrowStartXPosition + displacement); // X           
                    points.add(arrowStartYPosition - lowLevelHeight); // Y
                    //1
                    points.add(arrowStartXPosition + displacement); // X
                    points.add(arrowStartYPosition - highLevelHeight); // Y
                } else if(previous == 1){ // из 1 в 1
                    //1
                    points.add(arrowStartXPosition + displacement); // X           
                    points.add(arrowStartYPosition - highLevelHeight); // Y
                } else { // из Х в 1
                    // 0
                    points.add(arrowStartXPosition + displacement); // X           
                    points.add(arrowStartYPosition - lowLevelHeight); // Y
                    // 1
                    points.add(arrowStartXPosition + displacement); // X
                    points.add(arrowStartYPosition - highLevelHeight); // Y
                    // X
                    gc.setBackground(DIAGRAMS_X_TEST);
                    int x = arrowStartXPosition + previousDisplacement;
                    int y = arrowStartYPosition - 1 - xHeight;
                    int h = xHeight;
                    int w = displacement - previousDisplacement;
                    gc.fillRectangle(new Rectangle(x, y, w, h));
                    gc.setBackground(LIGHT_GRAY);
                }
                previous = 1;
                break;
            case 2: 
                if(previousDisplacement != -1) {
                    // X
                    gc.setBackground(DIAGRAMS_X_COLOR);
                    int x = arrowStartXPosition + previousDisplacement;
                    int y = arrowStartYPosition - 1 - xHeight;
                    int h = xHeight;
                    int w = displacement - previousDisplacement;
                    gc.fillRectangle(new Rectangle(x, y, w, h));
                    gc.setBackground(LIGHT_GRAY);
                    previous = 2;                    
                }
                previousDisplacement = displacement;
                break;
            }
        }

        Integer[] temp = points.toArray(new Integer[] {});
        int[] pointsToDraw = new int[temp.length];
        for (int i = 0; i < temp.length; i++) {
            pointsToDraw[i] = temp[i];
        }
        gc.drawPolyline(pointsToDraw);

    }