franta-hg@19: /** franta-hg@19: * Rozšířené atributy – program na správu rozšířených atributů souborů franta-hg@19: * Copyright © 2012 František Kučera (frantovo.cz) franta-hg@20: * franta-hg@19: * This program is free software: you can redistribute it and/or modify franta-hg@19: * it under the terms of the GNU General Public License as published by franta-hg@19: * the Free Software Foundation, either version 3 of the License, or franta-hg@19: * (at your option) any later version. franta-hg@20: * franta-hg@19: * This program is distributed in the hope that it will be useful, franta-hg@19: * but WITHOUT ANY WARRANTY; without even the implied warranty of franta-hg@20: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the franta-hg@19: * GNU General Public License for more details. franta-hg@20: * franta-hg@19: * You should have received a copy of the GNU General Public License franta-hg@20: * along with this program. If not, see . franta-hg@19: */ franta-hg@18: package cz.frantovo.rozsireneAtributy.jedit; franta-hg@18: franta-hg@20: import cz.frantovo.rozsireneAtributy.gui.Model; franta-hg@20: import cz.frantovo.rozsireneAtributy.gui.Panel; franta-hg@20: import java.awt.BorderLayout; franta-hg@20: import java.io.File; franta-hg@20: import java.io.IOException; franta-hg@18: import java.util.logging.Level; franta-hg@18: import java.util.logging.Logger; franta-hg@18: import javax.swing.JPanel; franta-hg@18: import org.gjt.sp.jedit.Buffer; franta-hg@18: import org.gjt.sp.jedit.EBComponent; franta-hg@18: import org.gjt.sp.jedit.EBMessage; franta-hg@18: import org.gjt.sp.jedit.EditBus; franta-hg@18: import org.gjt.sp.jedit.View; franta-hg@18: import org.gjt.sp.jedit.msg.EditPaneUpdate; franta-hg@18: franta-hg@18: /** franta-hg@18: * franta-hg@18: * @author Ing. František Kučera (frantovo.cz) franta-hg@18: */ franta-hg@18: public class DokovatelnyPanel extends JPanel implements EBComponent { franta-hg@18: franta-hg@18: private static final Logger log = Logger.getLogger(DokovatelnyPanel.class.getName()); franta-hg@18: private View view; franta-hg@18: franta-hg@18: public DokovatelnyPanel(final View view, final String position) { franta-hg@18: this.view = view; franta-hg@20: setLayout(new BorderLayout()); franta-hg@20: změňSoubor(view.getBuffer()); franta-hg@18: } franta-hg@18: franta-hg@18: /** franta-hg@18: * Zaregistrujeme se, aby nám chodily události editoru. franta-hg@18: */ franta-hg@18: @Override franta-hg@18: public void addNotify() { franta-hg@18: super.addNotify(); franta-hg@18: EditBus.addToBus(this); franta-hg@18: } franta-hg@18: franta-hg@18: /** franta-hg@18: * @see #addNotify() franta-hg@18: */ franta-hg@18: @Override franta-hg@18: public void removeNotify() { franta-hg@18: super.removeNotify(); franta-hg@18: EditBus.removeFromBus(this); franta-hg@18: } franta-hg@18: franta-hg@18: /** franta-hg@18: * Zpracujeme události editoru. franta-hg@18: * Zajímá nás přepnutí na jiný soubor – abychom pro něj zobrazili atributy. franta-hg@18: * franta-hg@18: * @param událost událost editoru franta-hg@18: */ franta-hg@18: @Override franta-hg@18: public void handleMessage(EBMessage událost) { franta-hg@18: try { franta-hg@18: if (událost instanceof EditPaneUpdate) { franta-hg@18: EditPaneUpdate epu = (EditPaneUpdate) událost; franta-hg@18: // Chodí nám všechny události – potřebujeme filtrovat jen ty pro naše okno. franta-hg@18: if (view == epu.getEditPane().getView()) { franta-hg@18: změňSoubor(view.getBuffer()); franta-hg@18: } franta-hg@18: } franta-hg@18: // událost instanceof BufferUpdate franta-hg@18: // událost instanceof PropertiesChanged franta-hg@18: } catch (Exception e) { franta-hg@18: log.log(Level.WARNING, "Chyba při zpracování události: " + událost, e); franta-hg@18: } franta-hg@18: franta-hg@18: } franta-hg@18: franta-hg@18: private void změňSoubor(Buffer b) { franta-hg@20: try { franta-hg@20: File s = new File(b.getPath()); franta-hg@20: franta-hg@20: if (s.isFile() && s.canRead()) { franta-hg@20: Model m = new Model(s); franta-hg@20: Panel p = new Panel(m); franta-hg@20: removeAll(); franta-hg@20: add(p, BorderLayout.CENTER); franta-hg@20: } else { franta-hg@20: // TODO: zobrazit chybu franta-hg@22: log.log(Level.WARNING, "Soubor neexistuje nebo nemáme práva na čtení: {0}", s); franta-hg@20: } franta-hg@20: } catch (IOException e) { franta-hg@20: log.log(Level.WARNING, "Chyba při změně souboru.", e); franta-hg@20: } franta-hg@18: } franta-hg@18: }