class SetDataForm < Qt::Dialog

    slots 'setColor()',
        'setChosenColor( int, int )',
        'currentChanged( int, int )',
        'valueChanged( int, int )',
        'accept()'

    MAX_PATTERNS = 14


    def initialize( elements, decimalPlaces,
                            parent = nil,  name = "set data form",
                            modal = true, f = 0 )
        super( parent, name, modal, f )
    
        @elements = elements
        @decimalPlaces = decimalPlaces
    
        setCaption( "Chart -- Set Data" )
        resize( 540, 440 )
    
        @tableButtonBox = Qt::VBoxLayout.new( self, 11, 6, "@table button box layout" )
    
        @table = Qt::Table.new( self, "data @table" )
        @table.setNumCols( 5 )
        @table.setNumRows( ChartForm::MAX_ELEMENTS )
        @table.setColumnReadOnly( 1, true )
        @table.setColumnReadOnly( 2, true )
        @table.setColumnReadOnly( 4, true )
        @table.setColumnWidth( 0, 80 )
        @table.setColumnWidth( 1, 60 ) # Columns 1 and 4 must be equal
        @table.setColumnWidth( 2, 60 )
        @table.setColumnWidth( 3, 200 )
        @table.setColumnWidth( 4, 60 )
        th = @table.horizontalHeader()
        th.setLabel( 0, "Value" )
        th.setLabel( 1, "Color" )
        th.setLabel( 2, "Pattern" )
        th.setLabel( 3, "Label" )
        th.setLabel( 4, "Color" )
        @tableButtonBox.addWidget( @table )
    
        @buttonBox = Qt::HBoxLayout.new( nil, 0, 6, "button box layout" )
    
        @colorPushButton = Qt::PushButton.new( self, "color button" )
        @colorPushButton.setText( "&Color..." )
        @colorPushButton .setEnabled( false )
        @buttonBox.addWidget( @colorPushButton )
    
        spacer = Qt::SpacerItem.new( 0, 0, Qt::SizePolicy::Expanding,
                                                    Qt::SizePolicy::Minimum )
        @buttonBox.addItem( spacer )
    
        okPushButton = Qt::PushButton.new( self, "ok button" )
        okPushButton.setText( "OK" )
        okPushButton.setDefault( true )
        @buttonBox.addWidget( okPushButton )
    
        cancelPushButton = Qt::PushButton.new( self, "cancel button" )
        cancelPushButton.setText( "Cancel" )
        cancelPushButton.setAccel( Qt::KeySequence.new(Key_Escape) )
        @buttonBox.addWidget( cancelPushButton )
    
        @tableButtonBox.addLayout( @buttonBox )
    
        connect( @table, SIGNAL( 'clicked(int,int,int,const QPoint&)' ),
                self, SLOT( 'setChosenColor(int,int)' ) )
        connect( @table, SIGNAL( 'currentChanged(int,int)' ),
                self, SLOT( 'currentChanged(int,int)' ) )
        connect( @table, SIGNAL( 'valueChanged(int,int)' ),
                self, SLOT( 'valueChanged(int,int)' ) )
        connect( @colorPushButton, SIGNAL( 'clicked()' ), self, SLOT( 'setColor()' ) )
        connect( okPushButton, SIGNAL( 'clicked()' ), self, SLOT( 'accept()' ) )
        connect( cancelPushButton, SIGNAL( 'clicked()' ), self, SLOT( 'reject()' ) )
    
        patterns = Array.new(MAX_PATTERNS)
        patterns[0]  = Qt::Pixmap.new( "images/pattern01.xpm" )
        patterns[1]  = Qt::Pixmap.new( "images/pattern02.xpm" )
        patterns[2]  = Qt::Pixmap.new( "images/pattern03.xpm" )
        patterns[3]  = Qt::Pixmap.new( "images/pattern04.xpm" )
        patterns[4]  = Qt::Pixmap.new( "images/pattern05.xpm" )
        patterns[5]  = Qt::Pixmap.new( "images/pattern06.xpm" )
        patterns[6]  = Qt::Pixmap.new( "images/pattern07.xpm" )
        patterns[7]  = Qt::Pixmap.new( "images/pattern08.xpm" )
        patterns[8]  = Qt::Pixmap.new( "images/pattern09.xpm" )
        patterns[9]  = Qt::Pixmap.new( "images/pattern10.xpm" )
        patterns[10] = Qt::Pixmap.new( "images/pattern11.xpm" )
        patterns[11] = Qt::Pixmap.new( "images/pattern12.xpm" )
        patterns[12] = Qt::Pixmap.new( "images/pattern13.xpm" )
        patterns[13] = Qt::Pixmap.new( "images/pattern14.xpm" )
    
        rect = @table.cellRect( 0, 1 )
        pix = Qt::Pixmap.new( rect.width(), rect.height() )
    
        for i in 0...ChartForm::MAX_ELEMENTS
            element = @elements[i]
    
            if element.isValid()
                @table.setText(i, 0, "%.#{@decimalPlaces}f" % element.value() )
            end
    
            color = element.valueColor()
            pix.fill( color )
            @table.setPixmap( i, 1, pix )
            @table.setText( i, 1, color.name() )
    
            combobox = Qt::ComboBox.new
            for j in 0...MAX_PATTERNS
                combobox.insertItem( patterns[j] )
            end
            combobox.setCurrentItem( element.valuePattern() - 1 )
            @table.setCellWidget( i, 2, combobox )
    
            @table.setText( i, 3, element.label() )
    
            color = element.labelColor()
            pix.fill( color )
            @table.setPixmap( i, 4, pix )
            @table.setText( i, 4, color.name() )
        end
    
    end
    
    
    def currentChanged( i, col )
        @colorPushButton.setEnabled( col == 1 || col == 4 )
    end
    
    
    def valueChanged( row, col )
        if col == 0 
            d = @table.text( row, col ).to_f
            if d && d > EPSILON
                @table.setText( row, col, "%.#{@decimalPlaces}f" % d )
            elsif ! @table.text( row, col ).empty?
                @table.setText( row, col, @table.text( row, col ) + "?" )
            end
        end
    end
    
    
    def setColor()
        setChosenColor( @table.currentRow(), @table.currentColumn() )
        @table.setFocus()
    end
    
    
    def setChosenColor( row, col )
        if  !( col == 1 || col == 4 )
            return
        end
    
        color = Qt::ColorDialog.getColor(
                            Qt::Color.new( @table.text( row, col ) ),
                            self, "color dialog" )
        if  color.isValid() 
            pix = @table.pixmap( row, col )
            pix.fill( color )
            @table.setPixmap( row, col, pix )
            @table.setText( row, col, color.name() )
        end
    end
    
    
    def accept()
        for i in 0...ChartForm::MAX_ELEMENTS
            element = @elements[i]
            d = @table.text( i, 0 ).to_f
            if d
                element.value = d 
            else
                element.value = Element::INVALID
            end
            element.valueColor = Qt::Color.new( @table.text( i, 1 ) ) 
            element.valuePattern = (@table.cellWidget( i, 2 )).currentItem() + 1
            element.label = @table.text( i, 3 )
            element.labelColor = Qt::Color.new( @table.text( i, 4 ) )
        end
    
        super
    end

end
