--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/sysperfana/perfinvestigator/com.nokia.carbide.cpp.pi.power/src/com/nokia/carbide/cpp/internal/pi/power/actions/PowerSettingsDialog.java Thu Feb 11 15:32:31 2010 +0200
@@ -0,0 +1,260 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of the License "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+package com.nokia.carbide.cpp.internal.pi.power.actions;
+
+import java.text.DecimalFormat;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.FocusAdapter;
+import org.eclipse.swt.events.FocusEvent;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Text;
+
+import com.nokia.carbide.cpp.internal.pi.analyser.NpiInstanceRepository;
+import com.nokia.carbide.cpp.pi.editors.PIPageEditor;
+import com.nokia.carbide.cpp.pi.power.PwrTrace;
+
+
+public class PowerSettingsDialog {
+
+ private Shell shell;
+ private GridData gridData;
+ private PwrTrace trace;
+ private int batterySize;
+
+ private Text voltageText;
+ private Text batteryText;
+ private DecimalFormat voltageFormat = new DecimalFormat(Messages.getString("PowerSettingsDialog.voltageFormat")); //$NON-NLS-1$
+// private DecimalFormat batteryFormat = new DecimalFormat("###0");
+ private float newVoltage;
+ private float newBatterySize;
+
+ public PowerSettingsDialog(Display display)
+ {
+ shell = new Shell(display, SWT.APPLICATION_MODAL | SWT.DIALOG_TRIM);
+ shell.setText(Messages.getString("PowerSettingsDialog.powerSettingsTitle")); //$NON-NLS-1$
+ shell.setLayout(new GridLayout(4, false));
+
+ trace = (PwrTrace)NpiInstanceRepository.getInstance().activeUidGetTrace("com.nokia.carbide.cpp.pi.power"); //$NON-NLS-1$
+
+ float voltage = trace.getVoltage();
+ newVoltage = voltage;
+
+ Label voltLabel = new Label(shell, SWT.LEFT);
+ voltLabel.setFont(PIPageEditor.helvetica_9);
+ voltLabel.setText(Messages.getString("PowerSettingsDialog.voltageLabel")); //$NON-NLS-1$
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.horizontalSpan = 2;
+ voltLabel.setLayoutData(gridData);
+
+ voltageText = new Text(shell, SWT.BORDER | SWT.RIGHT);
+ voltageText.setFont(PIPageEditor.helvetica_9);
+ voltageText.setText(voltageFormat.format(voltage));
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.minimumWidth = 60;
+ voltageText.setLayoutData(gridData);
+
+ Label voltUnitsLabel = new Label(shell, SWT.LEFT);
+ voltUnitsLabel.setFont(PIPageEditor.helvetica_9);
+ voltUnitsLabel.setText(Messages.getString("PowerSettingsDialog.voltageUnits")); //$NON-NLS-1$
+
+ batterySize = (int) trace.getBatterySize();
+ newBatterySize = batterySize;
+
+ Label batteryLabel = new Label(shell, SWT.LEFT);
+ batteryLabel.setFont(PIPageEditor.helvetica_9);
+ batteryLabel.setText(Messages.getString("PowerSettingsDialog.batteryLabel")); //$NON-NLS-1$
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.horizontalSpan = 2;
+ batteryLabel.setLayoutData(gridData);
+
+ batteryText = new Text(shell, SWT.BORDER | SWT.RIGHT);
+ batteryText.setFont(PIPageEditor.helvetica_9);
+ batteryText.setText("" + batterySize);//batteryFormat.format(batterySize)); //$NON-NLS-1$
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.minimumWidth = 60;
+ batteryText.setLayoutData(gridData);
+
+ Label batteryUnitsLabel = new Label(shell, SWT.LEFT);
+ batteryUnitsLabel.setFont(PIPageEditor.helvetica_9);
+ batteryUnitsLabel.setText(Messages.getString("PowerSettingsDialog.batteryUnits")); //$NON-NLS-1$
+
+ // add the voltage listeners
+ voltageText.addFocusListener(new FocusAdapter() {
+ public void focusLost(FocusEvent e) {
+ double currentVoltage = convert(voltageText, trace.getVoltage(), 0, Float.MAX_VALUE, voltageFormat);
+ newVoltage = (float) (Math.ceil(currentVoltage * 1000) / 1000.0);
+ }
+ });
+
+ voltageText.addSelectionListener(new SelectionAdapter() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ double currentVoltage = convert(voltageText, trace.getVoltage(), 0, Float.MAX_VALUE, voltageFormat);
+ newVoltage = (float) (Math.ceil(currentVoltage * 100) / 100.0);
+ }
+ });
+
+ batteryText.addFocusListener(new FocusAdapter() {
+ public void focusLost(FocusEvent e) {
+ newBatterySize = convert(batteryText, (int)Math.ceil(trace.getBatterySize()), 0, Integer.MAX_VALUE);
+ }
+ });
+
+ batteryText.addSelectionListener(new SelectionAdapter() {
+ public void widgetDefaultSelected(SelectionEvent e) {
+ newBatterySize = convert(batteryText, (int)Math.ceil(trace.getBatterySize()), 0, Integer.MAX_VALUE);
+ }
+ });
+
+ Label line = new Label(shell, SWT.SEPARATOR | SWT.HORIZONTAL);
+ gridData = new GridData(SWT.FILL, SWT.FILL, true, true);
+ gridData.horizontalSpan = 4;
+ gridData.minimumHeight = 10;
+ line.setLayoutData(gridData);
+
+ // create the OK button
+ Button ok = new Button(shell, SWT.NONE);
+ ok.setText(Messages.getString("PowerSettingsDialog.ok")); //$NON-NLS-1$
+ gridData = new GridData(SWT.CENTER, SWT.CENTER, true, true);
+ gridData.minimumWidth = 60;
+ gridData.horizontalSpan = 2;
+ ok.setLayoutData(gridData);
+ ok.addSelectionListener(new SelectionListener(){
+
+ public void widgetSelected(SelectionEvent e) {
+ // Update plugins with actions, if voltage of battery size has changed
+ boolean changedVoltage = trace.getVoltage() != newVoltage;
+ boolean changedSize = trace.getBatterySize() != newBatterySize;
+ int uid = NpiInstanceRepository.getInstance().activeUid();
+
+ if (changedVoltage) {
+ trace.setVoltage(newVoltage);
+ trace.getPowerGraph(PIPageEditor.THREADS_PAGE, uid).action("changeVoltage"); //$NON-NLS-1$
+ trace.getPowerGraph(PIPageEditor.BINARIES_PAGE, uid).action("changeVoltage"); //$NON-NLS-1$
+ trace.getPowerGraph(PIPageEditor.FUNCTIONS_PAGE, uid).action("changeVoltage"); //$NON-NLS-1$
+ }
+
+ if (changedSize) {
+ trace.setBatterySize(newBatterySize);
+ trace.getPowerGraph(PIPageEditor.THREADS_PAGE, uid).action("changeBatterySize"); //$NON-NLS-1$
+ trace.getPowerGraph(PIPageEditor.BINARIES_PAGE, uid).action("changeBatterySize"); //$NON-NLS-1$
+ trace.getPowerGraph(PIPageEditor.FUNCTIONS_PAGE, uid).action("changeBatterySize"); //$NON-NLS-1$
+ }
+
+ shell.close();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ });
+
+ // create the Cancel button
+ Button cancel = new Button(shell, SWT.NONE);
+ cancel.setText(Messages.getString("PowerSettingsDialog.cancel")); //$NON-NLS-1$
+ gridData = new GridData(SWT.LEFT, SWT.CENTER, true, true);
+ gridData.minimumWidth = 60;
+ gridData.horizontalSpan = 2;
+ cancel.setLayoutData(gridData);
+ cancel.addSelectionListener(new SelectionListener(){
+
+ public void widgetSelected(SelectionEvent e) {
+ shell.close();
+ }
+
+ public void widgetDefaultSelected(SelectionEvent e) {
+ widgetSelected(e);
+ }
+ });
+
+ shell.pack();
+ shell.open();
+
+ while (!shell.isDisposed()) {
+ if (!shell.getDisplay().readAndDispatch()) {
+ shell.getDisplay().sleep();
+ }
+ }
+ }
+
+ private double convert(Text text, double currentDouble, double minimum, double maximum, DecimalFormat format)
+ {
+ double new_double;
+
+ // convert, catch (NumberFormatException e1)
+ try {
+ new_double = Double.parseDouble(text.getText().replace(',','.'));
+ if (new_double >= 0)
+ currentDouble = new_double;
+ } catch (NumberFormatException exc) {
+ // just keep the old value
+ }
+
+ if (currentDouble > maximum)
+ currentDouble = maximum;
+ else if (currentDouble < minimum)
+ currentDouble = minimum;
+
+ text.setText(format.format(currentDouble));
+
+ return currentDouble;
+ }
+
+ private int convert(Text text, int currentInt, int minimum, int maximum)
+ {
+ int new_int;
+
+ // convert, catch (NumberFormatException e1)
+ try {
+ new_int = Integer.parseInt(text.getText().replace(',','.'));
+ if (new_int >= 0)
+ currentInt = new_int;
+ } catch (NumberFormatException exc) {
+ // just keep the old value
+ }
+
+ if (currentInt > maximum)
+ currentInt = maximum;
+ else if (currentInt < minimum)
+ currentInt = minimum;
+
+ text.setText("" + currentInt); //$NON-NLS-1$
+
+ return currentInt;
+ }
+
+ public void dispose()
+ {
+ if (this.shell != null) {
+ if (!this.shell.isDisposed()) {
+ this.shell.close();
+ }
+ this.shell.dispose();
+ }
+
+ this.shell = null;
+ }
+}