--- sd/inc/app.hrc 2004-12-07 18:49:43.000000000 +0530 +++ sd/inc/app.hrc 2004-12-22 13:45:04.000000000 +0530 @@ -487,4 +487,7 @@ #define SID_RENAME_MASTER_PAGE (SID_SD_START+433) #define SID_CLOSE_MASTER_VIEW (SID_SD_START+434) +// FIXME get an official SID +#define SID_SAVE_GRAPHIC (SID_SD_START+450) + #endif --- sd/sdi/_drvwsh.sdi 2004-12-07 18:50:08.000000000 +0530 +++ sd/sdi/_drvwsh.sdi 2004-12-22 13:46:11.000000000 +0530 @@ -115,6 +115,11 @@ interface DrawView : Object ExecMethod = FuTemporary ; StateMethod = GetMenuState ; ] + SID_SAVE_GRAPHIC // ole : yes, status : ? + [ + ExecMethod = FuTemporary ; + StateMethod = GetMenuState ; + ] SID_CUT // ole : no, status : ? [ ExecMethod = FuSupport ; --- sd/sdi/sdraw.sdi 2004-12-07 18:50:09.000000000 +0530 +++ sd/sdi/sdraw.sdi 2004-12-22 13:49:14.000000000 +0530 @@ -4818,6 +4818,31 @@ SfxVoidItem OriginalSize SID_ORIGINAL_SI ] //-------------------------------------------------------------------------- +SfxVoidItem SaveGraphic SID_SAVE_GRAPHIC +() +[ + /* flags: */ + AutoUpdate = FALSE, + Cachable = Cachable, + FastCall = FALSE, + HasCoreId = FALSE, + HasDialog = FALSE, + ReadOnlyDoc = TRUE, + Toggle = FALSE, + Container = FALSE, + RecordAbsolute = FALSE, + RecordPerSet; + Synchron; + + /* config: */ + AccelConfig = FALSE, + MenuConfig = FALSE, + StatusBarConfig = FALSE, + ToolBoxConfig = FALSE, + GroupId = GID_MODIFY; +] + +//-------------------------------------------------------------------------- SfxBoolItem OutlineMode SID_OUTLINEMODE [ --- sd/source/ui/app/localize.sdf 2004-12-07 18:50:16.000000000 +0530 +++ sd/source/ui/app/localize.sdf 2004-12-23 12:32:43.725777285 +0530 @@ -1384,6 +1384,34 @@ sd source\ui\app\menuids_tmpl.src 0 menu sd source\ui\app\menuids_tmpl.src 0 menuitem MN_COLORRESOLUTION DUMMY+4 0 sv ~Färgupplösning 2004-11-23 13:33:26.78 sd source\ui\app\menuids_tmpl.src 0 menuitem MN_COLORRESOLUTION DUMMY+4 0 zh-CN 彩色分辨率(~C) 2004-11-23 13:33:26.78 sd source\ui\app\menuids_tmpl.src 0 menuitem MN_COLORRESOLUTION DUMMY+4 0 zh-TW 顏色解析度(~C) 2004-11-23 13:33:26.78 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 ar ...حفظ الصورة 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 ca Desa ~imatge... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 cs Uložit obrázek 2003-10-21 15:24:56.263 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 cz Uložit obrázek 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 da Gem grafik... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 el Αποθήκευση ~γραφικού... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 es Guardar ~imagen... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 et Save Graphics... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 fi Tallenna grafiikka... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 fr Enregistrer l'~image... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 he ~Grafik speichern... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 hi-IN सुचित्रों को संचित करो... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 hu Kép mentése... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 it ~Salva immagine... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 ja 図の保存... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 ko 그래픽 저장... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 nl Afbeelding ops~laan... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 pl Zapisz grafikę... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 pt ~Guardar imagem... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 pt-BR Salvar figura... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 ru Сохранить графический объект... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 sk Uložiť obrázok 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 sl Shrani grafiko... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 sv ~Spara grafik... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 th บันทึกกราฟิค... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 tr Grafiği kaydet... 20040507 14:26:28 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 zh-CN 存盘图形... 2004-10-06 18:01:49.373 +sd source\ui\app\menuids_tmpl.src 0 menuitem MN_SAVE_GRAPHIC SID_SAVE_GRAPHIC SID_SAVE_GRAPHIC 0 zh-TW 儲存圖形... 2004-10-06 18:01:49.373 sd source\ui\app\menuids_tmpl.src 0 menuitem MN_COMBINE SID_COMBINE SID_COMBINE 0 es Com~binar Combina los objetos seleccionados 2004-11-23 13:33:26.78 sd source\ui\app\menuids_tmpl.src 0 menuitem MN_COMBINE SID_COMBINE SID_COMBINE 0 fr Combiner Associe les objets sélectionnés 2004-11-23 13:33:26.78 sd source\ui\app\menuids_tmpl.src 0 menuitem MN_COMBINE SID_COMBINE SID_COMBINE 0 it Com~bina Combina gli oggetti selezionati 2004-11-23 13:33:26.78 --- sd/source/ui/app/menuids_tmpl.src 2004-11-04 21:34:05.000000000 +0530 +++ sd/source/ui/app/menuids_tmpl.src 2004-12-23 11:57:32.982925950 +0530 @@ -1357,6 +1357,16 @@ Text [ x-comment ] = " ";\ }; +#define MN_SAVE_GRAPHIC\ + MenuItem\ + {\ + Identifier = SID_SAVE_GRAPHIC ; \ + HelpID = SID_SAVE_GRAPHIC ; \ + Text [ de ] = "~Grafik speichern..." ; \ + Text [ en-US ] = "Save ~Graphic..." ; \ + Text [ x-comment ] = " "; \ + }; + #define MN_COLORRESOLUTION \ MenuItem\ {\ --- sd/source/ui/app/popup2_tmpl.src 2004-12-07 18:50:16.000000000 +0530 +++ sd/source/ui/app/popup2_tmpl.src 2004-12-23 11:49:14.865785320 +0530 @@ -570,6 +570,15 @@ MN_STARIMAGE MN_COLORRESOLUTION SEPARATOR + MenuItem\ + {\ + Identifier = SID_SAVE_GRAPHIC ; \ + HelpID = SID_SAVE_GRAPHIC ; \ + Text [ de ] = "~Grafik speichern..." ; \ + Text [ en-US ] = "Save ~Graphic..." ; \ + Text [ x-comment ] = " "; \ + }; + SEPARATOR MN_CHAR_PARAGRAPH SEPARATOR MN_POSITION --- sd/source/ui/inc/DrawViewShell.hxx 2004-12-07 18:50:23.000000000 +0530 +++ sd/source/ui/inc/DrawViewShell.hxx 2004-12-22 14:00:43.000000000 +0530 @@ -490,6 +490,9 @@ private: PageKind ePageKind, SdPage* pPage); + /** Saves the selected graphic to a user-specified file */ + void SaveGraphic( ); + ::com::sun::star::uno::Reference< ::com::sun::star::scanner::XScannerManager > mxScannerManager; ::com::sun::star::uno::Reference< ::com::sun::star::lang::XEventListener > mxScannerListener; TransferableClipboardListener* pClipEvtLstnr; --- sd/source/ui/view/drviews2.cxx 2004-12-07 18:50:29.000000000 +0530 +++ sd/source/ui/view/drviews2.cxx 2004-12-22 15:44:30.000000000 +0530 @@ -112,6 +112,35 @@ #include #endif +#ifndef INCLUDED_SVTOOLS_PATHOPTIONS_HXX +#include +#endif +#ifndef _COM_SUN_STAR_UI_DIALOGS_XFILEPICKER_HPP_ +#include +#endif +#ifndef _COM_SUN_STAR_UI_DIALOGS_XFILTERMANAGER_HPP_ +#include +#endif +#ifndef _COM_SUN_STAR_UI_DIALOGS_TEMPLATEDESCRIPTION_HPP_ +#include +#endif +#ifndef _FILEDLGHELPER_HXX +#include +#endif +#ifndef _URLOBJ_HXX +#include +#endif +#ifndef _FILTER_HXX +#include +#endif +#ifndef _SVX_IMPGRF_HXX +#include +#endif +#ifndef _XOUTBMP_HXX +#include +#endif + + #define ITEMID_FIELD EE_FEATURE_FIELD #ifndef _SVX_FLDITEM_HXX //autogen #include @@ -1256,6 +1285,12 @@ void DrawViewShell::FuTemporary(SfxReque rReq.Done(); break; + case SID_SAVE_GRAPHIC: + SaveGraphic(); + Cancel(); + rReq.Ignore(); + break; + case SID_DRAW_FONTWORK: case SID_DRAW_FONTWORK_VERTICAL: { @@ -1306,4 +1341,88 @@ SdPage* DrawViewShell::CreateOrDuplicate return pNewPage; } + +// From sw/source/ui/docvw/romenu.cxx +void lcl_GetPreferedExtension( String &rExt, const Graphic &rGrf ) +{ + // dann ggfs. ueber die native-Info der Grafik den "besten" + // Filter vorschlagen + const sal_Char* pExt = "png"; + switch( ((Graphic *)&rGrf)->GetLink().GetType() ) + { + case GFX_LINK_TYPE_NATIVE_GIF: pExt = "gif"; break; + case GFX_LINK_TYPE_NATIVE_TIF: pExt = "tif"; break; + case GFX_LINK_TYPE_NATIVE_WMF: pExt = "wmf"; break; + case GFX_LINK_TYPE_NATIVE_MET: pExt = "met"; break; + case GFX_LINK_TYPE_NATIVE_PCT: pExt = "pct"; break; + case GFX_LINK_TYPE_NATIVE_JPG: pExt = "jpg"; break; + } + rExt.AssignAscii( pExt ); +} + + +void DrawViewShell::SaveGraphic() +{ + using namespace com::sun::star::uno; + using namespace com::sun::star::ui::dialogs; + using namespace ::sfx2; + + SvtPathOptions aPathOpt; + String sGrfPath( aPathOpt.GetGraphicPath() ); + + FileDialogHelper aDlgHelper( TemplateDescription::FILESAVE_SIMPLE, 0 ); + Reference < XFilePicker > xFP = aDlgHelper.GetFilePicker(); + + INetURLObject aPath; + aPath.SetSmartURL( sGrfPath); + + SdrGrafObj *pGrafObj = PTR_CAST( SdrGrafObj, pDrView->GetMarkedObjectList().GetMark( 0 )->GetObj() ); + if (0 == pGrafObj ) + return; + + const Graphic &rGraphic = pGrafObj->GetGraphic(); + + String aExt; + lcl_GetPreferedExtension( aExt, rGraphic ); + aExt.ToLowerAscii(); + int nDfltFilter = INT_MAX; + + xFP->setDisplayDirectory( aPath.GetMainURL(INetURLObject::DECODE_TO_IURI) ); + + GraphicFilter& rGF = *GetGrfFilter(); + const USHORT nCount = rGF.GetExportFormatCount(); + + Reference xFltMgr(xFP, UNO_QUERY); + + for ( int i = 0; i < nCount; i++ ) + { + xFltMgr->appendFilter( rGF.GetExportFormatName( i ), rGF.GetExportWildcard( i ) ); + if ( COMPARE_EQUAL == aExt.CompareIgnoreCaseToAscii(rGF.GetExportFormatShortName( i ).ToLowerAscii() )) + nDfltFilter = i; + } + + if( INT_MAX == nDfltFilter ) + return; + + xFltMgr->setCurrentFilter( rGF.GetExportFormatName( nDfltFilter ) ); + + if( aDlgHelper.Execute() == ERRCODE_NONE ) + { + String sPath( xFP->getFiles().getConstArray()[0] ); + //verwendeten Pfad merken - bitte nicht wieder wegoptimieren! + aPath.SetSmartURL( sPath); + sGrfPath = aPath.GetPath(); + + int nFilter; + if ( xFltMgr->getCurrentFilter().getLength() && rGF.GetExportFormatCount() ) + nFilter = rGF.GetExportFormatNumber( xFltMgr->getCurrentFilter() ); + else + nFilter = GRFILTER_FORMAT_DONTKNOW; + String aFilter( rGF.GetExportFormatShortName( nFilter ) ); + XOutBitmap::WriteGraphic( rGraphic, sPath, aFilter, + XOUTBMP_DONT_EXPAND_FILENAME ); + return; + } +} + } // end of namespace sd --- sd/source/ui/view/drviewsj.cxx 2004-10-15 16:06:30.000000000 +0530 +++ sd/source/ui/view/drviewsj.cxx 2004-12-22 14:11:09.000000000 +0530 @@ -193,7 +193,8 @@ void DrawViewShell::GetMenuStateSel( Sfx SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_BEFORE_OBJ ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_BEHIND_OBJ ) || SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_REVERSE_ORDER ) || - SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ORIGINAL_SIZE ) ) + SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_ORIGINAL_SIZE ) || + SFX_ITEM_AVAILABLE == rSet.GetItemState( SID_SAVE_GRAPHIC ) ) { const SdrObject* pObj = rMarkList.GetMark(0)->GetObj(); UINT32 nInv = pObj->GetObjInventor(); @@ -211,6 +212,11 @@ void DrawViewShell::GetMenuStateSel( Sfx rSet.DisableItem(SID_ORIGINAL_SIZE); } + if( !( pObj->ISA( SdrGrafObj ) ) ) + { + rSet.DisableItem( SID_SAVE_GRAPHIC ); + } + // Wenn es sich um kein Gruppenobjekt oder 3D-Objekt handelt // wird "Gruppe betreten" disabled if( !( ( pObj->ISA( SdrObjGroup ) && nInv == SdrInventor ) ||