/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ package com.sun.star.wiki; import com.sun.star.awt.XContainerWindowEventHandler; import com.sun.star.awt.XControl; import com.sun.star.awt.XControlContainer; import com.sun.star.awt.XDialog; import com.sun.star.awt.XDialogEventHandler; import com.sun.star.awt.XWindow; import com.sun.star.beans.XPropertySet; import com.sun.star.lang.WrappedTargetException; import com.sun.star.lang.XServiceInfo; import com.sun.star.lib.uno.helper.WeakBase; import com.sun.star.uno.AnyConverter; import com.sun.star.uno.UnoRuntime; import com.sun.star.uno.XComponentContext; import java.util.Hashtable; public final class WikiOptionsEventHandlerImpl extends WeakBase implements XServiceInfo, XContainerWindowEventHandler, XDialogEventHandler { static final String[] m_pServiceNames = { "com.sun.star.wiki.WikiOptionsEventHandler" }; static final String m_sImplementationName = WikiOptionsEventHandlerImpl.class.getName(); static final String sExternalEvent = "external_event"; static final String sAdd = "Add"; static final String sEdit = "Edit"; static final String sRemove = "Remove"; static final String sListStatus = "ListStatus"; static final String sListEdit = "ListEdit"; static final String sInitialize = "initialize"; static final String sOk = "ok"; static final String sBack = "back"; private XComponentContext m_xContext; private XDialog m_xDialog; private XControlContainer m_xControlContainer; Settings m_aSettings; public WikiOptionsEventHandlerImpl( XComponentContext xContext ) { m_xContext = xContext; } protected XPropertySet GetPropSet( String sControl ) { if ( m_xControlContainer != null ) { XControl xControl = m_xControlContainer.getControl(sControl); XPropertySet xListProps = (XPropertySet)UnoRuntime.queryInterface(XPropertySet.class, xControl.getModel() ); return xListProps; } return null; } private void RefreshView() { if ( m_aSettings != null ) { String[] pWikiList = m_aSettings.getWikiURLs(); XPropertySet xListProps = GetPropSet( "WikiList" ); if ( xListProps != null ) { try { xListProps.setPropertyValue( "StringItemList", pWikiList ); } catch ( Exception ex ) { ex.printStackTrace(); } } } } private void CheckButtonState() { XPropertySet xListProps = GetPropSet( "WikiList" ); if ( xListProps != null ) { try { short [] pSel = (short []) xListProps.getPropertyValue( "SelectedItems" ); XPropertySet xEditProps = GetPropSet( "EditButton" ); XPropertySet xRemoveProps = GetPropSet( "RemoveButton" ); Boolean bState = new Boolean( pSel.length != 0 ); xEditProps.setPropertyValue( "Enabled", bState ); xRemoveProps.setPropertyValue( "Enabled", bState ); } catch ( Exception ex ) { ex.printStackTrace(); } } } private void AddSetting() { WikiEditSettingDialog aSettingDialog = new WikiEditSettingDialog( m_xContext, "vnd.sun.star.script:WikiEditor.EditSetting?location=application" ); if ( aSettingDialog.show() ) RefreshView(); aSettingDialog.DisposeDialog(); } private void EditSetting() { XPropertySet xListProps = GetPropSet( "WikiList" ); if ( xListProps != null ) { Hashtable ht = null; try { short[] pSel = (short []) xListProps.getPropertyValue( "SelectedItems" ); String[] pItems = (String []) xListProps.getPropertyValue("StringItemList"); if ( pSel.length > 0 && pItems.length > pSel[0] ) { String selName = pItems[pSel[0]]; ht = m_aSettings.getSettingByUrl( pItems[pSel[0]] ); } } catch ( Exception ex ) { ex.printStackTrace(); } WikiEditSettingDialog aSettingDialog = new WikiEditSettingDialog(m_xContext, "vnd.sun.star.script:WikiEditor.EditSetting?location=application", ht, true ); if ( aSettingDialog.show() ) RefreshView(); aSettingDialog.DisposeDialog(); } } private void RemoveSetting() { XPropertySet xListProps = GetPropSet("WikiList"); if ( xListProps != null ) { try { short[] pSel = (short []) xListProps.getPropertyValue("SelectedItems"); String[] pItems = (String []) GetPropSet("WikiList").getPropertyValue("StringItemList"); if ( pSel.length > 0 && pItems.length > pSel[0] ) { m_aSettings.removeSettingByUrl( pItems[pSel[0]] ); RefreshView(); } } catch (Exception ex) { ex.printStackTrace(); } } } private void InitStrings() { try { GetPropSet( "FixedLine1" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_MEDIAWIKIEXTENSION_STRING ) ); GetPropSet( "AddButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_ADDBUTTON ) ); GetPropSet( "EditButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_EDITBUTTON ) ); GetPropSet( "RemoveButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( m_xContext, Helper.DLG_REMOVEBUTTON ) ); } catch( Exception e ) { e.printStackTrace(); } } // com.sun.star.lang.XServiceInfo: public String getImplementationName() { return m_sImplementationName; } public boolean supportsService( String sService ) { int len = m_pServiceNames.length; for( int i=0; i < len; i++ ) { if ( sService.equals( m_pServiceNames[i] )) return true; } return false; } public String[] getSupportedServiceNames() { return m_pServiceNames; } // XContainerWindowEventHandler public boolean callHandlerMethod( XWindow xWindow, Object aEventObject, String sMethod ) throws WrappedTargetException, com.sun.star.uno.RuntimeException { if ( sMethod.equals( sExternalEvent ) ) { try { String sEvent = (String)AnyConverter.toString( aEventObject ); if ( sEvent != null ) { if ( sEvent.equals( sOk ) ) { if ( m_aSettings != null ) m_aSettings.storeConfiguration(); } else if ( sEvent.equals( sInitialize ) || sEvent.equals( sBack ) ) { if ( sEvent.equals( sInitialize ) ) { m_xDialog = (XDialog)UnoRuntime.queryInterface( XDialog.class, xWindow ); m_xControlContainer = (XControlContainer)UnoRuntime.queryInterface( XControlContainer.class, m_xDialog ); m_aSettings = Settings.getSettings( m_xContext ); m_aSettings.loadConfiguration(); // throw away all the noncommited changes InitStrings(); } else if ( m_aSettings != null ) m_aSettings.loadConfiguration(); // throw away all the noncommited changes RefreshView(); CheckButtonState(); } } } catch ( com.sun.star.uno.RuntimeException r ) { throw r; } catch ( com.sun.star.uno.Exception e ) { throw new WrappedTargetException( sMethod, this, e ); } } else if ( sMethod.equals( sAdd ) ) { AddSetting(); } else if ( sMethod.equals( sEdit ) || sMethod.equals( sListEdit ) ) { EditSetting(); } else if ( sMethod.equals( sRemove ) ) { RemoveSetting(); CheckButtonState(); } else if ( sMethod.equals( sListStatus ) ) { CheckButtonState(); } return true; } public boolean callHandlerMethod( XDialog xDialog, Object aEventObject, String sMethod ) throws WrappedTargetException, com.sun.star.uno.RuntimeException { return true; } public String[] getSupportedMethodNames() { return new String[] { sExternalEvent, sAdd, sEdit, sRemove }; } }