This patch adds a "Save Image As" option to the image context menu,
allowing you to save images from a document to a png file.

Bye!
  Marc aka Uwog

PS: This patch clearly breaks the strings freeze by adding a 2 new
strings, so you could apply it post 1.0 it this is a problem.

Index: abi/src/wp/ap/xp/ap_EditMethods.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_EditMethods.cpp,v
retrieving revision 1.464
diff -u -r1.464 ap_EditMethods.cpp
--- abi/src/wp/ap/xp/ap_EditMethods.cpp	21 Mar 2002 21:56:24 -0000	1.464
+++ abi/src/wp/ap/xp/ap_EditMethods.cpp	22 Mar 2002 17:55:08 -0000
@@ -269,6 +269,7 @@
 	static EV_EditMethod_Fn fileOpen;
 	static EV_EditMethod_Fn fileSave;
 	static EV_EditMethod_Fn fileSaveAs;
+	static EV_EditMethod_Fn fileSaveImage;
 	static EV_EditMethod_Fn fileExport;
 	static EV_EditMethod_Fn fileImport;
 	static EV_EditMethod_Fn formatPainter;
@@ -686,6 +687,7 @@
 	EV_EditMethod(NF(fileSave), 			0,	""),
 	EV_EditMethod(NF(fileSaveAs),			0,	""),
 	EV_EditMethod(NF(fileSaveAsWeb),				0, ""),
+	EV_EditMethod(NF(fileSaveImage),		0,	""),
 	EV_EditMethod(NF(find), 				0,	""),
 	EV_EditMethod(NF(findAgain),			0,	""),	
 	EV_EditMethod(NF(fontFamily),			_D_,	""),
@@ -2114,6 +2116,58 @@
 	}
 
   return true;
+}
+
+Defun1(fileSaveImage)
+{
+	CHECK_FRAME;
+	XAP_Frame * pFrame = static_cast<XAP_Frame *> ( pAV_View->getParentData());
+	UT_ASSERT(pFrame);
+
+	XAP_DialogFactory * pDialogFactory
+		= (XAP_DialogFactory *) pFrame->getDialogFactory();
+	
+	XAP_Dialog_FileOpenSaveAs * pDialog
+		= (XAP_Dialog_FileOpenSaveAs *)(pDialogFactory->requestDialog(XAP_DIALOG_ID_FILE_SAVEAS));
+	UT_ASSERT(pDialog);
+	
+	UT_uint32 filterCount = 1;
+	const char ** szDescList = (const char **) UT_calloc(filterCount + 1, sizeof(char *));
+	const char ** szSuffixList = (const char **) UT_calloc(filterCount + 1, sizeof(char *));
+	IEFileType * nTypeList = (IEFileType *) UT_calloc(filterCount + 1, sizeof(IEFileType));
+	
+	// we only support saving images in png format for now
+	szDescList[0] = "Portable Network Graphics (.png)";
+	szSuffixList[0] = "*.png";
+	nTypeList[0] = (IEFileType)1;	
+	
+	pDialog->setFileTypeList(szDescList, szSuffixList, 
+							 (const UT_sint32 *) nTypeList);
+	
+	pDialog->setDefaultFileType((IEFileType)1);	
+	
+	pDialog->runModal(pFrame);
+	
+	XAP_Dialog_FileOpenSaveAs::tAnswer ans = pDialog->getAnswer();
+	bool bOK = (ans == XAP_Dialog_FileOpenSaveAs::a_OK);
+
+	if (bOK)
+	{
+		const char * szResultPathname = pDialog->getPathname();
+		if (szResultPathname && *szResultPathname)
+		{
+			FV_View * pView = static_cast<FV_View *>(pAV_View);
+			pView->saveSelectedImage (szResultPathname);
+		}
+	}
+	
+	FREEP(szDescList);
+	FREEP(szSuffixList);
+	FREEP(nTypeList);
+	
+	pDialogFactory->releaseDialog(pDialog);
+	
+	return true;
 }
 
 Defun1(filePreviewWeb)
Index: abi/src/wp/ap/xp/ap_ML_ContextImage.h
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_ML_ContextImage.h,v
retrieving revision 1.2
diff -u -r1.2 ap_ML_ContextImage.h
--- abi/src/wp/ap/xp/ap_ML_ContextImage.h	16 Nov 2001 21:24:24 -0000	1.2
+++ abi/src/wp/ap/xp/ap_ML_ContextImage.h	22 Mar 2002 17:55:09 -0000
@@ -29,6 +29,7 @@
 
 	BeginPopupMenu()
 		MenuItem(AP_MENU_ID_FMT_IMAGE)
+		MenuItem(AP_MENU_ID_FILE_SAVEIMAGE)
 		Separator()
 		MenuItem(AP_MENU_ID_EDIT_CUT)
 		MenuItem(AP_MENU_ID_EDIT_COPY)
Index: abi/src/wp/ap/xp/ap_Menu_ActionSet.cpp
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_Menu_ActionSet.cpp,v
retrieving revision 1.82
diff -u -r1.82 ap_Menu_ActionSet.cpp
--- abi/src/wp/ap/xp/ap_Menu_ActionSet.cpp	21 Mar 2002 15:20:50 -0000	1.82
+++ abi/src/wp/ap/xp/ap_Menu_ActionSet.cpp	22 Mar 2002 17:55:10 -0000
@@ -72,6 +72,7 @@
 	_s(AP_MENU_ID_FILE_OPEN,		0,1,0,	"fileOpen",			NULL,					NULL);
 	_s(AP_MENU_ID_FILE_SAVE,		0,0,0,	"fileSave",			ap_GetState_Changes,					NULL);
 	_s(AP_MENU_ID_FILE_SAVEAS,		0,1,0,	"fileSaveAs",		NULL,					NULL);
+	_s(AP_MENU_ID_FILE_SAVEIMAGE,		0,1,0,	"fileSaveImage",		NULL,					NULL);
 	_s(AP_MENU_ID_FILE_IMPORT, 0,1,0, "fileImport", NULL, NULL);
 	_s(AP_MENU_ID_FILE_EXPORT, 0,1,0, "fileExport", NULL, NULL);
 	_s(AP_MENU_ID_FILE_CLOSE,		0,0,0,	"closeWindow",		NULL,					NULL);
Index: abi/src/wp/ap/xp/ap_Menu_Id_List.h
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_Menu_Id_List.h,v
retrieving revision 1.4
diff -u -r1.4 ap_Menu_Id_List.h
--- abi/src/wp/ap/xp/ap_Menu_Id_List.h	2 Jan 2002 19:45:03 -0000	1.4
+++ abi/src/wp/ap/xp/ap_Menu_Id_List.h	22 Mar 2002 17:55:11 -0000
@@ -45,6 +45,7 @@
 menuitem(FILE_OPEN)
 menuitem(FILE_SAVE)
 menuitem(FILE_SAVEAS)
+menuitem(FILE_SAVEIMAGE)
 menuitem(FILE_EXPORT)
 menuitem(FILE_IMPORT)
 menuitem(FILE_CLOSE)
Index: abi/src/wp/ap/xp/ap_String_Id.h
===================================================================
RCS file: /cvsroot/abi/src/wp/ap/xp/ap_String_Id.h,v
retrieving revision 1.141
diff -u -r1.141 ap_String_Id.h
--- abi/src/wp/ap/xp/ap_String_Id.h	1 Feb 2002 00:17:14 -0000	1.141
+++ abi/src/wp/ap/xp/ap_String_Id.h	22 Mar 2002 17:55:15 -0000
@@ -619,6 +619,7 @@
 dcl(MENU_LABEL_FILE_CLOSE,"&Close")
 dcl(MENU_LABEL_FILE_SAVE,"&Save")
 dcl(MENU_LABEL_FILE_SAVEAS,"Save &As")
+dcl(MENU_LABEL_FILE_SAVEIMAGE,"Save &Image As")
 dcl(MENU_LABEL_FILE_IMPORT,"Op&en Copy")
 dcl(MENU_LABEL_FILE_EXPORT,"Sa&ve Copy")
 dcl(MENU_LABEL_FILE_PAGESETUP,"Page Set&up")
@@ -817,6 +818,7 @@
 dcl(MENU_STATUSLINE_FILE_CLOSE,"Close the document")
 dcl(MENU_STATUSLINE_FILE_SAVE,"Save the document")
 dcl(MENU_STATUSLINE_FILE_SAVEAS,"Save the document under a different name")
+dcl(MENU_STATUSLINE_FILE_SAVEIMAGE,"Save the selected image to a file")
 dcl(MENU_STATUSLINE_FILE_IMPORT,"Open a document by making a copy")
 dcl(MENU_STATUSLINE_FILE_EXPORT,"Save the document without changing the current name")
 dcl(MENU_STATUSLINE_FILE_PAGESETUP,"Change the printing options")

Reply via email to