diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/web/StatusDialog.java')
-rw-r--r-- | wizards/com/sun/star/wizards/web/StatusDialog.java | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/web/StatusDialog.java b/wizards/com/sun/star/wizards/web/StatusDialog.java new file mode 100644 index 000000000000..ab1e7a0b6bc7 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/StatusDialog.java @@ -0,0 +1,305 @@ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org 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 Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 License. + * + ************************************************************************/ +package com.sun.star.wizards.web; + +import com.sun.star.awt.XButton; +import com.sun.star.awt.XFixedText; +import com.sun.star.awt.XProgressBar; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.wizards.common.Helper; +import com.sun.star.wizards.common.IRenderer; +import com.sun.star.wizards.ui.UnoDialog; +import com.sun.star.wizards.ui.UnoDialog2; +import com.sun.star.wizards.ui.event.MethodInvocation; +import com.sun.star.wizards.ui.event.Task; +import com.sun.star.wizards.ui.event.TaskEvent; +import com.sun.star.wizards.ui.event.TaskListener; + +/** + * @author rpiterman + * A Class which displays a Status Dialog with status bars. + * This can display an X number of bars, to enable the + * status display of more complex tasks. + * + */ +public class StatusDialog extends UnoDialog2 implements TaskListener +{ + + public static final int STANDARD_WIDTH = 240; + private XProgressBar progressBar; + private XFixedText lblTaskName; + private XFixedText lblCounter; + private XButton btnCancel; + private String[] res; + private IRenderer renderer; + private boolean enableBreak = false; + private boolean closeOnFinish = true; + private MethodInvocation finishedMethod; + private UnoDialog parent; + private boolean finished; + + /** + * Note on the argument resource: + * This should be a String array containing the followin strings, in the + * following order: + * dialog title, cancel, close, counter prefix, counter midfix, counter postfix + */ + public StatusDialog(XMultiServiceFactory xmsf, int width, String taskName, boolean displayCount, String[] resources, String hid) + { + super(xmsf); + + res = resources; + if (res.length != 6) + { + throw new IllegalArgumentException("The resources argument should contain 6 Strings, see Javadoc on constructor."); //display a close button? + // if enableBreak == false and closeOnFinsih == false; + } + boolean b = !enableBreak && !closeOnFinish; + + Helper.setUnoPropertyValues(xDialogModel, + new String[] + { + "Closeable", "Height", "HelpURL", "Moveable", "Name", "PositionX", "PositionY", "Step", "Title", "Width" + }, + new Object[] + { + Boolean.FALSE, new Integer(6 + 25 + (b ? 27 : 7)), hid, Boolean.TRUE, "StatusDialog", new Integer(102), new Integer(52), new Integer(0), res[0], new Integer(width) + }); + + short tabstop = 1; + + lblTaskName = insertLabel("lblTask", + new String[] + { + "Height", "Label", "PositionX", "PositionY", "TabIndex", "Width" + }, + new Object[] + { + new Integer(8), taskName, new Integer(6), new Integer(6), new Short(tabstop++), new Integer(width * 2 / 3) + }); + lblCounter = insertLabel("lblCounter", + new String[] + { + "Height", "Label", "PositionX", "PositionY", "TabIndex", "Width" + }, + new Object[] + { + new Integer(8), "", new Integer(width * 2 / 3), new Integer(6), new Short(tabstop++), new Integer(width / 3 - 4) + }); + progressBar = insertProgressBar("progress", + new String[] + { + "Height", "PositionX", "PositionY", "TabIndex", "Width" + }, + new Object[] + { + new Integer(10), new Integer(6), new Integer(16), new Short(tabstop++), new Integer(width - 12) + }); + + + if (b) + { + btnCancel = insertButton("btnCancel", "performCancel", this, + new String[] + { + "Height", "Label", "PositionX", "PositionY", "TabIndex", "Width" + }, + new Object[] + { + new Integer(14), res[1], new Integer(width / 2 - 20), new Integer(6 + 25 + 7), new Short(tabstop++), new Integer(40) + }); + } + +// xWindow.addWindowListener((XWindowListener)guiEventListener); +// guiEventListener.add("StatusDialog" ,EVENT_WINDOW_SHOWN, "performRunnable",this); + + } + + private void initProgressBar(Task t) + { + progressBar.setRange(0, t.getMax()); + progressBar.setValue(0); + } + + private void setStatus(int status) + { + if (finished) + { + return; + } + progressBar.setValue(status); + xReschedule.reschedule(); + } + + public void setLabel(String s) + { +// lblTaskName.setText(s); + Helper.setUnoPropertyValue(UnoDialog.getModel(lblTaskName), "Label", s); + xReschedule.reschedule(); + } + + /** + * change the max property of the status bar + * @param max + */ + private void setMax(int max) + { + if (finished) + { + return; + } + Helper.setUnoPropertyValue(getModel(progressBar), "ProgressValueMax", new Integer(max)); + } + + /** + * initialize the status bar according + * to the given event. + */ + public void taskStarted(TaskEvent te) + { + finished = false; + initProgressBar(te.getTask()); + } + + /** + * closes the dialog. + */ + public void taskFinished(TaskEvent te) + { + finished = true; + if (closeOnFinish) + { +// xDialog.endExecute(); + parent.xWindow.setEnable(true); + try + { + xWindow.setVisible(false); + xComponent.dispose(); + //System.out.println("disposed"); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + else + { + Helper.setUnoPropertyValue(getModel(btnCancel), "Label", res[2]); + } + } + + /** + * changes the status display + */ + public void taskStatusChanged(TaskEvent te) + { + setMax(te.getTask().getMax()); + setStatus(te.getTask().getStatus()); + } + + /** + * changes the displayed text. + * A renderer is used to render + * the task's subtask name to a resource string. + */ + public void subtaskNameChanged(TaskEvent te) + { + if (renderer != null) + { + setLabel(renderer.render(te.getTask().getSubtaskName())); + } + } + + /** + * displays the status dialog + * @param parent the parent dialog + * @param r what to do + */ + public void execute(final UnoDialog parent_, final Task task, String title) + { + try + { + this.parent = parent_; + Helper.setUnoPropertyValue(this.xDialogModel, "Title", title); + try + { + //TODO change this to another execute dialog method. + task.addTaskListener(StatusDialog.this); + setMax(10); + setStatus(0); + setLabel(task.getSubtaskName()); + parent.xWindow.setEnable(false); + setVisible(parent); + if (finishedMethod != null) + { + finishedMethod.invoke(); + } + } + catch (Exception e) + { + e.printStackTrace(); + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + + /** + * not supported ! + */ + public void performCancel() + {//TODO - implement a thread thing here... + xWindow.setVisible(false); + } + + /** + * @return the subTask renderer object + */ + public IRenderer getRenderer() + { + return renderer; + } + + /** + * @param renderer + */ + public void setRenderer(IRenderer renderer) + { + this.renderer = renderer; + } + + /** + * sets a method to be invoced when the + * + */ + public void setFinishedMethod(MethodInvocation mi) + { + finishedMethod = mi; + } +} |