/** * Versucht eine SEPA-Ueberweisung aus der Zwischenablage zu erstellen. * * @return die Ueberweisung, wenn eine erstellt werden konnte oder null. */ public AuslandsUeberweisung getUeberweisung() { try { // BUGZILLA 336 final Clipboard cb = new Clipboard(GUI.getDisplay()); TextTransfer transfer = TextTransfer.getInstance(); String text = (String) cb.getContents(transfer); if (text == null || text.length() == 0) return null; text = text.trim(); // Fuer den Fall, dass wir Key+Value nicht nur durch Doppelpunkt sondern zusaetzlich // auch noch durch einen Zeilenumbruch getrennt sind, entfernen wir Zeilen-Umbrueche, // wenn sie auf einen Doppelpunkt folgen // Siehe http://www.onlinebanking-forum.de/phpBB2/viewtopic.php?p=82519#82519 text = PT_SPLIT.matcher(text).replaceAll(":"); StringTokenizer st = new StringTokenizer(text, System.getProperty("line.separator", "\n")); HashMap values = new HashMap(); while (st.hasMoreTokens()) { String line = st.nextToken(); if (line == null || line.length() <= 0) continue; line = line.replaceAll("\\s", " "); int sep = line.indexOf(":"); if (sep == -1) continue; values.put(line.substring(0, sep).trim(), line.substring(sep + 1).trim()); } AuslandsUeberweisung u = (AuslandsUeberweisung) Settings.getDBService().createObject(AuslandsUeberweisung.class, null); Iterator i = values.keySet().iterator(); while (i.hasNext()) { String s = (String) i.next(); String value = (String) values.get(s); if (value == null || s == null) continue; if (PT_BLZ.matcher(s).matches()) u.setGegenkontoBLZ(value.replaceAll(" ", "")); else if (PT_KONTO.matcher(s).matches()) u.setGegenkontoNummer(value.replaceAll(" ", "")); else if (PT_NAME.matcher(s).matches()) u.setGegenkontoName(value); else if (PT_ZWECK.matcher(s).matches()) u.setZweck(value); } return u; } catch (Throwable t) { Logger.debug("unable to parse clipboard data: " + t.getMessage()); } return null; }
/** * Setzt den anzuzeigenden Titel. * * @param text der Titel. */ public void setTitle(String text) { this.titleText = text; if (this.title != null) { GUI.getDisplay() .syncExec( new Runnable() { public void run() { if (title.isDisposed()) return; title.redraw(); } }); } }
/** Aktualisiert die Buttons. */ private void updateButtons() { if (panelButtons == null || panelButtons.isDisposed()) return; GUI.getDisplay() .syncExec( new Runnable() { public void run() { if (panelButtons.isDisposed()) return; try { // Kurz ausblenden - sieht beim Aufbau sauberer aus panelButtons.setVisible(false); int size = buttons.size(); // Aktuelle Buttons disposen SWTUtil.disposeChildren(panelButtons); // Neues Layout basierend auf der Anzahl der Buttons anlegen panelButtons.setLayout(SWTUtil.createGrid(size, false)); // Breite errechnen Image background = SWTUtil.getImage(PanelButton.BG_DEFAULT); GridData gd = (GridData) panelButtons.getLayoutData(); gd.widthHint = background.getBounds().width * size; // Alle Buttons zeichnen - von rechts nach links for (int i = size - 1; i >= 0; i--) { buttons.get(i).paint(panelButtons); } // Das Neuberechnen des Parent fuehrt dazu, dass wir mehr Breite fuer die neuen // Buttons kriegen panelButtons.getParent().layout(); // Und wir zeichnen uns selbst neu panelButtons.layout(); } catch (Exception e) { Logger.error("unable to paint panel buttons", e); } finally { panelButtons.setVisible(true); } } }); }
/** * @see * de.willuhn.jameica.messaging.MessageConsumer#handleMessage(de.willuhn.jameica.messaging.Message) */ public void handleMessage(Message message) throws Exception { if (message == null || !(message instanceof QueryMessage)) return; final Object data = ((QueryMessage) message).getData(); if (data == null || !(data instanceof Kontenrahmen)) return; GUI.getDisplay() .asyncExec( new Runnable() { public void run() { try { addItem(data); sort(); } catch (Exception e) { Logger.error("error while adding new data", e); } } }); }
/** @see de.willuhn.jameica.gui.Part#paint(org.eclipse.swt.widgets.Composite) */ public void paint(Composite parent) { if (myParent != null) return; // BUGZILLA 286 Wenn die Ueberschriftengroesse hoeher als die Bild-Groesse ist, dann strecken Image image = SWTUtil.getImage("panelbar.png"); int imageHeight = image.getBounds().height; int fontHeight = Font.getHeight(FONT) + (2 * TITLE_OFFSET_Y); // Abstand oben und unten brauchen wir auch etwas int height = fontHeight > imageHeight ? fontHeight : imageHeight; /////////////////////////////// // Eigenes Parent, damit wir ein GridLayout verwenden koennen myParent = new Composite(parent, this.border ? SWT.BORDER : SWT.NONE); myParent.setLayout(SWTUtil.createGrid(1, false)); myParent.setLayoutData(new GridData(GridData.FILL_BOTH)); // /////////////////////////////// /////////////////////////////// // Titelleiste Composite head = new Composite(myParent, SWT.NONE); head.setLayout(SWTUtil.createGrid(2, false)); { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = height; head.setLayoutData(gd); } // /////////////////////////////// /////////////////////////////// // Der Titel selbst title = SWTUtil.getCanvas(head, image, SWT.TOP | SWT.BOTTOM); title.setBackground(GUI.getDisplay().getSystemColor(SWT.COLOR_LIST_BACKGROUND)); title.setLayout(SWTUtil.createGrid(1, false)); { GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = height; title.setLayoutData(gd); } title.addListener( SWT.Paint, new Listener() { public void handleEvent(Event event) { GC gc = event.gc; gc.setFont(FONT.getSWTFont()); // kein Hintergrund hinter dem Text malen // Ist zumindest unter Linux nicht noetig. Windows und OSX muesste man mal noch testen gc.setBackground(GUI.getDisplay().getSystemColor(SWT.TRANSPARENT)); // gc.setForeground(GUI.getDisplay().getSystemColor(SWT.COLOR_BLACK)); // Siehe Mail von // Hermann vom 29.03.2012 gc.drawText(titleText == null ? "" : titleText, TITLE_OFFSET_X, TITLE_OFFSET_Y, true); } }); // /////////////////////////////// /////////////////////////////// // Bereich fuer die Buttons this.panelButtons = new Composite(head, SWT.NONE); { GridData gd = new GridData(); gd.heightHint = height; gd.widthHint = 0; // Erstmal ohne Breitenangabe - gibts erst, wenn wirklich Buttons da sind this.panelButtons.setLayoutData(gd); } // /////////////////////////////// /////////////////////////////// // Separator Label sep = new Label(myParent, SWT.SEPARATOR | SWT.HORIZONTAL); sep.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // /////////////////////////////// // Einmal initial die Buttons zeichnen updateButtons(); }