root / sqs-reader / src / main / java / net / sqs2 / omr / swing / session / TextAreaTableCellRenderer.java @ 1846

View | Annotate | Download (4.2 KB)

1
/**
2
 * 
3
 */
4
package net.sqs2.omr.swing.session;
5
6
import java.awt.BorderLayout;
7
import java.awt.Dimension;
8
import java.awt.Graphics;
9
import java.awt.event.FocusAdapter;
10
import java.awt.event.FocusEvent;
11
import java.awt.image.BufferedImage;
12
import java.io.IOException;
13
import java.util.List;
14
15
import javax.swing.JTextArea;
16
import javax.swing.border.EmptyBorder;
17
import javax.swing.table.TableCellRenderer;
18
19
import net.sqs2.image.ImageFactory;
20
import net.sqs2.omr.master.FormArea;
21
import net.sqs2.omr.master.FormMaster;
22
import net.sqs2.omr.model.Answer;
23
import net.sqs2.omr.model.PageAreaCommand;
24
import net.sqs2.omr.model.PageTaskAccessor;
25
import net.sqs2.omr.model.Row;
26
import net.sqs2.omr.model.RowAccessor;
27
import net.sqs2.omr.model.SourceDirectory;
28
import net.sqs2.omr.model.TextAreaAnswer;
29
import net.sqs2.omr.result.writer.ContentsWriterUtil;
30
import net.sqs2.omr.session.service.MarkReaderSession;
31
import net.sqs2.omr.session.service.MarkReaderSessionServices;
32
import net.sqs2.omr.session.source.ContentAccessor;
33
34
class TextAreaTableCellRenderer extends FormAreaTableCellRenderer implements TableCellRenderer {
35
36
        private static final long serialVersionUID = 1L;
37
38
        JTextArea textarea;
39
        int margin = 3;
40
41
        public TextAreaTableCellRenderer() {
42
                super();
43
                setBorder(new EmptyBorder(this.margin, this.margin, this.margin, this.margin));
44
                setLayout(new BorderLayout());
45
                this.textarea = new JTextArea();
46
                this.textarea.addFocusListener(new FocusAdapter() {
47
48
                        @Override
49
                        public void focusLost(FocusEvent e) {
50
                                // TextAreaTableCellRenderer component =
51
                                // (TextAreaTableCellRenderer)e.getSource();
52
                        }
53
54
                });
55
                add(this.textarea, BorderLayout.SOUTH);
56
        }
57
58
        /*
59
         * class ImagePanel extends JPanel{
60
         * 
61
         * BufferedImage image;
62
         * 
63
         * ImagePanel(){ }
64
         * 
65
         * public void setImage(BufferedImage image){ this.image = image; }
66
         * 
67
         * @Override public void paintComponent(Graphics g){ setPreferredSize(new
68
         * Dimension(2*margin+this.image.getWidth(),
69
         * 2*margin+this.image.getHeight())); g.drawImage(this.image, 0, 0, this); }
70
         * }
71
         */
72
73
        @Override
74
        public void paintComponent(Graphics g) {
75
                super.paintComponent(g);
76
77
                SourceDirectory sourceDirectory = this.cell.getSpreadSheet().getSourceDirectory();
78
                FormMaster master = (FormMaster) sourceDirectory.getPageMaster();
79
                List<FormArea> formAreaList = master.getFormAreaList(this.cell.getQuestionIndex());
80
81
                FormArea defaultFormArea = formAreaList.get(0);
82
83
                int textAreaImageWidth = (int) defaultFormArea.getRect().getWidth();
84
                int textAreaImageHeight = (int) defaultFormArea.getRect().getHeight();
85
86
                this.setPreferredSize(new Dimension(2 * this.margin + textAreaImageWidth, 2 * this.margin
87
                                + textAreaImageHeight * 2));
88
                this.textarea.setPreferredSize(new Dimension(textAreaImageWidth, textAreaImageHeight));
89
90
                int compWidth = this.getWidth();
91
                int compHeight = this.getHeight();
92
                if (this.isSelected) {
93
                        g.setColor(getBackground());
94
                        g.fillRect(0, 0, compWidth, compHeight);
95
                        g.setColor(getForeground());
96
                }
97
                
98
                MarkReaderSession session = MarkReaderSessionServices.get(this.cell.getSpreadSheet().getSourceDirectory().getRoot());
99
                ContentAccessor accessor = session.getSessionSource().getContentAccessor();
100
101
                try {
102
                        PageTaskAccessor pageTaskAccessor = accessor.getPageTaskAccessor();
103
104
                        PageAreaCommand textAreaCommand = ContentsWriterUtil.createPageAreaCommandListParQuestion(
105
                                        master, this.cell.getRowGroupSourceDirectory(), pageTaskAccessor,
106
                                        this.cell.getRowGroupRowIndex(), this.cell.getQuestionIndex()).get(0);
107
108
                        byte[] bytes = textAreaCommand.getImageByteArray();
109
                        BufferedImage image = ImageFactory.createImage(textAreaCommand.getImageType(), bytes, 0);
110
                        g.drawImage(image, 0, 0, this);
111
                        image.flush();
112
113
                        RowAccessor rowAccessor = accessor.getRowAccessor();
114
                        Row row = (Row) rowAccessor.get(master.getRelativePath(), sourceDirectory.getRelativePath(), this.cell
115
                                        .getRowGroupRowIndex());
116
                        Answer answer = row.getAnswer(this.cell.getQuestionIndex());
117
                        if (answer instanceof TextAreaAnswer) {
118
                                TextAreaAnswer textAreaAnswer = (TextAreaAnswer) answer;
119
                                String value = textAreaAnswer.getValue();
120
                                if (value != null) {
121
                                        this.textarea.setText(value);
122
                                }
123
                        }
124
                } catch (IOException ex) {
125
                        ex.printStackTrace();
126
                }
127
        }
128
129
}