/**************************************************************
 * 
 * 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.
 * 
 *************************************************************/



module
"312C4240-35E7-101C-B12A-04021C007002"
"58216740-35E7-101C-B12A-04021C007002"
StarMath
[
	HelpText ( "StarMath Application" )
	SlotIdFile ( "starmath.hrc" )
	SlotIdFile ( "editeng/editids.hrc" )
	SlotIdFile ( "sfx2/sfxsids.hrc" )
	SlotIdFile ( "svx/svxids.hrc" )
]
{
    include "sfx2/sfxitems.sdi"
    include "sfx2/sfx.sdi"
    include "svx/svxitems.sdi"
    include "svx/xoitems.sdi"
    include "svx/svx.sdi"
	include "smath.sdi"
    interface StarMath
	[
		uuid ( "92B0FD20-2FC1-11CF-89CA-008029E4B0B1" )
	]
	{
	SID_CONFIGEVENT //idlpp ole : no , status : no
	[
		StateMethod = GetState ;
	]
}

shell SmModule
{
	import StarMath[Automation];
}

interface FormulaDocument
[
	uuid ( "815CBB20-2FC3-11CF-89CA-008029E4B0B1" )
]
{
	SID_DOCTEMPLATE //idlpp ole : no , status : no
	[
		StateMethod = GetState ;
	]
	SID_AUTO_REDRAW //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menuepunkt , also keine Texte
	SID_LOADSYMBOLS //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menuepunkt , also keine Texte
	SID_SAVESYMBOLS //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_FONT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_FONTSIZE //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_DISTANCE //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_ALIGN //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_TEXTMODE //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_MODIFYSTATUS //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_TEXT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
        SID_GAPHIC_SM //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]

	SID_UNDO //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_REDO //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_GETUNDOSTRINGS //idlpp ole : no , status : no
	[
		StateMethod = GetState ;
	]
	SID_GETREDOSTRINGS //idlpp ole : no , status : no
	[
		StateMethod = GetState ;
	]
}

shell SmDocShell
{
	import FormulaDocument[Automation];
}


interface FormulaView
[
	uuid ( "CE1A6C00-2FC3-11CF-89CA-008029E4B0B1" )
]
{
	SID_FORMULACURSOR
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_NEXTERR //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_PREVERR //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_NEXTMARK //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_PREVMARK //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_VIEW050 //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_VIEW100 //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_VIEW200 //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_ZOOMIN //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_ZOOMOUT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_DRAW //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_ADJUST //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_FITINWINDOW //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
        //idlpp kein Menueeintrag , also keine Texte
        SID_COPYOBJECT //idlpp ole : no , status : no
        [
                ExecMethod = Execute ;
                StateMethod = GetState ;
        ]
        //idlpp kein Menueeintrag , also keine Texte
        SID_PASTEOBJECT //idlpp ole : no , status : no
        [
                ExecMethod = Execute ;
                StateMethod = GetState ;
        ]
	SID_CUT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_COPY //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_PASTE //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_DELETE //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	SID_SELECT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_INSERTCOMMAND //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_INSERTTEXT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
    SID_IMPORT_FORMULA //idlpp ole : no , status : no
    [
        ExecMethod = Execute ;
        StateMethod = GetState ;
        Export = FALSE ;
    ]
	//idlpp kein Menueeintrag , also keine Texte
	SID_ATTR_ZOOM //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_TEXTSTATUS //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_GETEDITTEXT //idlpp ole : no , status : no
	[
		ExecMethod = Execute ;
		StateMethod = GetState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_CMDBOXWINDOW //idlpp ole : no , status : no
	[
		ExecMethod = NoExec ;
		StateMethod = NoState ;
	]
	//idlpp kein Menueeintrag , also keine Texte
	SID_TOOLBOXWINDOW //idlpp ole : no , status : no
	[
		ExecMethod = NoExec ;
		StateMethod = NoState ;
	]
        SID_TOOLBOX //idlpp ole : no , status : no
        [
                ExecMethod = Execute ;
                StateMethod = GetState ;
        ]
        SID_SYMBOLS_CATALOGUE //idlpp ole : no , status : no
        [
                ExecMethod = Execute ;
                StateMethod = GetState ;
        ]
}

shell SmViewShell
{
	import FormulaView[Automation];
}

}

