View Issue Details

IDProjectCategoryView StatusLast Update
0002490ScribusOS-Win32public2005-09-25 20:52
Reporterjghali Assigned Tofschmid  
PrioritynormalSeveritytweakReproducibilityalways
Status closedResolutionfixed 
PlatformWindowsOSWindowsOS Version2000 SP4
Product Version1.3.1cvs 
Fixed in Version1.3.1cvs 
Summary0002490: ScPaths patches (win32 compatibility)
DescriptionThe provided patch modify ScPaths class in the following manner :
1) modify constructor to properly initialize directories on win32
2) provide abstractions which return system fonts directories (OSX/Win32)
3) provide abstractions which return icc profiles directories (OSX/Win32/*nix)

2) and 3) will be used in patches soon to come...
TagsNo tags attached.
Patch

Relationships

related to 0002219 closedringerc On Win32, add the ability to locate special directories and sytem fonts folder 

Activities

2005-08-26 17:04

 

scpaths_patches_win32.diff (4,912 bytes)   
Index: scpaths.cpp
===================================================================
RCS file: /cvs/Scribus/scribus/Attic/scpaths.cpp,v
retrieving revision 1.1.2.5
diff -u -r1.1.2.5 scpaths.cpp
--- scpaths.cpp	6 Jul 2005 20:07:15 -0000	1.1.2.5
+++ scpaths.cpp	26 Aug 2005 15:05:00 -0000
@@ -1,15 +1,20 @@
 #include "scpaths.h"
 #include <qapplication.h>
+#include <qdir.h>
 
 #include "scconfig.h"
 
-
 // On Qt/Mac we need CoreFoundation to discover the location
 // of the app bundle.
 #ifdef BUILD_MAC_BUNDLE
 #include <CoreFoundation/CoreFoundation.h>
 #endif
 
+#ifdef _WIN32
+#include <windows.h>
+#include <shlobj.h>
+#endif
+
 // Init the singleton's "self" address to NULL
 ScPaths* ScPaths::m_instance = NULL;
 
@@ -90,7 +95,17 @@
 	qDebug(QString("scpaths: plugin dir=%1").arg(m_pluginDir));
 	qDebug(QString("scpaths: qtplugins=%1").arg(QApplication::libraryPaths().join(":")));
 */
-#endif // defined(BUILD_MAC_BUNDLE)
+#elif defined(_WIN32)
+	QString appPath = qApp->applicationDirPath();
+	m_shareDir = strdup(QString("%1/share/").arg(appPath));
+	m_docDir = strdup(QString("%1/share/doc/").arg(appPath));
+	m_iconDir = strdup(QString("%1/share/icons/").arg(appPath));
+	m_sampleScriptDir = strdup(QString("%1/share/samples/").arg(appPath));
+	m_scriptDir = strdup(QString("%1/share/scripts/").arg(appPath));
+	m_templateDir = strdup(QString("%1/share/templates/").arg(appPath));
+	m_libDir = strdup(QString("%1/libs/").arg(appPath));
+	m_pluginDir = strdup(QString("%1/plugins/").arg(appPath));
+#endif
 }
 
 ScPaths::~ScPaths() {};
@@ -134,3 +149,67 @@
 {
 	return m_shareDir;
 }
+
+QStringList ScPaths::getSystemFontDirs(void)
+{
+	QStringList fontDirs;
+#ifdef BUILD_MAC_BUNDLE
+	fontDirs.append(QDir::homeDirPath() + "/Library/Fonts/");
+	fontDirs.append("/Library/Fonts/");
+	fontDirs.append("/Network/Library/Fonts/");
+	fontDirs.append("/System/Library/Fonts/");
+#else if defined(_WIN32)
+	fontDirs.append( getSpecialDir(CSIDL_FONTS) );
+#endif
+	return fontDirs;
+}
+
+QStringList ScPaths::getSystemProfilesDirs(void)
+{
+	QStringList iccProfDirs;
+#ifdef BUILD_MAC_BUNDLE
+	iccProfDirs.append(QDir::homeDirPath()+"/Library/ColorSync/Profiles/");
+	iccProfDirs.append("/System/Library/ColorSync/Profiles/");
+	iccProfDirs.append("/Library/ColorSync/Profiles/");
+#elif defined(Q_WS_X11)
+	iccProfDirs.append(QDir::homeDirPath()+"/color/icc/");
+	iccProfDirs.append(QDir::homeDirPath()+"/.color/icc/");
+	iccProfDirs.append("/usr/share/color/icc/");
+#elif defined(_WIN32)
+	// On Windows it's more complicated, profiles location depends on OS version
+	char sysDir[MAX_PATH + 1];
+	OSVERSIONINFO osVersion;
+	ZeroMemory( &osVersion, sizeof(OSVERSIONINFO));
+	osVersion.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); // Necessary for GetVersionEx to succeed
+	GetVersionEx(&osVersion);  // Get Windows version infos
+	GetSystemDirectory( sysDir, MAX_PATH ); // getSpecialDir(CSIDL_SYSTEM) fails on Win9x
+	QString winSysDir = QString(sysDir).replace('\\','/');
+	if( osVersion.dwPlatformId == VER_PLATFORM_WIN32_NT	) // Windows NT/2k/XP
+	{
+		if( osVersion.dwMajorVersion >= 5 ) // for 2k and XP dwMajorVersion == 5 
+			iccProfDirs.append( winSysDir + "/Spool/Drivers/Color/");
+	}
+	else if( osVersion.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS ) // Windows 9x/Me 
+	{
+		if( osVersion.dwMajorVersion >= 4 && osVersion.dwMinorVersion >= 10) // Win98 or WinMe
+			iccProfDirs.append( winSysDir + "/Color/");
+	}
+#endif
+	return iccProfDirs;
+}
+
+QString ScPaths::getSpecialDir(int folder)
+{
+	QString qstr;
+#if defined(_WIN32)
+	char dir[256];
+	SHGetSpecialFolderPath(NULL, dir, folder , false);
+	qstr = dir;
+	if( !qstr.endsWith("\\") )
+		qstr += "\\";
+	qstr.replace( '\\', '/' );
+#else
+	Q_ASSERT(false);
+#endif
+	return qstr;
+}
Index: scpaths.h
===================================================================
RCS file: /cvs/Scribus/scribus/Attic/scpaths.h,v
retrieving revision 1.1.2.3
diff -u -r1.1.2.3 scpaths.h
--- scpaths.h	10 Aug 2005 07:14:56 -0000	1.1.2.3
+++ scpaths.h	26 Aug 2005 16:48:27 -0000
@@ -38,12 +38,20 @@
 	/** @brief Return path to the Scribus share directory */
 	const QString& shareDir() const;
 
+	/** @brief Return paths to system font directories*/
+	static QStringList getSystemFontDirs(void);
+	/** @brief Return paths to system icc profiles directories*/
+	static QStringList getSystemProfilesDirs(void);
+
 protected:
 	/** @brief Constructor. Use ScPaths::instance() instead. */
 	ScPaths();
 	/** @brief Destructor. Use ScPaths::destroy() instead. */
 	~ScPaths();
 
+	/** @brief Return path to a special directory, should be used only on Windows*/
+	static QString getSpecialDir(int folder);
+
 	/** @brief Pointer to existing instance of ScPaths, if any. */
 	static ScPaths* m_instance;
 
scpaths_patches_win32.diff (4,912 bytes)   

Issue History

Date Modified Username Field Change
2005-08-26 17:04 jghali New Issue
2005-08-26 17:04 jghali File Added: scpaths_patches_win32.diff
2005-08-26 19:14 plinnell Status new => assigned
2005-08-26 19:14 plinnell Assigned To => fschmid
2005-08-26 21:56 fschmid Status assigned => resolved
2005-08-26 21:56 fschmid Fixed in Version => 1.3.1cvs
2005-08-26 21:56 fschmid Resolution open => fixed
2005-08-26 23:07 jghali Relationship added related to 0002219
2005-08-30 21:48 jghali Status resolved => closed
2005-09-25 20:52 cbradney Category Internal => Win32
2014-10-08 18:38 Kunda Category Win32 => OS-Win32