| /************************************************************** |
| * |
| * 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.XControl; |
| import com.sun.star.awt.XControlModel; |
| import com.sun.star.awt.XDialog; |
| import com.sun.star.awt.XWindowPeer; |
| import com.sun.star.beans.UnknownPropertyException; |
| import com.sun.star.beans.XPropertySet; |
| import com.sun.star.container.XNameContainer; |
| import com.sun.star.lang.WrappedTargetException; |
| import com.sun.star.lang.XMultiComponentFactory; |
| import com.sun.star.lang.XMultiServiceFactory; |
| import com.sun.star.lang.EventObject; |
| import com.sun.star.uno.UnoRuntime; |
| import com.sun.star.uno.XComponentContext; |
| import java.util.Hashtable; |
| |
| public class WikiPropDialog extends WikiDialog{ |
| |
| WikiEditorImpl m_aWikiEditor; |
| |
| private final String sSendMethod = "Send"; |
| private final String sWikiListMethod = "WikiListChange"; |
| private final String sArticleTextMethod = "ArticleTextChange"; |
| private final String sAddWikiMethod = "AddWiki"; |
| |
| String[] m_pMethods = {sSendMethod, sWikiListMethod, sArticleTextMethod, sAddWikiMethod}; |
| |
| private String m_sWikiTitle = ""; |
| protected String m_sWikiEngineURL = ""; |
| protected String m_sWikiComment = ""; |
| protected boolean m_bWikiMinorEdit = false; |
| |
| /** Creates a new instance of WikiPropDialog */ |
| public WikiPropDialog(XComponentContext xContext, String DialogURL, WikiEditorImpl aWikiEditorForThrobber ) |
| { |
| super(xContext, DialogURL); |
| super.setMethods(m_pMethods); |
| |
| if ( aWikiEditorForThrobber != null ) |
| { |
| InsertThrobber( 224, 122, 10, 10 ); |
| m_aWikiEditor = aWikiEditorForThrobber; |
| } |
| |
| InitStrings( xContext ); |
| InitShowBrowser( xContext ); |
| InitControls( xContext ); |
| } |
| |
| private void InitControls( XComponentContext xContext ) |
| { |
| try |
| { |
| GetPropSet( "CommentText" ).setPropertyValue( "AutoVScroll", Boolean.TRUE ); |
| } |
| catch( Exception e ) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| private void InitStrings( XComponentContext xContext ) |
| { |
| try |
| { |
| SetTitle( Helper.GetLocalizedString( xContext, Helper.DLG_SENDTITLE ) ); |
| GetPropSet( "Label1" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_SENDTOMEDIAWIKI_LABEL1 ) ); |
| GetPropSet( "FixedLine2" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_WIKIARTICLE ) ); |
| GetPropSet( "Label2" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_SENDTOMEDIAWIKI_LABEL2 ) ); |
| GetPropSet( "Label3" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_SENDTOMEDIAWIKI_LABEL3 ) ); |
| GetPropSet( "MinorCheck" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_SENDTOMEDIAWIKI_MINORCHECK ) ); |
| GetPropSet( "BrowserCheck" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_SENDTOMEDIAWIKI_BROWSERCHECK ) ); |
| GetPropSet( "AddButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_ADDBUTTON ) ); |
| GetPropSet( "SendButton" ).setPropertyValue( "Label", Helper.GetLocalizedString( xContext, Helper.DLG_SENDBUTTON ) ); |
| } |
| catch( Exception e ) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| private void InitShowBrowser( XComponentContext xContext ) |
| { |
| try |
| { |
| GetPropSet( "BrowserCheck" ).setPropertyValue( "State", new Short( Helper.GetShowInBrowserByDefault( m_xContext ) ? (short)1 : (short)0 ) ); |
| } |
| catch( Exception e ) |
| { |
| e.printStackTrace(); |
| } |
| } |
| |
| public boolean show() |
| { |
| EnableControls( true ); |
| boolean bResult = super.show(); |
| |
| if ( bResult && Helper.GetShowInBrowserByDefault( m_xContext ) ) |
| Helper.ShowURLInBrowser( m_xContext, m_sWikiEngineURL + "index.php?title=" + m_sWikiTitle ); |
| |
| return bResult; |
| } |
| |
| public synchronized void ThreadStop( boolean bSelf ) |
| { |
| boolean bShowError = ( !bSelf && m_aThread != null && !m_bThreadFinished ); |
| |
| super.ThreadStop( bSelf ); |
| |
| if ( bShowError ) |
| Helper.ShowError( m_xContext, |
| m_xDialog, |
| Helper.DLG_SENDTITLE, |
| Helper.CANCELSENDING_ERROR, |
| null, |
| false ); |
| } |
| |
| public void fillWikiList() |
| { |
| String [] WikiList = m_aSettings.getWikiURLs(); |
| |
| try |
| { |
| XPropertySet xPS = GetPropSet("WikiList"); |
| xPS.setPropertyValue("StringItemList", WikiList); |
| // short [] nSel = new short[1]; |
| // nSel[0] = (short) m_aSettings.getLastUsedWikiServer(); |
| // xPS.setPropertyValue("SelectedItems", sel); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| |
| public void fillDocList() |
| { |
| XPropertySet xPS = GetPropSet("ArticleText"); |
| try |
| { |
| short [] sel = (short[]) GetPropSet("WikiList").getPropertyValue("SelectedItems"); |
| xPS.setPropertyValue("StringItemList", m_aSettings.getWikiDocList(sel[0], 5)); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| |
| |
| public String GetWikiTitle() |
| { |
| return m_sWikiTitle; |
| } |
| |
| public void SetWikiTitle(String sArticle) |
| { |
| m_sWikiTitle = sArticle; |
| try |
| { |
| XPropertySet xPS = GetPropSet("ArticleText"); |
| xPS.setPropertyValue("Text", sArticle); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| |
| |
| public void switchSendButtonIfNecessary() |
| { |
| XPropertySet xSendButton = GetPropSet( "SendButton" ); |
| if ( xSendButton != null ) |
| { |
| XPropertySet xWikiListProps = GetPropSet( "WikiList" ); |
| XPropertySet xArticleProps = GetPropSet( "ArticleText" ); |
| if ( xWikiListProps != null && xArticleProps != null ) |
| { |
| try |
| { |
| short [] pSel = (short[]) GetPropSet("WikiList").getPropertyValue("SelectedItems"); |
| String sArticle = (String)xArticleProps.getPropertyValue( "Text" ); |
| if ( pSel != null && pSel.length > 0 && sArticle != null && sArticle.length() != 0 ) |
| xSendButton.setPropertyValue( "Enabled", Boolean.TRUE ); |
| else |
| xSendButton.setPropertyValue( "Enabled", Boolean.FALSE ); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| } |
| } |
| |
| public void EnableControls( boolean bEnable ) |
| { |
| try |
| { |
| String[] pControls = { "WikiList", |
| "ArticleText", |
| "CommentText", |
| "MinorCheck", |
| "BrowserCheck", |
| "HelpButton", |
| "AddButton" }; |
| |
| for ( int nInd = 0; nInd < pControls.length; nInd++ ) |
| GetPropSet( pControls[nInd] ).setPropertyValue( "Enabled", new Boolean( bEnable ) ); |
| |
| if ( bEnable ) |
| { |
| SetFocusTo( "WikiList" ); |
| switchSendButtonIfNecessary(); |
| } |
| else |
| { |
| GetPropSet( "SendButton" ).setPropertyValue( "Enabled", new Boolean( bEnable ) ); |
| SetFocusTo( "CancelButton" ); |
| } |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| } |
| |
| public boolean callHandlerMethod( XDialog xDialog, Object EventObject, String MethodName ) |
| { |
| if ( MethodName.equals( sSendMethod ) ) |
| { |
| try |
| { |
| XPropertySet aWikiListProps = GetPropSet( "WikiList" ); |
| XPropertySet aArticleTextProps = GetPropSet( "ArticleText" ); |
| XPropertySet aCommentTextProps = GetPropSet( "CommentText" ); |
| XPropertySet aMinorCheckProps = GetPropSet( "MinorCheck" ); |
| XPropertySet aBrowserCheckProps = GetPropSet( "BrowserCheck" ); |
| |
| short [] sel = (short[]) aWikiListProps.getPropertyValue("SelectedItems"); |
| String [] items = (String []) aWikiListProps.getPropertyValue("StringItemList"); |
| m_sWikiEngineURL = items[sel[0]]; |
| m_aSettings.setLastUsedWikiServer(sel[0]); |
| m_sWikiTitle = (String) aArticleTextProps.getPropertyValue("Text"); |
| m_sWikiComment = (String) aCommentTextProps.getPropertyValue("Text"); |
| |
| short minorState = ((Short) aMinorCheckProps.getPropertyValue("State")).shortValue(); |
| if (minorState != 0) |
| m_bWikiMinorEdit = true; |
| else |
| m_bWikiMinorEdit = false; |
| |
| short nBrowserState = ((Short) aBrowserCheckProps.getPropertyValue("State")).shortValue(); |
| Helper.SetShowInBrowserByDefault( m_xContext, nBrowserState != 0 ); |
| |
| // allow to disable other buttons |
| EnableControls( false ); |
| } |
| catch (Exception ex) |
| { |
| ex.printStackTrace(); |
| } |
| |
| final WikiPropDialog aThisDialog = this; |
| final XDialog xDialogToClose = xDialog; |
| final XComponentContext xContext = m_xContext; |
| |
| // start spinning |
| SetThrobberVisible( true ); |
| SetThrobberActive( true ); |
| |
| // the following method might show a dialog, should be used in main thread |
| final Hashtable aWikiSettings = m_aSettings.getSettingByUrl( m_sWikiEngineURL ); |
| if ( Helper.AllowThreadUsage( m_xContext ) ) |
| { |
| m_aThread = new Thread( "com.sun.star.thread.WikiEditorSendingThread" ) |
| { |
| public void run() |
| { |
| try |
| { |
| if ( m_aWikiEditor != null ) |
| { |
| Thread.yield(); |
| m_bAction = m_aWikiEditor.SendArticleImpl( aThisDialog, aWikiSettings ); |
| } |
| } |
| finally |
| { |
| EnableControls( true ); |
| SetThrobberActive( false ); |
| SetThrobberVisible( false ); |
| |
| ThreadStop( true ); |
| if ( m_bAction ) |
| MainThreadDialogExecutor.Close( xContext, xDialogToClose ); |
| } |
| } |
| }; |
| |
| m_aThread.start(); |
| } |
| else |
| { |
| try |
| { |
| if ( m_aWikiEditor != null ) |
| { |
| m_bAction = m_aWikiEditor.SendArticleImpl( aThisDialog, aWikiSettings ); |
| } |
| } catch( java.lang.Exception e ) |
| {} |
| finally |
| { |
| EnableControls( true ); |
| SetThrobberActive( false ); |
| SetThrobberVisible( false ); |
| |
| if ( m_bAction ) |
| xDialogToClose.endExecute(); |
| } |
| } |
| |
| return true; |
| } |
| else if ( MethodName.equals( sWikiListMethod ) ) |
| { |
| fillDocList(); |
| switchSendButtonIfNecessary(); |
| return true; |
| } |
| else if ( MethodName.equals( sArticleTextMethod ) ) |
| { |
| switchSendButtonIfNecessary(); |
| return true; |
| } |
| else if ( MethodName.equals( sAddWikiMethod ) ) |
| { |
| WikiEditSettingDialog xAddDialog = new WikiEditSettingDialog(m_xContext, "vnd.sun.star.script:WikiEditor.EditSetting?location=application"); |
| if ( xAddDialog.show() ) |
| fillWikiList(); |
| |
| xAddDialog.DisposeDialog(); |
| |
| return true; |
| } |
| |
| return false; |
| } |
| |
| public void windowClosed( EventObject e ) |
| { |
| ThreadStop( false ); |
| } |
| } |
| |