summaryrefslogtreecommitdiff
path: root/vcl/os2/source/app/salshl.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'vcl/os2/source/app/salshl.cxx')
-rw-r--r--vcl/os2/source/app/salshl.cxx126
1 files changed, 126 insertions, 0 deletions
diff --git a/vcl/os2/source/app/salshl.cxx b/vcl/os2/source/app/salshl.cxx
new file mode 100644
index 000000000000..54957efa58bf
--- /dev/null
+++ b/vcl/os2/source/app/salshl.cxx
@@ -0,0 +1,126 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: salshl.cxx,v $
+ * $Revision: 1.5 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+
+#include <svpm.h>
+
+#define _SV_SALSHL_CXX
+#include <saldata.hxx>
+#include <tools/debug.hxx>
+
+// =======================================================================
+
+SalShlData aSalShlData;
+
+HMODULE ImplGetModule(void);
+static HMODULE mhMod = ImplGetModule();
+
+// =======================================================================
+
+APIRET APIENTRY DosQueryModFromEIP (HMODULE *phMod, ULONG *pObjNum,
+ ULONG BuffLen, PCHAR pBuff, ULONG *pOffset, ULONG Address);
+
+HMODULE ImplGetModule(void)
+{
+ HMODULE hMod;
+ ULONG ObjNum;
+ CHAR Buff[2*_MAX_PATH];
+ ULONG Offset;
+ APIRET rc;
+
+ // get module handle (and name)
+ rc = DosQueryModFromEIP( &hMod, &ObjNum, sizeof( Buff), Buff, &Offset, (ULONG)ImplGetModule);
+ if (rc)
+ return NULL;
+ // return module handle
+ aSalShlData.mhMod = hMod;
+ return hMod;
+}
+
+// =======================================================================
+
+HPOINTER ImplLoadSalCursor( int nId )
+{
+ DBG_ASSERT( aSalShlData.mhMod, "no DLL instance handle" );
+
+ HPOINTER hPointer = WinLoadPointer( HWND_DESKTOP, aSalShlData.mhMod, nId );
+
+ DBG_ASSERT( hPointer, "pointer not found in sal resource" );
+#if OSL_DEBUG_LEVEL>0
+ if (!hPointer)
+ debug_printf( "ImplLoadSalCursor: pointer %d not found in sal resource\n", nId);
+#endif
+ return hPointer;
+}
+
+// -----------------------------------------------------------------------
+
+BOOL ImplLoadSalIcon( int nId, HPOINTER& rIcon)
+{
+ DBG_ASSERT( aSalShlData.mhMod, "no DLL instance handle" );
+
+ SalData* pSalData = GetSalData();
+
+ // check the cache first
+ SalIcon *pSalIcon = pSalData->mpFirstIcon;
+ while( pSalIcon )
+ {
+ if( pSalIcon->nId != nId )
+ pSalIcon = pSalIcon->pNext;
+ else
+ {
+ rIcon = pSalIcon->hIcon;
+ return (rIcon != 0);
+ }
+ }
+
+ // Try at first to load the icons from the application exe file
+ rIcon = WinLoadPointer( HWND_DESKTOP, NULL, nId );
+ if ( !rIcon )
+ {
+ // If the application don't provide these icons, then we try
+ // to load the icon from the VCL resource
+ rIcon = WinLoadPointer( HWND_DESKTOP, aSalShlData.mhMod, nId );
+ }
+
+ if( rIcon )
+ {
+ // add to icon cache
+ pSalIcon = new SalIcon();
+ pSalIcon->nId = nId;
+ pSalIcon->hIcon = rIcon;
+ pSalIcon->pNext = pSalData->mpFirstIcon;
+ pSalData->mpFirstIcon = pSalIcon;
+ }
+
+ return (rIcon != 0);
+}
+
+// =======================================================================
+