diff options
Diffstat (limited to 'wizards/com/sun/star/wizards/web/BackgroundsDialog.java')
-rw-r--r-- | wizards/com/sun/star/wizards/web/BackgroundsDialog.java | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/wizards/com/sun/star/wizards/web/BackgroundsDialog.java b/wizards/com/sun/star/wizards/web/BackgroundsDialog.java new file mode 100644 index 000000000000..70c40fbc6072 --- /dev/null +++ b/wizards/com/sun/star/wizards/web/BackgroundsDialog.java @@ -0,0 +1,290 @@ +/************************************************************************* + * + * 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 javax.swing.DefaultListModel; + +import com.sun.star.awt.Size; +import com.sun.star.lang.XMultiServiceFactory; +import com.sun.star.wizards.common.ConfigSet; +import com.sun.star.wizards.common.Configuration; +import com.sun.star.wizards.common.FileAccess; +import com.sun.star.wizards.common.SystemDialog; +import com.sun.star.wizards.ui.ImageList; +import com.sun.star.wizards.web.data.CGImage; +import com.sun.star.wizards.web.data.CGSettings; + +/** + * @author rpiterman + * + * To change the template for this generated type comment go to + * Window>Preferences>Java>Code Generation>Code and Comments + */ +public class BackgroundsDialog extends ImageListDialog +{ + + private FileAccess fileAccess; + private SystemDialog sd; + private CGSettings settings; + + /** + * @param xmsf + */ + public BackgroundsDialog( + XMultiServiceFactory xmsf, + ConfigSet set_, WebWizardDialogResources resources) throws Exception + { + + super(xmsf, WWHID.HID_BG, new String[] + { + resources.resBackgroundsDialog, + resources.resBackgroundsDialogCaption, + resources.resOK, + resources.resCancel, + resources.resHelp, + resources.resDeselect, + resources.resOther, + resources.resCounter + }); + + sd = SystemDialog.createOpenDialog(xmsf); + sd.addFilter(resources.resImages, "*.jpg;*.jpeg;*.jpe;*.gif", true); + sd.addFilter(resources.resAllFiles, "*.*", false); + + settings = (CGSettings) set_.root; + + fileAccess = new FileAccess(xmsf); + il.setListModel(new Model(set_)); + il.setImageSize(new Size(40, 40)); + il.setRenderer(new BGRenderer(0)); + build(); + + + } + + /** + * trigered when the user clicks the "other" button. + * opens a "file open" dialog, adds the selected + * image to the list and to the web wizard configuration, + * and then jumps to the new image, selecting it in the list. + * @see add(String) + */ + public void other() + { + String filename[] = sd.callOpenDialog(false, settings.cp_DefaultSession.cp_InDirectory); + if (filename != null && filename.length > 0 && filename[0] != null) + { + settings.cp_DefaultSession.cp_InDirectory = FileAccess.getParentDir(filename[0]); + int i = add(filename[0]); + il.setSelected(i); + il.display(i); + } + } + + /** + * adds the given image to the image list (to the model) + * and to the web wizard configuration. + * @param s + * @return + */ + private int add(String s) + { + + //first i check the item does not already exists in the list... + for (int i = 0; i < il.getListModel().getSize(); i++) + { + if (il.getListModel().getElementAt(i).equals(s)) + { + return i; + } + } + ((DefaultListModel) il.getListModel()).addElement(s); + try + { + Object configView = Configuration.getConfigurationRoot(xMSF, FileAccess.connectURLs(WebWizardConst.CONFIG_PATH, "BackgroundImages"), true); + int i = Configuration.getChildrenNames(configView).length + 1; + Object o = Configuration.addConfigNode(configView, "" + i); + Configuration.set(s, "Href", o); + Configuration.commit(configView); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + + return il.getListModel().getSize() - 1; + + } + + /** + * an ImageList Imagerenderer implemtation. + * The image URL is the object given from the list model. + * the image name, got from the "render" method is + * the filename portion of the url. + * @author rpiterman + * + */ + private class BGRenderer implements ImageList.IImageRenderer + { + + private int cut; + + public BGRenderer(int cut_) + { + cut = cut_; + } + + public Object[] getImageUrls(Object listItem) + { + Object[] sRetUrls; + if (listItem != null) + { + sRetUrls = new Object[1]; + sRetUrls[0] = listItem; + return sRetUrls; + } + return null; + } + + public String render(Object object) + { + return object == null ? "" : FileAccess.getPathFilename(fileAccess.getPath((String) object, null)); + } + } + + /** + * This is a list model for the image list of the + * backgrounds dialog. + * It takes the Backgrounds config set as an argument, + * and "parses" it to a list of files: + * It goes through each image in the set, and checks it: + * if it is a directory it lists all image files in this directory. + * if it is a file, it adds the file to the list. + * @author rpiterman + */ + private class Model extends DefaultListModel + { + + /** + * constructor. </br> + * see class description for a description of + * the handling of the given model + * @param model the configuration set of the background images. + */ + public Model(ConfigSet model) + { + try + { + for (int i = 0; i < model.getSize(); i++) + { + CGImage image = (CGImage) model.getElementAt(i); + String path = sd.xStringSubstitution.substituteVariables(image.cp_Href, false); + if (fileAccess.exists(path, false)) + { + addDir(path); + } + else + { + remove((String) model.getKey(image)); + } + } + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + + /** + * when instanciating the model, it checks if each image + * exists. If it doesnot, it will be removed from + * the configuration. + * This is what this method does... + * @param imageName + */ + private void remove(String imageName) + { + try + { + Object conf = Configuration.getConfigurationRoot(xMSF, WebWizardConst.CONFIG_PATH + "/BackgroundImages", true); + Configuration.removeNode(conf, imageName); + } + catch (Exception ex) + { + ex.printStackTrace(); + } + } + + /** + * if the given url is a directory + * adds the images in the given directory, + * otherwise (if it is a file) adds the file to the list. + * @param url + */ + private void addDir(String url) + { + if (fileAccess.isDirectory(url)) + { + add(fileAccess.listFiles(url, false)); + } + else + { + add(url); + } + } + + /** + * adds the given filenames (urls) to + * the list + * @param filenames + */ + private void add(String[] filenames) + { + for (int i = 0; i < filenames.length; i++) + { + add(filenames[i]); + } + } + + /** + * adds the given image url to the list. + * if and only if it ends with jpg, jpeg or gif + * (case insensitive) + * @param filename image url. + */ + private void add(String filename) + { + String lcase = filename.toLowerCase(); + if (lcase.endsWith("jpg") || + lcase.endsWith("jpeg") || + lcase.endsWith("gif")) + { + Model.this.addElement(filename); + } + } + } +} |