/* -*- mode: java; c-basic-offset: 2; indent-tabs-mode: nil -*- */

/*
  Part of the Processing project - http://processing.org

  Copyright (c) 2005-07 Ben Fry and Casey Reas

  This program is free software; you can redistribute it and/or modify
  it under the terms of the GNU General Public License as published by
  the Free Software Foundation; either version 2 of the License, or
  (at your option) any later version.

  This program is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  GNU General Public License for more details.

  You should have received a copy of the GNU General Public License
  along with this program; if not, write to the Free Software Foundation,
  Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/

package processing.app;

import java.awt.*;
import java.awt.geom.Rectangle2D;
import javax.swing.JComponent;

import processing.app.helpers.OSUtils;
import processing.app.helpers.PreferencesMap;


/**
 * Li'l status bar fella that shows the line number.
 */
public class EditorLineStatus extends JComponent {
  int start = -1, stop;

  Image resize;

  Color foreground;
  Color background;
  Color messageForeground;
  
  Font font;
  int high;

  String text = "";
  String name = "";
  String serialport = "";


  public EditorLineStatus() {
    background = Theme.getColor("linestatus.bgcolor");
    font = Theme.getFont("linestatus.font");
    foreground = Theme.getColor("linestatus.color");
    high = Theme.getInteger("linestatus.height");

    if (OSUtils.isMacOS()) {
      resize = Base.getThemeImage("resize.gif", this);
    }
    //linestatus.bgcolor = #000000
    //linestatus.font    = SansSerif,plain,10
    //linestatus.color   = #FFFFFF
  }

  public void set(int newStart, int newStop) {
    if ((newStart == start) && (newStop == stop)) return;

    start = newStart;
    stop = newStop;

    /*
    if (start == stop) {
      text = "Line " + (start + 1);
    } else {
      text = "Lines " + (start + 1) + " to " + (stop + 1);
    }
    */
    if (start == stop) {
      text = String.valueOf(start+1);
    } else {
      text = (start+1) + " - " + (stop+1);
    }

    repaint();
  }

  public void paintComponent(Graphics g) {
    if (name == "" && serialport == "") {
      PreferencesMap boardPreferences = BaseNoGui.getBoardPreferences();
      if (boardPreferences != null)
        setBoardName(boardPreferences.get("name"));
      else
        setBoardName("-");
      setSerialPort(PreferencesData.get("serial.port"));
    }
    g.setColor(background);
    Dimension size = getSize();
    g.fillRect(0, 0, size.width, size.height);

    g.setFont(font);
    g.setColor(foreground);
    int baseline = (high + g.getFontMetrics().getAscent()) / 2;
    g.drawString(text, 6, baseline);

    g.setColor(messageForeground);
    String tmp = name + " on " + serialport;
    
    Rectangle2D bounds = g.getFontMetrics().getStringBounds(tmp, null);
    
    g.drawString(tmp, size.width - (int) bounds.getWidth() -20 , baseline);

    if (OSUtils.isMacOS()) {
      g.drawImage(resize, size.width - 20, 0, this);
    }
  }

  public void setBoardName(String name) {
    this.name = name;
  }

  public void setSerialPort(String serialport) {
    this.serialport = serialport;
  }

  public Dimension getPreferredSize() {
    return new Dimension(300, high);
  }

  public Dimension getMinimumSize() {
    return getPreferredSize();
  }

  public Dimension getMaximumSize() {
    return new Dimension(3000, high);
  }
}

@@ -1067,16 +1067,54 @@
 cesMap;%0A
+import static processing.app.I18n.tr;%0A
 %0A%0A/**%0A *
@@ -2980,23 +2980,43 @@
 p = 
-name + %22 on %22 +
+I18n.format(tr(%22%7B0%7D on %7B1%7D%22), name,
  ser
@@ -3018,24 +3018,25 @@
 , serialport
+)
 ;%0A    %0A    R

Make editor statusline text translatable