1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 package com.sun.star.wizards.web; 24 25 import com.sun.star.awt.FontDescriptor; 26 import com.sun.star.awt.Size; 27 import com.sun.star.awt.XButton; 28 import com.sun.star.awt.XFixedText; 29 import com.sun.star.lang.XMultiServiceFactory; 30 import com.sun.star.wizards.common.Helper; 31 import com.sun.star.wizards.common.HelpIds; 32 import com.sun.star.wizards.common.JavaTools; 33 import com.sun.star.wizards.common.IRenderer; 34 import com.sun.star.wizards.common.PropertyNames; 35 import com.sun.star.wizards.ui.ImageList; 36 import com.sun.star.wizards.ui.UIConsts; 37 import com.sun.star.wizards.ui.UnoDialog2; 38 import com.sun.star.wizards.ui.ImageList.Counter; 39 40 /** 41 * This class is a general implementation for a 42 * dialog which displays a choice of images. 43 * The model and the renderer are 44 * still abstract in this class. 45 * To use the class one should extend it, 46 * in the constructor then set the imageList 47 * properties (member name il) like image size, grid size, 48 * model renderer aso, and then call "build". 49 * This class uses a counter renderer which 50 * gets an expression which contains %START %END %TOTAL and replaces 51 * them with the actual numbers. 52 * <BR/> 53 * two buttons: "other" and "none" which are there 54 * to enable choosing images that are not in the list and 55 * "no image" respectively, are optional, with default to true, 56 * so dialogs which do not need those, should set the corresponding 57 * members showDeselectButton and/or showOtherButton to false. 58 * <br/> 59 * the constructor should receive, among others, an Array of String resources - see 60 * constructor documentation for details. 61 * 62 * @author rpiterman 63 */ 64 public abstract class ImageListDialog extends UnoDialog2 implements UIConsts 65 { 66 67 private String[] resources; 68 private final static int RES_TITLE = 0; 69 private final static int RES_LABEL = 1; 70 private final static int RES_OK = 2; 71 private final static int RES_CANCEL = 3; 72 private final static int RES_HELP = 4; 73 private final static int RES_DESELECT = 5; 74 private final static int RES_OTHER = 6; 75 private final static int RES_COUNTER = 7; //GUI Components as Class members. 76 private XButton btnOK; 77 private XButton btnCancel; 78 private XButton btnHelp; 79 private XButton btnOther; 80 private XButton btnDeselect; 81 private static final String START = "%START"; 82 private static final String END = "%END"; 83 private static final String TOTAL = "%TOTAL"; 84 protected int cutFilename = 0; 85 protected boolean showDeselectButton = true; 86 protected boolean showOtherButton = true; 87 private XFixedText lblTitle; 88 //Font Descriptors as Class members. 89 private FontDescriptor fontDescriptor1 = new FontDescriptor(); 90 protected ImageList il; //private FileAccess fileAccess; 91 private Object result; 92 private int hid; 93 94 /** 95 * 96 * @param xmsf 97 * @param resources_ a string array with the following strings : 98 * dialog title, label text, ok, cancel, help, deselect, other. 99 * <br/> if "deselect" and "other" are not displayed, 100 * the array can also be shorter. but if "other" is displayed 101 * and "deselect" not, both must be there :-( 102 */ ImageListDialog( XMultiServiceFactory xmsf, int hid_, String[] resources_)103 public ImageListDialog( 104 XMultiServiceFactory xmsf, int hid_, String[] resources_) 105 { 106 super(xmsf); 107 hid = hid_; 108 resources = resources_; 109 il = new ImageList(); 110 il.counterRenderer = new ARenderer(resources[RES_COUNTER]); 111 } 112 113 /** 114 * adds the controls to the dialog, depending on 115 * the size of the image list. 116 * This method should be called by subclasses after setting 117 * the il ImageList member properties 118 */ build()119 protected void build() 120 { 121 //set dialog properties... 122 123 int ilWidth = (il.getImageSize().Width + il.getGap().Width) * il.getCols() + il.getGap().Width; 124 int ilHeight = (il.getImageSize().Height + il.getGap().Height) * il.getRows() + il.getGap().Height; 125 126 int dialogWidth = 6 + ilWidth + 6 + 50 + 6; 127 int dialogHeight = 3 + 16 + 3 + (ilHeight + 8 + 14) + 6; 128 129 Helper.setUnoPropertyValues(xDialogModel, 130 new String[] 131 { 132 PropertyNames.PROPERTY_CLOSEABLE, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_MOVEABLE, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TITLE, PropertyNames.PROPERTY_WIDTH 133 }, 134 new Object[] 135 { 136 Boolean.TRUE, new Integer(dialogHeight), HelpIds.getHelpIdString(hid), Boolean.TRUE, "imgDialog", 59, 24, INTEGERS[1], resources[RES_TITLE], new Integer(dialogWidth) 137 }); 138 //Set member- FontDescriptors... 139 fontDescriptor1.Weight = 150; 140 141 final String[] PROPNAMES = new String[] 142 { 143 "DefaultButton", PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_HELPURL, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, "PushButtonType", PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH 144 }; 145 146 Integer iButtonsX = new Integer(6 + ilWidth + 6); 147 148 btnOK = insertButton("btnOK", null, 149 PROPNAMES, 150 new Object[] 151 { 152 Boolean.TRUE, INTEGER_14, HelpIds.getHelpIdString(hid + 3), resources[RES_OK], "btnOK", iButtonsX, 22, new Short((short) com.sun.star.awt.PushButtonType.OK_value), new Short((short) 7), INTEGER_50 153 }); 154 btnCancel = insertButton("btnCancel", null, 155 PROPNAMES, 156 new Object[] 157 { 158 Boolean.FALSE, INTEGER_14, HelpIds.getHelpIdString(hid + 4), resources[RES_CANCEL], "btnCancel", iButtonsX, 41, new Short((short) com.sun.star.awt.PushButtonType.CANCEL_value), new Short((short) 8), INTEGER_50 159 }); 160 btnHelp = insertButton("btnHelp", null, 161 PROPNAMES, 162 new Object[] 163 { 164 Boolean.FALSE, INTEGER_14, PropertyNames.EMPTY_STRING, resources[RES_HELP], "CommandButton3", iButtonsX, 71, new Short((short) com.sun.star.awt.PushButtonType.HELP_value), new Short((short) 9), INTEGER_50 165 }); 166 167 if (showOtherButton) 168 { 169 170 int otherY = 22 + ilHeight - 14 - (showDeselectButton ? 19 : 0); 171 172 btnOther = insertButton("btnOther", "other", 173 PROPNAMES, 174 new Object[] 175 { 176 Boolean.FALSE, INTEGER_14, HelpIds.getHelpIdString(hid + 1), resources[RES_OTHER], "btnOther", iButtonsX, new Integer(otherY), new Short((short) com.sun.star.awt.PushButtonType.STANDARD_value), new Short((short) 5), INTEGER_50 177 }); 178 } 179 180 if (showDeselectButton) 181 { 182 183 int deselectY = 22 + ilHeight - 14; 184 185 btnDeselect = insertButton("btnNoImage", "deselect", 186 PROPNAMES, 187 new Object[] 188 { 189 Boolean.FALSE, INTEGER_14, HelpIds.getHelpIdString(hid + 2), resources[RES_DESELECT], "btnNoImage", iButtonsX, new Integer(deselectY), new Short((short) com.sun.star.awt.PushButtonType.STANDARD_value), new Short((short) 4), INTEGER_50 190 }); 191 } 192 193 il.setStep(new Short((short) 1)); 194 il.setPos(new Size(6, 22)); 195 il.helpURL = hid + 5; 196 il.tabIndex = 1; 197 il.create(this); 198 199 /*lblContainer = insertLabel("lblContainer", 200 new String[] {PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH}, 201 new Object[] { 176,"lblContainer",6,17,new Short((short)5),214} 202 );*/ 203 204 lblTitle = insertLabel("lblTitle", 205 new String[] 206 { 207 PropertyNames.FONT_DESCRIPTOR, PropertyNames.PROPERTY_HEIGHT, PropertyNames.PROPERTY_LABEL, PropertyNames.PROPERTY_NAME, PropertyNames.PROPERTY_POSITION_X, PropertyNames.PROPERTY_POSITION_Y, PropertyNames.PROPERTY_STEP, PropertyNames.PROPERTY_TABINDEX, PropertyNames.PROPERTY_WIDTH 208 }, 209 new Object[] 210 { 211 fontDescriptor1, INTEGERS[8], resources[RES_LABEL], "lblTitle", INTEGERS[6], INTEGERS[6], INTEGERS[1], new Short((short) 4), 216 212 }); 213 214 } 215 216 /** 217 * is called when the user clicks "none" 218 */ deselect()219 public void deselect() 220 { 221 il.setSelected(-1); 222 } 223 224 /** 225 * is called when the user clicks "other" 226 * 227 */ other()228 public void other() 229 { 230 } 231 232 /** 233 * @return the currently elected object. 234 */ getSelected()235 public Object getSelected() 236 { 237 return il.getSelectedObject(); 238 } 239 240 /** 241 * sets the currently selected object. 242 * @param obj the object (out of the model) to be selected. 243 */ setSelected(Object obj)244 public void setSelected(Object obj) 245 { 246 il.setSelected(obj); 247 il.showSelected(); 248 } 249 250 /** 251 * The counter renderer, which uses a template. 252 * The template replaces the Strings "%START", "%END" and 253 * "%TOTAL" with the respective values. 254 * @author rpiterman 255 * 256 */ 257 public static class ARenderer implements IRenderer 258 { 259 260 String template; 261 262 /** 263 * @param aTemplate a template for this renderer. 264 * The strings %START, %END ,%TOTAL will be replaced 265 * with the actual values. 266 */ ARenderer(String aTemplate)267 public ARenderer(String aTemplate) 268 { 269 template = aTemplate; 270 } 271 render(Object counter)272 public String render(Object counter) 273 { 274 String s = JavaTools.replaceSubString(template, PropertyNames.EMPTY_STRING + ((Counter) counter).start, START); 275 s = JavaTools.replaceSubString(s, PropertyNames.EMPTY_STRING + ((Counter) counter).end, END); 276 s = JavaTools.replaceSubString(s, PropertyNames.EMPTY_STRING + ((Counter) counter).max, TOTAL); 277 return s; 278 } 279 } 280 } 281