changeset 77:0654fc9bac95

more porting
author mandel
date Sun, 24 May 2009 13:46:32 +0000
parents 454e4b4beb59
children 3d465c0a4f98
files demos/browser/TODO.txt demos/browser/bookmarks.d demos/browser/browserapplication.d demos/browser/browsermainwindow.d demos/browser/chasewidget.d demos/browser/cookiejar.d demos/browser/downloadmanager.d demos/browser/history.d demos/browser/main.d demos/browser/modelmenu.d demos/browser/networkaccessmanager.d demos/browser/searchlineedit.d demos/browser/settings.d demos/browser/squeezelabel.d demos/browser/tabwidget.d demos/browser/toolbarsearch.d demos/browser/urllineedit.d demos/browser/webview.d demos/browser/xbel.d
diffstat 19 files changed, 528 insertions(+), 551 deletions(-) [+]
line wrap: on
line diff
--- a/demos/browser/TODO.txt	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/TODO.txt	Sun May 24 13:46:32 2009 +0000
@@ -1,14 +1,7 @@
 This is a very coarse port of ./demos/browser from the QT 4.5.1 linux sources.
 
-Done:
-- *.cpp and *.h files have been merged into *.d files
-- C preprocessor include lines where replaced by import lines.
-- const from function headers were removed.
-- some '::' and most '->' have been replaced by '.'
-
 Todo:
-- what about Q_PROPERTY/Q_UNUSED?
-- resolve multiple inheritance
-- QString -> char[]
-- QList -> []
-- everything else...
\ No newline at end of file
+- implement functionality from QList, QString and QStringList
+- resolve multiple inheritance, commented for now
+- fix segfaults due to not initialized variables
+- ...
\ No newline at end of file
--- a/demos/browser/bookmarks.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/bookmarks.d	Sun May 24 13:46:32 2009 +0000
@@ -70,8 +70,8 @@
 import xbel;
 
 
-const char[] BOOKMARKBAR = "Bookmarks Bar";
-const char[] BOOKMARKMENU = "Bookmarks Menu";
+const string BOOKMARKBAR = "Bookmarks Bar";
+const string BOOKMARKMENU = "Bookmarks Menu";
 
 
 /*!
@@ -123,7 +123,7 @@
 		m_commands.push(command);
 	}
 
-	void setTitle(BookmarkNode node, QString newTitle)
+	void setTitle(BookmarkNode node, string newTitle)
 	{
 		if (!m_loaded)
 			return;
@@ -133,7 +133,7 @@
 		m_commands.push(command);
 	}
 
-	void setUrl(BookmarkNode node, QString newUrl)
+	void setUrl(BookmarkNode node, string newUrl)
 	{
 		if (!m_loaded)
 			return;
@@ -161,7 +161,7 @@
 			load();
 
 		for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
-			BookmarkNode node = m_bookmarkRootNode.children().at(i);
+			BookmarkNode node = m_bookmarkRootNode.children()[i];
 			if (node.title == tr(BOOKMARKMENU))
 				return node;
 		}
@@ -175,7 +175,7 @@
 			load();
 
 		for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
-			BookmarkNode node = m_bookmarkRootNode.children().at(i);
+			BookmarkNode node = m_bookmarkRootNode.children()[i];
 			if (node.title == tr(BOOKMARKBAR))
 				return node;
 		}
@@ -196,7 +196,7 @@
 
 	void importBookmarks()
 	{
-		QString fileName = QFileDialog.getOpenFileName(0, tr("Open File"), QString(), tr("XBEL (*.xbel *.xml)"));
+		string fileName = QFileDialog.getOpenFileName(0, tr("Open File"), null, tr("XBEL (*.xbel *.xml)"));
 		if (fileName.isEmpty())
 			return;
 
@@ -216,7 +216,7 @@
 
 	void exportBookmarks()
 	{
-		QString fileName = QFileDialog.getSaveFileName(0, tr("Save File"),
+		string fileName = QFileDialog.getSaveFileName(0, tr("Save File"),
 				tr("%1 Bookmarks.xbel").arg(QCoreApplication.applicationName()),
 				tr("XBEL (*.xbel *.xml)"));
 		if (fileName.isEmpty())
@@ -235,8 +235,8 @@
 			return;
 
 		XbelWriter writer;
-		QString dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
-		QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
+		string dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
+		string bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
 		if (!writer.write(bookmarkFile, m_bookmarkRootNode))
 			qWarning() << "BookmarkManager: error saving to" << bookmarkFile;
 	}
@@ -249,8 +249,8 @@
 			return;
 		m_loaded = true;
 
-		QString dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
-		QString bookmarkFile = dir + QLatin1String("/bookmarks.xbel");
+		string dir = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
+		string bookmarkFile = dir ~ QLatin1String("/bookmarks.xbel");
 		if (!QFile.exists(bookmarkFile))
 			bookmarkFile = QLatin1String(":defaultbookmarks.xbel");
 
@@ -266,7 +266,7 @@
 		BookmarkNode menu = null;
 		BookmarkNode[] others;
 		for (int i = m_bookmarkRootNode.children().count() - 1; i >= 0; --i) {
-			BookmarkNode node = m_bookmarkRootNode.children().at(i);
+			BookmarkNode node = m_bookmarkRootNode.children()[i];
 			if (node.type() == BookmarkNode.Folder) {
 				// Automatically convert
 				if (node.title == tr("Toolbar Bookmarks") && !toolbar) {
@@ -284,7 +284,7 @@
 					menu = node;
 				}
 			} else {
-				others.append(node);
+				others ~= node;
 			}
 			m_bookmarkRootNode.remove(node);
 		}
@@ -303,8 +303,8 @@
 			m_bookmarkRootNode.add(menu);
 		}
 
-		for (int i = 0; i < others.count(); ++i)
-			menu.add(others.at(i));
+		for (int i = 0; i < others.length; ++i)
+			menu.add(others[i]);
 	}
 
 	bool m_loaded;
@@ -377,7 +377,7 @@
 {
 public:
 
-	this(BookmarksManager m_bookmarkManagaer, BookmarkNode node, QString newValue, bool title)
+	this(BookmarksManager m_bookmarkManagaer, BookmarkNode node, string newValue, bool title)
 	{
 		super();
 		m_bookmarkManagaer = m_bookmarkManagaer;
@@ -415,8 +415,8 @@
 	
 	BookmarksManager m_bookmarkManagaer;
 	bool m_title;
-	QString m_oldValue;
-	QString m_newValue;
+	string m_oldValue;
+	string m_newValue;
 	BookmarkNode m_node;
 }
 
@@ -494,7 +494,7 @@
 	QVariant data(QModelIndex index, int role = Qt.DisplayRole)
 	{
 		if (!index.isValid() || index.model() != this)
-		return QVariant();
+			return QVariant();
 
 		BookmarkNode bookmarkNode = node(index);
 		switch (role) {
@@ -559,7 +559,7 @@
 
 		// get the parent node
 		BookmarkNode parentNode = node(parent);
-		return createIndex(row, column, parentNode.children().at(row));
+		return createIndex(row, column, parentNode.children()[row]);
 	}
 
 	QModelIndex parent(QModelIndex index = QModelIndex())
@@ -610,7 +610,7 @@
 
 		BookmarkNode bookmarkNode = node(parent);
 		for (int i = row + count - 1; i >= row; --i) {
-			BookmarkNode node = bookmarkNode.children().at(i);
+			BookmarkNode node = bookmarkNode.children()[i];
 			if (node == m_bookmarksManager.menu() || node == m_bookmarksManager.toolbar())
 				continue;
 
@@ -676,13 +676,11 @@
 		return mimeData;
 	}
 
-	const char[] MIMETYPE = QLatin1String("application/bookmarks.xbel");
+	const string MIMETYPE = QLatin1String("application/bookmarks.xbel");
 
-	QStringList mimeTypes()
+	string[] mimeTypes()
 	{
-		QStringList types;
-		types << MIMETYPE;
-		return types;
+		return [ MIMETYPE ];
 	}
 
 	bool dropMimeData(QMimeData data,  Qt.DropAction action, int row, int column, QModelIndex parent)
@@ -711,7 +709,7 @@
 			BookmarkNode rootNode = reader.read(&buffer);
 			BookmarkNode[] children = rootNode.children();
 			for (int i = 0; i < children.count(); ++i) {
-				BookmarkNode bookmarkNode = children.at(i);
+				BookmarkNode bookmarkNode = children[i];
 				rootNode.remove(bookmarkNode);
 				row = qMax(0, row);
 				BookmarkNode parentNode = node(parent);
@@ -776,7 +774,7 @@
 	{
 		m_initialActions = actions;
 		for (int i = 0; i < m_initialActions.count(); ++i)
-			addAction(m_initialActions.at(i));
+			addAction(m_initialActions[i]);
 	}
 
 protected:
@@ -788,7 +786,7 @@
 		setRootIndex(m_bookmarksManager.bookmarksModel().index(1, 0));
 		// initial actions
 		for (int i = 0; i < m_initialActions.count(); ++i)
-			addAction(m_initialActions.at(i));
+			addAction(m_initialActions[i]);
 		if (!m_initialActions.isEmpty())
 			addSeparator();
 		createMenu(model().index(0, 0), 1, this);
@@ -847,7 +845,7 @@
 {
 public:
 
-	this(QString url, QString title, QWidget parent = null, BookmarksManager bookmarkManager = null)
+	this(string url, string title, QWidget parent = null, BookmarksManager bookmarkManager = null)
 	//: QDialog(parent)
 	{
 		m_url = url;
@@ -896,7 +894,7 @@
 
 private:
 
-	QString m_url;
+	string m_url;
 	BookmarksManager m_bookmarksManager;
 	AddBookmarkProxyModel m_proxyModel;
 }
@@ -953,7 +951,7 @@
 
 	void customContextMenuRequested(QPoint pos)
 	{
-		QMenu menu;
+		auto menu = new QMenu;
 		QModelIndex index = tree.indexAt(pos);
 		index = index.sibling(index.row(), 0);
 		if (index.isValid() && !tree.model().hasChildren(index)) {
@@ -1063,7 +1061,7 @@
 
 	void dragEnterEvent(QDragEnterEvent event)
 	{
-		const QMimeData mimeData = event.mimeData();
+		QMimeData mimeData = event.mimeData();
 		if (mimeData.hasUrls())
 			event.acceptProposedAction();
 		QToolBar.dragEnterEvent(event);
@@ -1071,18 +1069,18 @@
 
 	void dropEvent(QDropEvent event)
 	{
-		const QMimeData mimeData = event.mimeData();
+		QMimeData mimeData = event.mimeData();
 		if (mimeData.hasUrls() && mimeData.hasText()) {
 			QUrl[] urls = mimeData.urls();
 			QAction action = actionAt(event.pos());
-			QString dropText;
+			string dropText;
 			if (action)
 				dropText = action.text();
 			int row = -1;
 			QModelIndex parentIndex = m_root;
 			for (int i = 0; i < m_bookmarksModel.rowCount(m_root); ++i) {
 				QModelIndex idx = m_bookmarksModel.index(i, 0, m_root);
-				QString title = idx.data().toString();
+				string title = idx.data().toString();
 				if (title == dropText) {
 					row = i;
 					if (m_bookmarksModel.hasChildren(idx)) {
@@ -1093,7 +1091,7 @@
 				}
 			}
 			BookmarkNode bookmark = new BookmarkNode(BookmarkNode.Bookmark);
-			bookmark.url = urls.at(0).toString();
+			bookmark.url = urls[0].toString();
 			bookmark.title = mimeData.text();
 
 			BookmarkNode parent = m_bookmarksModel.node(parentIndex);
--- a/demos/browser/browserapplication.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/browserapplication.d	Sun May 24 13:46:32 2009 +0000
@@ -80,10 +80,10 @@
 {
 public:
 
-	this(char[] args)
+	this(string[] args)
 	{
 		super(args);
-		m_localServer = 0;
+		m_localServer = null;
 		QCoreApplication.setOrganizationName(QLatin1String("Trolltech"));
 		QCoreApplication.setApplicationName(QLatin1String("demobrowser"));
 		QCoreApplication.setApplicationVersion(QLatin1String("0.1"));
@@ -92,19 +92,19 @@
 			// Use a different server name for QWS so we can run an X11
 			// browser and a QWS browser in parallel on the same machine for
 			// debugging
-			QString serverName = QCoreApplication.applicationName() + QLatin1String("_qws");
+			string serverName = QCoreApplication.applicationName() + QLatin1String("_qws");
 		} else {
-			QString serverName = QCoreApplication.applicationName();
+			string serverName = QCoreApplication.applicationName();
 		}
-		QLocalSocket socket;
+		auto socket = new QLocalSocket;
 		socket.connectToServer(serverName);
 		if (socket.waitForConnected(500)) {
 			auto stream = new QTextStream(&socket);
-			QStringList args = QCoreApplication.arguments();
+			string[] args = QCoreApplication.arguments();
 			if (args.count() > 1)
 				stream << args.last();
 			else
-				stream << QString();
+				stream << "";
 			stream.flush();
 			socket.waitForBytesWritten();
 			return;
@@ -134,7 +134,7 @@
 		}
 
 		QDesktopServices.setUrlHandler(QLatin1String("http"), this, "openUrl");
-		QString localSysName = QLocale.system().name();
+		string localSysName = QLocale.system().name();
 
 		installTranslator(QLatin1String("qt_") + localSysName);
 
@@ -153,8 +153,8 @@
 	~this()
 	{
 		delete s_downloadManager;
-		for (int i = 0; i < m_mainWindows.size(); ++i) {
-			BrowserMainWindow window = m_mainWindows.at(i);
+		for (int i = 0; i < m_mainWindows.length; ++i) {
+			BrowserMainWindow window = m_mainWindows[i];
 			delete window;
 		}
 		delete s_networkAccessManager;
@@ -172,14 +172,14 @@
 		settings.beginGroup(QLatin1String("websettings"));
 
 		QWebSettings defaultSettings = QWebSettings.globalSettings();
-		QString standardFontFamily = defaultSettings.fontFamily(QWebSettings.StandardFont);
+		string standardFontFamily = defaultSettings.fontFamily(QWebSettings.StandardFont);
 		int standardFontSize = defaultSettings.fontSize(QWebSettings.DefaultFontSize);
 		QFont standardFont = QFont(standardFontFamily, standardFontSize);
 		standardFont = qVariantValue!(QFont)(settings.value(QLatin1String("standardFont"), standardFont));
 		defaultSettings.setFontFamily(QWebSettings.StandardFont, standardFont.family());
 		defaultSettings.setFontSize(QWebSettings.DefaultFontSize, standardFont.pointSize());
 
-		QString fixedFontFamily = defaultSettings.fontFamily(QWebSettings.FixedFont);
+		string fixedFontFamily = defaultSettings.fontFamily(QWebSettings.FixedFont);
 		int fixedFontSize = defaultSettings.fontSize(QWebSettings.DefaultFixedFontSize);
 		QFont fixedFont = QFont(fixedFontFamily, fixedFontSize);
 		fixedFont = qVariantValue!(QFont)(settings.value(QLatin1String("fixedFont"), fixedFont));
@@ -197,7 +197,7 @@
 
 	bool isTheOnlyBrowser()
 	{
-		return (m_localServer != 0);
+		return (m_localServer != null);
 	}
 
 	BrowserMainWindow mainWindow()
@@ -212,8 +212,8 @@
 	{
 		clean();
 		BrowserMainWindow[] list;
-		for (int i = 0; i < m_mainWindows.count(); ++i)
-			list ~= m_mainWindows.at(i);
+		for (int i = 0; i < m_mainWindows.length; ++i)
+			list ~= m_mainWindows[i];
 		return list;
 	}
 
@@ -243,9 +243,9 @@
 		auto stream = new QDataStream(&buffer);
 		buffer.open(QIODevice.ReadWrite);
 
-		stream << m_mainWindows.count();
-		for (int i = 0; i < m_mainWindows.count(); ++i)
-			stream << m_mainWindows.at(i).saveState();
+		stream << m_mainWindows.length;
+		for (int i = 0; i < m_mainWindows.length; ++i)
+			stream << m_mainWindows[i].saveState();
 		settings.setValue(QLatin1String("lastSession"), data);
 		settings.endGroup();
 	}
@@ -354,7 +354,7 @@
 			} else {
 				newWindow = newMainWindow();
 			}
-			newWindow.restoreState(windows.at(i));
+			newWindow.restoreState(windows[i]);
 		}
 	}
 
@@ -367,12 +367,12 @@
 	{
 		clean();
 		int tabCount = 0;
-		for (int i = 0; i < m_mainWindows.count(); ++i) {
-			tabCount =+ m_mainWindows.at(i).tabWidget().count();
+		for (int i = 0; i < m_mainWindows.length; ++i) {
+			tabCount =+ m_mainWindows[i].tabWidget().count();
 		}
 
 		if (tabCount > 1) {
-			int ret = QMessageBox.warning(mainWindow(), QString(),
+			int ret = QMessageBox.warning(mainWindow(), null,
 			tr("There are %1 windows and %2 tabs open\n"
 				"Do you want to quit anyway?").arg(m_mainWindows.count()).arg(tabCount),
 			QMessageBox.Yes | QMessageBox.No,
@@ -401,7 +401,7 @@
 	*/
 	void postLaunch()
 	{
-		QString directory = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
+		string directory = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
 		if (directory.isEmpty())
 			directory = QDir.homePath() ~ QLatin1String("/.") ~ QCoreApplication.applicationName();
 		QWebSettings.setIconDatabasePath(directory);
@@ -412,7 +412,7 @@
 
 		// newMainWindow() needs to be called in main() for this to happen
 		if (m_mainWindows.count() > 0) {
-			QStringList args = QCoreApplication.arguments();
+			string[] args = QCoreApplication.arguments();
 			if (args.count() > 1)
 				mainWindow().loadPage(args.last());
 			else
@@ -433,7 +433,7 @@
 			return;
 		socket.waitForReadyRead(1000);
 		QTextStream stream(socket);
-		QString url;
+		string url;
 		stream >> url;
 		if (!url.isEmpty()) {
 			QSettings settings;
@@ -456,12 +456,12 @@
 	void clean()
 	{
 		// cleanup any deleted main windows first
-		for (int i = m_mainWindows.count() - 1; i >= 0; --i)
-			if (m_mainWindows.at(i).isNull())
+		for (int i = m_mainWindows.length - 1; i >= 0; --i)
+			if (m_mainWindows[i].isNull())
 				m_mainWindows.removeAt(i);
 	}
 
-	void installTranslator(QString name)
+	void installTranslator(string name)
 	{
 		QTranslator translator = new QTranslator(this);
 		translator.load(name, QLibraryInfo.location(QLibraryInfo.TranslationsPath));
--- a/demos/browser/browsermainwindow.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/browsermainwindow.d	Sun May 24 13:46:32 2009 +0000
@@ -83,7 +83,7 @@
 class BrowserMainWindow : public QMainWindow
 {
 	
-static const qint32 BrowserMainWindowMagic = 0xba;
+static const int BrowserMainWindowMagic = 0xba;
 
 public:
 
@@ -165,9 +165,9 @@
 
 public:
 
-	static QUrl guessUrlFromString(QString string)
+	static QUrl guessUrlFromString(string string)
 	{
-		QString urlStr = string.trimmed();
+		string urlStr = string.trimmed();
 		auto test = new QRegExp(QLatin1String("^[a-zA-Z]+\\:.*"));
 
 		// Check if it looks like a qualified URL. Try parsing it and see.
@@ -188,7 +188,7 @@
 		if (!hasSchema) {
 			int dotIndex = urlStr.indexOf(QLatin1Char('.'));
 			if (dotIndex != -1) {
-				QString prefix = urlStr.left(dotIndex).toLower();
+				string prefix = urlStr.left(dotIndex).toLower();
 				QByteArray schema = (prefix == QLatin1String("ftp")) ? prefix.toLatin1() : "http";
 				QUrl url =
 				QUrl.fromEncoded(schema + "://" + urlStr.toUtf8(), QUrl.TolerantMode);
@@ -222,8 +222,8 @@
 		QByteArray data;
 		auto stream = new QDataStream(&data, QIODevice.WriteOnly);
 
-		stream << qint32(BrowserMainWindowMagic);
-		stream << qint32(version_);
+		stream << cast(int) BrowserMainWindowMagic;
+		stream << cast(int) version_;
 
 		stream << size();
 		stream << !m_navigationBar.isHidden();
@@ -232,7 +232,7 @@
 		if (withTabs)
 			stream << tabWidget().saveState();
 		else
-			stream << QByteArray();
+			stream << new QByteArray();
 		return data;
 	}
 
@@ -245,8 +245,8 @@
 		if (stream.atEnd())
 			return false;
 
-		qint32 marker;
-		qint32 v;
+		int marker;
+		int v;
 		stream >> marker;
 		stream >> v;
 		if (marker != BrowserMainWindowMagic || v != version_)
@@ -283,7 +283,7 @@
 
 public:
 
-	void loadPage(QString page)
+	void loadPage(string page)
 	{
 		QUrl url = guessUrlFromString(page);
 		loadUrl(url);
@@ -293,7 +293,7 @@
 	{
 		QSettings settings;
 		settings.beginGroup(QLatin1String("MainWindow"));
-		QString home = settings.value(QLatin1String("home"), QLatin1String("http://qtsoftware.com/")).toString();
+		string home = settings.value(QLatin1String("home"), QLatin1String("http://qtsoftware.com/")).toString();
 		loadPage(home);
 	}
 
@@ -302,7 +302,7 @@
 	void closeEvent(QCloseEvent event)
 	{
 		if (m_tabWidget.count() > 1) {
-			int ret = QMessageBox.warning(this, QString(),
+			int ret = QMessageBox.warning(this, null,
 				   tr("Are you sure you want to close the window?"
 				      "  There are %1 tab open").arg(m_tabWidget.count()),
 				   QMessageBox.Yes | QMessageBox.No,
@@ -348,12 +348,12 @@
 		}
 	}
 
-	void slotUpdateStatusbar(QString string)
+	void slotUpdateStatusbar(string string)
 	{
 		statusBar().showMessage(string, 2000);
 	}
 
-	void slotUpdateWindowTitle(QString title = QString())
+	void slotUpdateWindowTitle(string title = null)
 	{
 		if (title.isEmpty()) {
 			setWindowTitle(tr("Qt Demo Browser"));
@@ -391,7 +391,7 @@
 
 	void slotFileOpen()
 	{
-		QString file = QFileDialog.getOpenFileName(this, tr("Open Web Resource"), QString(),
+		string file = QFileDialog.getOpenFileName(this, tr("Open Web Resource"), null,
 		tr("Web Resources (*.html *.htm *.svg *.png *.gif *.svgz);;All files (*.*)"));
 
 		if (file.isEmpty())
@@ -424,8 +424,8 @@
 		QWebSettings settings = QWebSettings.globalSettings();
 		bool pb = settings.testAttribute(QWebSettings.PrivateBrowsingEnabled);
 		if (!pb) {
-			QString title = tr("Are you sure you want to turn on private browsing?");
-			QString text = tr("<b>%1</b><br><br>When private browsing in turned on,"
+			string title = tr("Are you sure you want to turn on private browsing?");
+			string text = tr("<b>%1</b><br><br>When private browsing in turned on,"
 			" webpages are not added to the history,"
 			" items are automatically removed from the Downloads window,"
 			" new cookies are not stored, current cookies can't be accessed,"
@@ -434,7 +434,7 @@
 			"  Until you close the window, you can still click the Back and Forward buttons"
 			" to return to the webpages you have opened.").arg(title);
 
-			QMessageBox.StandardButton button = QMessageBox.question(this, QString(), text,
+			QMessageBox.StandardButton button = QMessageBox.question(this, null, text,
 			       QMessageBox.Ok | QMessageBox.Cancel,
 			       QMessageBox.Ok);
 			if (button == QMessageBox.Ok) {
@@ -444,8 +444,8 @@
 			settings.setAttribute(QWebSettings.PrivateBrowsingEnabled, false);
 
 			BrowserMainWindow[] windows = BrowserApplication.instance().mainWindows();
-			for (int i = 0; i < windows.count(); ++i) {
-				BrowserMainWindow window = windows.at(i);
+			for (int i = 0; i < windows.length; ++i) {
+				BrowserMainWindow window = windows[i];
 				window.m_lastSearch = null; //QString::null
 				window.tabWidget().clear();
 			}
@@ -462,7 +462,7 @@
 		if (!currentTab())
 			return;
 		bool ok;
-		QString search = QInputDialog.getText(this, tr("Find"), tr("Text:"), QLineEdit.Normal, m_lastSearch, &ok);
+		string search = QInputDialog.getText(this, tr("Find"), tr("Text:"), QLineEdit.Normal, m_lastSearch, &ok);
 		if (ok && !search.isEmpty()) {
 			m_lastSearch = search;
 			if (!currentTab().findText(m_lastSearch))
@@ -494,8 +494,8 @@
 	void slotAddBookmark()
 	{
 		WebView webView = currentTab();
-		QString url = webView.url().toString();
-		QString title = webView.title();
+		string url = webView.url().toString();
+		string title = webView.title();
 		AddBookmarkDialog dialog(url, title);
 		dialog.exec();
 	}
@@ -570,7 +570,7 @@
 		if (!currentTab())
 			return;
 
-		QString markup = currentTab().page().mainFrame().toHtml();
+		string markup = currentTab().page().mainFrame().toHtml();
 		QPlainTextEdit view = new QPlainTextEdit(markup);
 		view.setWindowTitle(tr("Page Source of %1").arg(currentTab().title()));
 		view.setMinimumWidth(640);
@@ -642,7 +642,7 @@
 		QWebHistory history = currentTab().history();
 		int historyCount = history.count();
 		for (int i = history.backItems(historyCount).count() - 1; i >= 0; --i) {
-			QWebHistoryItem item = history.backItems(history.count()).at(i);
+			QWebHistoryItem item = history.backItems(history.count())[i];
 			QAction action = new QAction(this);
 			action.setData(-1*(historyCount-i-1));
 			QIcon icon = BrowserApplication.instance().icon(item.url());
@@ -660,7 +660,7 @@
 		QWebHistory history = currentTab().history();
 		int historyCount = history.count();
 		for (int i = 0; i < history.forwardItems(history.count()).count(); ++i) {
-			QWebHistoryItem item = history.forwardItems(historyCount).at(i);
+			QWebHistoryItem item = history.forwardItems(historyCount)[i];
 			QAction action = new QAction(this);
 			action.setData(historyCount-i);
 			QIcon icon = BrowserApplication.instance().icon(item.url());
@@ -680,8 +680,8 @@
 
 		m_windowMenu.addSeparator();
 		BrowserMainWindow[] windows = BrowserApplication.instance().mainWindows();
-		for (int i = 0; i < windows.count(); ++i) {
-			BrowserMainWindow window = windows.at(i);
+		for (int i = 0; i < windows.length; ++i) {
+			BrowserMainWindow window = windows[i];
 			QAction action = m_windowMenu.addAction(window.windowTitle(), this, SLOT(slotShowWindow()));
 			action.setData(i);
 			action.setCheckable(true);
@@ -702,13 +702,13 @@
 
 	void slotShowWindow()
 	{
-		if (QAction action = cast(QAction) sender()) {
+		if (QAction action = cast(QAction) signalSender()) {
 			QVariant v = action.data();
 			if (v.canConvert!(int)()) {
 				int offset = cast(int) v;
 				BrowserMainWindow[] windows = BrowserApplication.instance().mainWindows();
-				windows.at(offset).activateWindow();
-				windows.at(offset).currentTab().setFocus();
+				windows[offset].activateWindow();
+				windows[offset].currentTab().setFocus();
 			}
 		}
 	}
@@ -1016,5 +1016,5 @@
 	QIcon m_reloadIcon;
 	QIcon m_stopIcon;
 
-	QString m_lastSearch;
+	string m_lastSearch;
 }
--- a/demos/browser/chasewidget.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/chasewidget.d	Sun May 24 13:46:32 2009 +0000
@@ -101,7 +101,6 @@
 
 	void paintEvent(QPaintEvent event)
 	{
-		//Q_UNUSED(event);
 		auto p = new QPainter(this);
 		if (m_pixmapEnabled && !m_pixmap.isNull()) {
 			p.drawPixmap(0, 0, m_pixmap);
--- a/demos/browser/cookiejar.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/cookiejar.d	Sun May 24 13:46:32 2009 +0000
@@ -44,7 +44,6 @@
 import qt.core.QDebug;
 
 import qt.core.QAbstractItemModel;
-import qt.core.QStringList;
 import qt.core.QDateTime;
 import qt.core.QDir;
 import qt.core.QFile;
@@ -73,35 +72,35 @@
 QDataStream operator<<(QDataStream stream, QNetworkCookie[] list)
 {
 	stream << JAR_VERSION;
-	stream << quint32(list.size());
-	for (int i = 0; i < list.size(); ++i)
-		stream << list.at(i).toRawForm();
+	stream << cast(uint) list.length;
+	for (int i = 0; i < list.length; ++i)
+		stream << list[i].toRawForm();
 	return stream;
 }
 
-QDataStream operator>>(QDataStream stream, QNetworkCookie[] list)
+QDataStream operator>>(QDataStream stream, ref QNetworkCookie[] list)
 {
 	list.clear();
 
-	quint32 version_;
+	uint version_;
 	stream >> version_;
 
 	if (version != JAR_VERSION)
 		return stream;
 
-	quint32 count;
+	uint count;
 	stream >> count;
-	for(quint32 i = 0; i < count; ++i)
+	for(uint i = 0; i < count; ++i)
 	{
 		QByteArray value;
 		stream >> value;
 		QNetworkCookie[] newCookies = QNetworkCookie.parseCookies(value);
-		if (newCookies.count() == 0 && value.length() != 0) {
+		if (newCookies.length == 0 && value.length() != 0) {
 			qWarning() << "CookieJar: Unable to parse saved cookie:" << value;
 		}
 		
-		for (int j = 0; j < newCookies.count(); ++j)
-			list.append(newCookies.at(j));
+		for (int j = 0; j < newCookies.length; ++j)
+			list ~= newCookies[j];
 		
 		if (stream.atEnd())
 			break;
@@ -144,7 +143,7 @@
 
 	QNetworkCookie[] cookiesForUrl(QUrl url)
 	{
-		CookieJar that = const_cast<CookieJar>(this);
+		CookieJar that = cast(CookieJar) this;
 		if (!m_loaded)
 			that.load();
 
@@ -166,7 +165,7 @@
 		if (globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled))
 			return false;
 
-		QString host = url.host();
+		string host = url.host();
 		bool eBlock = qBinaryFind(m_exceptions_block.begin(), m_exceptions_block.end(), host) != m_exceptions_block.end();
 		bool eAllow = qBinaryFind(m_exceptions_allow.begin(), m_exceptions_allow.end(), host) != m_exceptions_allow.end();
 		bool eAllowSession = qBinaryFind(m_exceptions_allowForSession.begin(), m_exceptions_allowForSession.end(), host) != m_exceptions_allowForSession.end();
@@ -178,7 +177,7 @@
 			// pass url domain == cookie domain
 			QDateTime soon = QDateTime.currentDateTime();
 			soon = soon.addDays(90);
-			foreach(QNetworkCookie cookie, cookieList) {
+			foreach(QNetworkCookie cookie; cookieList) {
 				QNetworkCookie[] lst;
 				if (m_keepCookies == KeepUntilTimeLimit && !cookie.isSessionCookie() && cookie.expirationDate() > soon) {
 					cookie.setExpirationDate(soon);
@@ -204,7 +203,7 @@
 
 		if (addedCookies) {
 			m_saveTimer.changeOccurred();
-			emit cookiesChanged();
+			cookiesChanged.emit();
 		}
 		return addedCookies;
 	}
@@ -212,7 +211,7 @@
 	AcceptPolicy acceptPolicy()
 	{
 		if (!m_loaded)
-			(const_cast<CookieJar>(this)).load();
+			(cast(CookieJar) this).load();
 		return m_acceptCookies;
 	}
     
@@ -229,7 +228,7 @@
 	KeepPolicy keepPolicy()
 	{
 		if (!m_loaded)
-			(const_cast<CookieJar>(this)).load();
+			(cast(CookieJar) this).load();
 		return m_keepCookies;
 	}
 
@@ -244,28 +243,28 @@
 	}
 
 
-	QStringList blockedCookies()
+	string[] blockedCookies()
 	{
 		if (!m_loaded)
-			(const_cast<CookieJar>(this)).load();
+			(cast(CookieJar) this).load();
 		return m_exceptions_block;
 	}
 
-	QStringList allowedCookies()
+	string[] allowedCookies()
 	{
 		if (!m_loaded)
-			(const_cast<CookieJar>(this)).load();
+			(cast(CookieJar) this).load();
 		return m_exceptions_allow;
 	}
     
-	QStringList allowForSessionCookies()
+	string[] allowForSessionCookies()
 	{
 		if (!m_loaded)
-			(const_cast<CookieJar>(this)).load();
+			(cast(CookieJar) this).load();
 		return m_exceptions_allowForSession;
 	}
 
-	void setBlockedCookies(QStringList list)
+	void setBlockedCookies(string[] list)
 	{
 		if (!m_loaded)
 			load();
@@ -274,7 +273,7 @@
 		m_saveTimer.changeOccurred();
 	}
     
-	void setAllowedCookies(QStringList list)
+	void setAllowedCookies(string[] list)
 	{
 		if (!m_loaded)
 			load();
@@ -283,7 +282,7 @@
 		m_saveTimer.changeOccurred();
 	}
     
-	void setAllowForSessionCookies(QStringList list)
+	void setAllowForSessionCookies(string[] list)
 	{
 		if (!m_loaded)
 			load();
@@ -298,7 +297,7 @@
 	{
 		setAllCookies(QNetworkCookie[]());
 		m_saveTimer.changeOccurred();
-		emit cookiesChanged();
+		cookiesChanged.emit();
 	}
 
 	void loadSettings()
@@ -310,38 +309,39 @@
 		QMetaEnum acceptPolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("AcceptPolicy"));
 		m_acceptCookies = acceptPolicyEnum.keyToValue(value) == -1 ?
 				AcceptOnlyFromSitesNavigatedTo :
-				static_cast<AcceptPolicy>(acceptPolicyEnum.keyToValue(value));
+				cast(AcceptPolicy) acceptPolicyEnum.keyToValue(value);
 
 		value = settings.value(QLatin1String("keepCookiesUntil"), QLatin1String("KeepUntilExpire")).toByteArray();
 		QMetaEnum keepPolicyEnum = staticMetaObject.enumerator(staticMetaObject.indexOfEnumerator("KeepPolicy"));
 		m_keepCookies = keepPolicyEnum.keyToValue(value) == -1 ?
 				KeepUntilExpire :
-				static_cast<KeepPolicy>(keepPolicyEnum.keyToValue(value));
+				cast(KeepPolicy) keepPolicyEnum.keyToValue(value);
 
 		if (m_keepCookies == KeepUntilExit)
-		setAllCookies(QNetworkCookie[]());
+		setAllCookies(null);
 
 		m_loaded = true;
-		emit cookiesChanged();
+		cookiesChanged.emit();
 	}
 
 private:
+
 	void save()
 	{
 		if (!m_loaded)
 			return;
 		purgeOldCookies();
-		QString directory = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
+		string directory = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
 		if (directory.isEmpty())
 			directory = QDir.homePath() + QLatin1String("/.") + QCoreApplication.applicationName();
 		if (!QFile.exists(directory)) {
 			QDir dir;
 			dir.mkpath(directory);
 		}
-		QSettings cookieSettings(directory + QLatin1String("/cookies.ini"), QSettings.IniFormat);
+		auto cookieSettings = new QSettings(directory + QLatin1String("/cookies.ini"), QSettings.IniFormat);
 		QNetworkCookie[] cookies = allCookies();
 		for (int i = cookies.count() - 1; i >= 0; --i) {
-			if (cookies.at(i).isSessionCookie())
+			if (cookies[i].isSessionCookie())
 			cookies.removeAt(i);
 		}
 		cookieSettings.setValue(QLatin1String("cookies"), qVariantFromValue<QNetworkCookie[] >(cookies));
@@ -369,14 +369,14 @@
 			return;
 		int oldCount = cookies.count();
 		QDateTime now = QDateTime.currentDateTime();
-		for (int i = cookies.count() - 1; i >= 0; --i) {
-			if (!cookies.at(i).isSessionCookie() && cookies.at(i).expirationDate() < now)
+		for (int i = cookies.length - 1; i >= 0; --i) {
+			if (!cookies[i].isSessionCookie() && cookies[i].expirationDate() < now)
 				cookies.removeAt(i);
 		}
-		if (oldCount == cookies.count())
+		if (oldCount == cookies.length)
 			return;
 		setAllCookies(cookies);
-		emit cookiesChanged();
+		cookiesChanged.emit();
 	}
 
 	void load()
@@ -384,9 +384,9 @@
 		if (m_loaded)
 			return;
 		// load cookies and exceptions
-		qRegisterMetaTypeStreamOperators<QNetworkCookie[] >("QNetworkCookie[]");
+		qRegisterMetaTypeStreamOperators!(QNetworkCookie[])("QNetworkCookie[]");
 		auto cookieSettings = new QSettings(QDesktopServices.storageLocation(QDesktopServices.DataLocation) + QLatin1String("/cookies.ini"), QSettings.IniFormat);
-		setAllCookies(qvariant_cast<QNetworkCookie[] >(cookieSettings.value(QLatin1String("cookies"))));
+		setAllCookies(cast(QNetworkCookie[]) (cookieSettings.value(QLatin1String("cookies"))));
 		cookieSettings.beginGroup(QLatin1String("Exceptions"));
 		m_exceptions_block = cookieSettings.value(QLatin1String("block")).toStringList();
 		m_exceptions_allow = cookieSettings.value(QLatin1String("allow")).toStringList();
@@ -404,9 +404,9 @@
 	AcceptPolicy m_acceptCookies;
 	KeepPolicy m_keepCookies;
 
-	QStringList m_exceptions_block;
-	QStringList m_exceptions_allow;
-	QStringList m_exceptions_allowForSession;
+	string[] m_exceptions_block;
+	string[] m_exceptions_allow;
+	string[] m_exceptions_allowForSession;
 }
 
 class CookieModel : public QAbstractTableModel
@@ -425,9 +425,9 @@
 	QVariant headerData(int section, Qt.Orientation orientation, int role)
 	{
 		if (role == Qt.SizeHintRole) {
-			QFont font;
+			auto font = new QFont;
 			font.setPointSize(10);
-			QFontMetrics fm(font);
+			auto fm = new QFontMetrics(font);
 			int height = fm.height() + fm.height()/3;
 			int width = fm.width(headerData(section, orientation, Qt.DisplayRole).toString());
 			return QSize(width, height);
@@ -451,7 +451,7 @@
 				case 5:
 					return tr("Contents");
 				default:
-					return QVariant();
+					return new QVariant();
 			}
 		}
 		return QAbstractTableModel.headerData(section, orientation, role);
@@ -464,13 +464,13 @@
 		if (m_cookieJar)
 			lst = m_cookieJar.allCookies();
 		
-		if (index.row() < 0 || index.row() >= lst.size())
-			return QVariant();
+		if (index.row() < 0 || index.row() >= lst.length)
+			return new QVariant();
 
 		switch (role) {
 			case Qt.DisplayRole:
 			case Qt.EditRole: {
-			QNetworkCookie cookie = lst.at(index.row());
+			QNetworkCookie cookie = lst[index.row];
 				switch (index.column()) {
 				    case 0:
 					return cookie.domain();
@@ -487,7 +487,7 @@
 				}
 			}
 			case Qt.FontRole:{
-				QFont font;
+				auto font = new QFont;
 				font.setPointSize(10);
 				return font;
 			}
@@ -522,7 +522,7 @@
 		return true;
 	}
 
-private slots:
+private:
 	
 	void cookiesChanged()
 	{
@@ -530,6 +530,7 @@
 	}
 
 private:
+
 	CookieJar m_cookieJar;
 }
 
@@ -542,7 +543,8 @@
 {
 public:
 
-	this(CookieJar cookieJar, QWidget parent = this) : QDialog(parent)
+	this(CookieJar cookieJar, QWidget parent = this)
+	//: QDialog(parent)
 	{
 		setupUi(this);
 		setWindowFlags(Qt.Sheet);
@@ -606,9 +608,9 @@
 	QVariant headerData(int section, Qt.Orientation orientation, int role)
 	{
 		if (role == Qt.SizeHintRole) {
-			QFont font;
+			auto font = new QFont;
 			font.setPointSize(10);
-			QFontMetrics fm(font);
+			auto fm =new QFontMetrics(font);
 			int height = fm.height() + fm.height()/3;
 			int width = fm.width(headerData(section, orientation, Qt.DisplayRole).toString());
 			return QSize(width, height);
@@ -634,35 +636,35 @@
 			case Qt.DisplayRole:
 			case Qt.EditRole: {
 				int row = index.row();
-				if (row < m_allowedCookies.count()) {
+				if (row < m_allowedCookies.length) {
 					switch (index.column()) {
 						case 0:
-							return m_allowedCookies.at(row);
+							return m_allowedCookies[row];
 						case 1:
 							return tr("Allow");
 					}
 				}
-				row = row - m_allowedCookies.count();
-				if (row < m_blockedCookies.count()) {
+				row = row - m_allowedCookies.length;
+				if (row < m_blockedCookies.length) {
 					switch (index.column()) {
 						case 0:
-							return m_blockedCookies.at(row);
+							return m_blockedCookies[row];
 						case 1:
 							return tr("Block");
 					}
 				}
-				row = row - m_blockedCookies.count();
-				if (row < m_sessionCookies.count()) {
+				row = row - m_blockedCookies.length;
+				if (row < m_sessionCookies.length) {
 					switch (index.column()) {
 						case 0:
-							return m_sessionCookies.at(row);
+							return m_sessionCookies[row];
 						case 1:
 							return tr("Allow For Session");
 					}
 				}
 			}
 			case Qt.FontRole:{
-				QFont font;
+				auto font = new QFont;
 				font.setPointSize(10);
 				return font;
 			}
@@ -677,7 +679,7 @@
 	
 	int rowCount(QModelIndex parent = QModelIndex())
 	{
-		return (parent.isValid() || !m_cookieJar) ? 0 : m_allowedCookies.count() + m_blockedCookies.count() + m_sessionCookies.count();
+		return (parent.isValid() || !m_cookieJar) ? 0 : m_allowedCookies.length + m_blockedCookies.length + m_sessionCookies.length;
 	}
 
 	bool removeRows(int row, int count, QModelIndex parent)
@@ -688,17 +690,17 @@
 		int lastRow = row + count - 1;
 		beginRemoveRows(parent, row, lastRow);
 		for (int i = lastRow; i >= row; --i) {
-			if (i < m_allowedCookies.count()) {
+			if (i < m_allowedCookies.length) {
 				m_allowedCookies.removeAt(row);
 				continue;
 			}
-			i = i - m_allowedCookies.count();
-			if (i < m_blockedCookies.count()) {
+			i = i - m_allowedCookies.length;
+			if (i < m_blockedCookies.length) {
 				m_blockedCookies.removeAt(row);
 				continue;
 			}
-			i = i - m_blockedCookies.count();
-			if (i < m_sessionCookies.count()) {
+			i = i - m_blockedCookies.length;
+			if (i < m_sessionCookies.length) {
 				m_sessionCookies.removeAt(row);
 				continue;
 			}
@@ -716,9 +718,9 @@
 	CookieJar m_cookieJar;
 
 	// Domains we allow, Domains we block, Domains we allow for this session
-	QStringList m_allowedCookies;
-	QStringList m_blockedCookies;
-	QStringList m_sessionCookies;
+	string[] m_allowedCookies;
+	string[] m_blockedCookies;
+	string[] m_sessionCookies;
 }
 
 
@@ -728,7 +730,7 @@
 public:
 
 	this(CookieJar cookieJar, QWidget parent = null)
-	: QDialog(parent)
+	//: QDialog(parent)
 	{
 		m_cookieJar = cookieJar;
 		setupUi(this);
@@ -757,7 +759,7 @@
 
 		QFont f = font();
 		f.setPointSize(10);
-		QFontMetrics fm(f);
+		auto fm = new QFontMetrics(f);
 		int height = fm.height() + fm.height()/3;
 		exceptionTable.verticalHeader().setDefaultSectionSize(height);
 		exceptionTable.verticalHeader().setMinimumSectionSize(-1);
@@ -783,7 +785,7 @@
 	{
 		if (domainLineEdit.text().isEmpty())
 			return;
-		m_exceptionsModel.m_blockedCookies.append(domainLineEdit.text());
+		m_exceptionsModel.m_blockedCookies ~= domainLineEdit.text();
 		m_cookieJar.setBlockedCookies(m_exceptionsModel.m_blockedCookies);
 		m_exceptionsModel.reset();
 	}
@@ -792,7 +794,7 @@
 	{
 		if (domainLineEdit.text().isEmpty())
 			return;
-		m_exceptionsModel.m_allowedCookies.append(domainLineEdit.text());
+		m_exceptionsModel.m_allowedCookies ~= domainLineEdit.text();
 		m_cookieJar.setAllowedCookies(m_exceptionsModel.m_allowedCookies);
 		m_exceptionsModel.reset();
 	}
@@ -800,12 +802,12 @@
 	{
 		if (domainLineEdit.text().isEmpty())
 			return;
-		m_exceptionsModel.m_sessionCookies.append(domainLineEdit.text());
+		m_exceptionsModel.m_sessionCookie ~= domainLineEdit.text();
 		m_cookieJar.setAllowForSessionCookies(m_exceptionsModel.m_sessionCookies);
 		m_exceptionsModel.reset();
 	}
 	
-	void textChanged(QString text)
+	void textChanged(string text)
 	{
 		bool enabled = !text.isEmpty();
 		blockButton.setEnabled(enabled);
--- a/demos/browser/downloadmanager.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/downloadmanager.d	Sun May 24 13:46:32 2009 +0000
@@ -140,12 +140,12 @@
 			m_output.remove();
 		m_reply = r;
 		init();
-		emit statusChanged();
+		statusChanged.emit();
 	}
 
 	void open()
 	{
-		QFileInfo info(m_output);
+		auto info = new QFileInfo(m_output);
 		QUrl url = QUrl.fromLocalFile(info.absolutePath());
 		QDesktopServices.openUrl(url);
 	}
@@ -159,17 +159,15 @@
 			if (!m_requestFileName)
 				getFileName();
 			if (!m_output.open(QIODevice.WriteOnly)) {
-				downloadInfoLabel.setText(tr("Error opening save file: %1")
-					.arg(m_output.errorString()));
+				downloadInfoLabel.setText(Format(tr("Error opening save file: {}"), m_output.errorString()));
 				stopButton.click();
-				emit statusChanged();
+				statusChanged.emit();
 				return;
 			}
-			emit statusChanged();
+			statusChanged.emit();
 		}
 		if (-1 == m_output.write(m_reply.readAll())) {
-			downloadInfoLabel.setText(tr("Error saving: %1")
-				.arg(m_output.errorString()));
+			downloadInfoLabel.setText(Format(tr("Error saving: {}"), m_output.errorString()));
 			stopButton.click();
 		}
 	}
@@ -177,7 +175,7 @@
 	void error(QNetworkReply.NetworkError code)
 	{
 		qDebug() << "DownloadItem::error" << m_reply.errorString() << m_url;
-		downloadInfoLabel.setText(tr("Network Error: %1").arg(m_reply.errorString()));
+		downloadInfoLabel.setText(Format(tr("Network Error: {}"), m_reply.errorString()));
 		tryAgainButton.setEnabled(true);
 		tryAgainButton.setVisible(true);
 	}
@@ -207,32 +205,32 @@
 		stopButton.hide();
 		m_output.close();
 		updateInfoLabel();
-		emit statusChanged();
+		statusChanged.emit();
 	}
 
 private:
 
 	void getFileName()
 	{
-		QSettings settings;
+		auto settings = new QSettings;
 		settings.beginGroup(QLatin1String("downloadmanager"));
-		QString defaultLocation = QDesktopServices.storageLocation(QDesktopServices.DesktopLocation);
-		QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), defaultLocation).toString();
+		string defaultLocation = QDesktopServices.storageLocation(QDesktopServices.DesktopLocation);
+		string downloadDirectory = settings.value(QLatin1String("downloadDirectory"), defaultLocation).toString();
 		if (!downloadDirectory.isEmpty())
 			downloadDirectory += QLatin1Char('/');
 
-		QString defaultFileName = saveFileName(downloadDirectory);
-		QString fileName = defaultFileName;
+		string defaultFileName = saveFileName(downloadDirectory);
+		string fileName = defaultFileName;
 		if (m_requestFileName) {
 			fileName = QFileDialog.getSaveFileName(this, tr("Save File"), defaultFileName);
 			if (fileName.isEmpty()) {
 				m_reply.close();
-				fileNameLabel.setText(tr("Download canceled: %1").arg(QFileInfo(defaultFileName).fileName()));
+				fileNameLabel.setText(Format(tr("Download canceled: {}"), (new QFileInfo(defaultFileName)).fileName()));
 				return;
 			}
 		}
 		m_output.setFileName(fileName);
-		fileNameLabel.setText(QFileInfo(m_output.fileName()).fileName());
+		fileNameLabel.setText((new QFileInfo(m_output.fileName())).fileName());
 		if (m_requestFileName)
 			downloadReadyRead();
 	}
@@ -276,7 +274,7 @@
 		// update info label
 		double speed = m_bytesReceived * 1000.0 / m_downloadTime.elapsed();
 		double timeRemaining = (cast(double)(bytesTotal - m_bytesReceived)) / speed;
-		QString timeRemainingString = tr("seconds");
+		string timeRemainingString = tr("seconds");
 		if (timeRemaining > 60) {
 			timeRemaining = timeRemaining / 60;
 			timeRemainingString = tr("minutes");
@@ -287,33 +285,31 @@
 		if (timeRemaining == 0)
 			timeRemaining = 1;
 
-		QString info;
+		string info;
 		if (running) {
-			QString remaining;
+			string remaining;
 			if (bytesTotal != 0)
-				remaining = tr("- %4 %5 remaining")
-				.arg(timeRemaining)
-				.arg(timeRemainingString);
+				remaining = Format(tr("- {} {} remaining"), timeRemaining, timeRemainingString);
 			
-			info = QString(tr("%1 of %2 (%3/sec) %4"))
-				.arg(dataString(m_bytesReceived))
-				.arg(bytesTotal == 0 ? tr("?") : dataString(bytesTotal))
-				.arg(dataString(cast(int) speed))
-				.arg(remaining);
+			info = Format(tr("{} of {} ({}/sec) {}"),
+					dataString(m_bytesReceived),
+					bytesTotal == 0 ? tr("?") : dataString(bytesTotal),
+					dataString(cast(int) speed),
+					remaining);
 		} else {
 			if (m_bytesReceived == bytesTotal)
 				info = dataString(m_output.size());
 			else
-				info = tr("%1 of %2 - Stopped")
-				.arg(dataString(m_bytesReceived))
-				.arg(dataString(bytesTotal));
+				info = Format(tr("{} of {} - Stopped"),
+					dataString(m_bytesReceived),
+					dataString(bytesTotal));
 		}
 		downloadInfoLabel.setText(info);
 	}
 
-	QString dataString(int size)
+	string dataString(int size)
 	{
-		QString unit;
+		string unit;
 		if (size < 1024) {
 			unit = tr("bytes");
 		} else if (size < 1024*1024) {
@@ -323,27 +319,27 @@
 			size /= 1024*1024;
 			unit = tr("MB");
 		}
-		return QString(QLatin1String("%1 %2")).arg(size).arg(unit);
+		return Format(QLatin1String("{} {}"), size, unit);
 	}
 
-	QString saveFileName(QString directory)
+	string saveFileName(string directory)
 	{
 		// Move this function into QNetworkReply to also get file name sent from the server
-		QString path = m_url.path();
-		QFileInfo info(path);
-		QString baseName = info.completeBaseName();
-		QString endName = info.suffix();
+		string path = m_url.path();
+		auto info = new QFileInfo(path);
+		string baseName = info.completeBaseName();
+		string endName = info.suffix();
 
 		if (baseName.isEmpty()) {
 			baseName = QLatin1String("unnamed_download");
 			qDebug() << "DownloadManager:: downloading unknown file:" << m_url;
 		}
-		QString name = directory + baseName + QLatin1Char('.') + endName;
+		string name = directory ~ baseName ~ QLatin1Char('.') ~ endName;
 		if (QFile.exists(name)) {
 			// already exists, don't overwrite
 			int i = 1;
 			do {
-				name = directory + baseName + QLatin1Char('-') + QString.number(i++) + QLatin1Char('.') + endName;
+				name = directory ~ baseName ~ QLatin1Char('-') ~ QString.number(i++) ~ QLatin1Char('.') ~ endName;
 			} while (QFile.exists(name));
 		}
 		return name;
@@ -403,8 +399,8 @@
 	int activeDownloads()
 	{
 		int count = 0;
-		for (int i = 0; i < m_downloads.count(); ++i) {
-			if (m_downloads.at(i).stopButton.isEnabled())
+		for (int i = 0; i < m_downloads.length; ++i) {
+			if (m_downloads[i].stopButton.isEnabled())
 				++count;
 		}
 		return count;
@@ -454,11 +450,11 @@
 	
 	void cleanup()
 	{
-		if (m_downloads.isEmpty())
+		if (m_downloads.length == 0)
 			return;
-		m_model.removeRows(0, m_downloads.count());
+		m_model.removeRows(0, m_downloads.length);
 		updateItemCount();
-		if (m_downloads.isEmpty() && m_iconProvider) {
+		if (m_downloads.length == 0 && m_iconProvider) {
 			delete m_iconProvider;
 			m_iconProvider = 0;
 		}
@@ -477,25 +473,25 @@
 		if (m_removePolicy == Exit)
 			return;
 
-		for (int i = 0; i < m_downloads.count(); ++i) {
-			QString key = QString(QLatin1String("download_%1_")).arg(i);
-			settings.setValue(key + QLatin1String("url"), m_downloads[i].m_url);
-			settings.setValue(key + QLatin1String("location"), QFileInfo(m_downloads[i].m_output).filePath());
-			settings.setValue(key + QLatin1String("done"), m_downloads[i].downloadedSuccessfully());
+		for (int i = 0; i < m_downloads.length; ++i) {
+			string key = Format(QLatin1String("download_{}_"), i);
+			settings.setValue(key ~ QLatin1String("url"), m_downloads[i].m_url);
+			settings.setValue(key ~ QLatin1String("location"), (new QFileInfo(m_downloads[i].m_output)).filePath());
+			settings.setValue(key ~ QLatin1String("done"), m_downloads[i].downloadedSuccessfully());
 		}
-		int i = m_downloads.count();
-		QString key = QString(QLatin1String("download_%1_")).arg(i);
-		while (settings.contains(key + QLatin1String("url"))) {
-			settings.remove(key + QLatin1String("url"));
-			settings.remove(key + QLatin1String("location"));
-			settings.remove(key + QLatin1String("done"));
-			key = QString(QLatin1String("download_%1_")).arg(++i);
+		int i = m_downloads.length;
+		string key = Format(QLatin1String("download_{}_"), i);
+		while (settings.contains(key ~ QLatin1String("url"))) {
+			settings.remove(key ~ QLatin1String("url"));
+			settings.remove(key ~ QLatin1String("location"));
+			settings.remove(key ~ QLatin1String("done"));
+			key = Format(QLatin1String("download_{}_"), ++i);
 		}
 	}
 
 	void updateRow()
 	{
-		DownloadItem item = cast(DownloadItem) sender();
+		DownloadItem item = cast(DownloadItem) signalSender();
 		int row = m_downloads.indexOf(item);
 		if (-1 == row)
 			return;
@@ -518,7 +514,7 @@
 		if (remove)
 			m_model.removeRow(row);
 
-		cleanupButton.setEnabled(m_downloads.count() - activeDownloads() > 0);
+		cleanupButton.setEnabled(m_downloads.length - activeDownloads() > 0);
 	}
 
 private:
@@ -526,9 +522,9 @@
 	void addItem(DownloadItem item)
 	{
 		item.statusChanged.connect(&this.updateRow);
-		int row = m_downloads.count();
+		int row = m_downloads.length;
 		m_model.beginInsertRows(QModelIndex(), row, row);
-		m_downloads.append(item);
+		m_downloads ~= item;
 		m_model.endInsertRows();
 		updateItemCount();
 		if (row == 0)
@@ -542,8 +538,8 @@
 
 	void updateItemCount()
 	{
-		int count = m_downloads.count();
-		itemCount.setText(count == 1 ? tr("1 Download") : tr("%1 Downloads").arg(count));
+		int count = m_downloads.length;
+		itemCount.setText(count == 1 ? tr("1 Download") : tr("{} Downloads").arg(count));
 	}
 
 	void load()
@@ -559,15 +555,15 @@
 			cast(RemovePolicy) removePolicyEnum.keyToValue(value);
 
 		int i = 0;
-		QString key = QString(QLatin1String("download_%1_")).arg(i);
+		string key = Format(QLatin1String("download_{}_"), i);
 		while (settings.contains(key + QLatin1String("url"))) {
 			QUrl url = settings.value(key + QLatin1String("url")).toUrl();
-			QString fileName = settings.value(key + QLatin1String("location")).toString();
+			string fileName = settings.value(key + QLatin1String("location")).toString();
 			bool done = settings.value(key + QLatin1String("done"), true).toBool();
 			if (!url.isEmpty() && !fileName.isEmpty()) {
 				DownloadItem item = new DownloadItem(0, this);
 				item.m_output.setFileName(fileName);
-				item.fileNameLabel.setText(QFileInfo(item.m_output.fileName()).fileName());
+				item.fileNameLabel.setText((new QFileInfo(item.m_output.fileName())).fileName());
 				item.m_url = url;
 				item.stopButton.setVisible(false);
 				item.stopButton.setEnabled(false);
@@ -576,9 +572,9 @@
 				item.progressBar.setVisible(!done);
 				addItem(item);
 			}
-			key = QString(QLatin1String("download_%1_")).arg(++i);
+			key = Format(QLatin1String("download_{}_"), ++i);
 		}
-		cleanupButton.setEnabled(m_downloads.count() - activeDownloads() > 0);
+		cleanupButton.setEnabled(m_downloads.length - activeDownloads() > 0);
 	}
 
 	AutoSaver m_autoSaver;
@@ -606,14 +602,14 @@
 		if (index.row() < 0 || index.row() >= rowCount(index.parent()))
 			return QVariant();
 		if (role == Qt.ToolTipRole)
-			if (!m_downloadManager.m_downloads.at(index.row()).downloadedSuccessfully())
-				return m_downloadManager.m_downloads.at(index.row()).downloadInfoLabel.text();
+			if (!m_downloadManager.m_downloads[index.row()].downloadedSuccessfully())
+				return m_downloadManager.m_downloads[index.row()].downloadInfoLabel.text();
 		return QVariant();
 	}
 
 	int rowCount(QModelIndex parent = QModelIndex())
 	{
-		return (parent.isValid()) ? 0 : m_downloadManager.m_downloads.count();
+		return (parent.isValid()) ? 0 : m_downloadManager.m_downloads.length;
 	}
 
 	bool removeRows(int row, int count, QModelIndex parent = QModelIndex())
@@ -623,8 +619,8 @@
 
 		int lastRow = row + count - 1;
 		for (int i = lastRow; i >= row; --i) {
-			if (m_downloadManager.m_downloads.at(i).downloadedSuccessfully()
-				|| m_downloadManager.m_downloads.at(i).tryAgainButton.isEnabled()) {
+			if (m_downloadManager.m_downloads[i].downloadedSuccessfully()
+				|| m_downloadManager.m_downloads[i].tryAgainButton.isEnabled()) {
 				beginRemoveRows(parent, i, i);
 				m_downloadManager.m_downloads.takeAt(i).deleteLater();
 				endRemoveRows();
--- a/demos/browser/history.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/history.d	Sun May 24 13:46:32 2009 +0000
@@ -82,7 +82,7 @@
 
 	this() {}
 
-	this(QString u, QDateTime d = QDateTime(), QString t = QString())
+	this(string u, QDateTime d = QDateTime(), string t = null)
 	{
 		title = t;
 		url = u;
@@ -102,8 +102,8 @@
 		return cast(int) (dateTime > other.dateTime);
 	}
 
-	QString title;
-	QString url;
+	string title;
+	string url;
 	QDateTime dateTime;
 }
 
@@ -147,29 +147,29 @@
 		m_saveTimer.saveIfNeccessary();
 	}
 
-	bool historyContains(QString url)
+	bool historyContains(string url)
 	{
 		return m_historyFilterModel.historyContains(url);
 	}
 
-	void addHistoryEntry(QString url)
+	void addHistoryEntry(string url)
 	{
 		QUrl cleanUrl(url);
-		cleanUrl.setPassword(QString());
-		cleanUrl.setHost(cleanUrl.host().toLower());
+		cleanUrl.setPassword(null);
+		cleanUrl.setHost(toLower(cleanUrl.host()));
 		auto item = new HistoryItem(cleanUrl.toString(), QDateTime.currentDateTime());
 		addHistoryItem(item);
 	}
 
-	void updateHistoryItem(QUrl url, QString title)
+	void updateHistoryItem(QUrl url, string title)
 	{
-		for (int i = 0; i < m_history.count(); ++i) {
-			if (url == m_history.at(i).url) {
+		for (int i = 0; i < m_history.length; ++i) {
+			if (url == m_history[i].url) {
 				m_history[i].title = title;
 				m_saveTimer.changeOccurred();
 				if (m_lastSavedUrl.isEmpty())
-				m_lastSavedUrl = m_history.at(i).url;
-				emit entryUpdated(i);
+				m_lastSavedUrl = m_history[i].url;
+				entryUpdated.emit(i);
 				break;
 			}
 		}
@@ -207,10 +207,10 @@
 		if (loadedAndSorted) {
 			m_lastSavedUrl = m_history.value(0).url;
 		} else {
-			m_lastSavedUrl = QString();
+			m_lastSavedUrl = null;
 			m_saveTimer.changeOccurred();
 		}
-		emit historyReset();
+		historyReset.emit();
 	}
 
 	// History manager keeps around these models for use by the completer and other classes
@@ -233,8 +233,8 @@
 
 	void clear()
 	{
-		m_history.clear();
-		m_lastSavedUrl = QString();
+		m_history = null;
+		m_lastSavedUrl = null;
 		m_saveTimer.changeOccurred();
 		m_saveTimer.saveIfNeccessary();
 		historyReset();
@@ -257,21 +257,21 @@
 		settings.setValue(QLatin1String("historyLimit"), m_historyLimit);
 
 		bool saveAll = m_lastSavedUrl.isEmpty();
-		int first = m_history.count() - 1;
+		int first = m_history.length - 1;
 		if (!saveAll) {
 			// find the first one to save
-			for (int i = 0; i < m_history.count(); ++i) {
-				if (m_history.at(i).url == m_lastSavedUrl) {
+			for (int i = 0; i < m_history.length; ++i) {
+				if (m_history[i].url == m_lastSavedUrl) {
 					first = i - 1;
 					break;
 				}
 			}
 		}
 		
-		if (first == m_history.count() - 1)
+		if (first == m_history.length - 1)
 			saveAll = true;
 
-		QString directory = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
+		string directory = QDesktopServices.storageLocation(QDesktopServices.DataLocation);
 		if (directory.isEmpty())
 			directory = QDir.homePath() + QLatin1String("/.") + QCoreApplication.applicationName();
 		if (!QFile.exists(directory)) {
@@ -300,7 +300,7 @@
 		for (int i = first; i >= 0; --i) {
 			QByteArray data;
 			auto stream = new QDataStream(data, QIODevice.WriteOnly);
-			HistoryItem item = m_history.at(i);
+			HistoryItem item = m_history[i];
 			stream << HISTORY_VERSION << item.url << item.dateTime << item.title;
 			out_ << data;
 		}
@@ -317,13 +317,13 @@
 
 	void checkForExpired()
 	{
-		if (m_historyLimit < 0 || m_history.isEmpty())
+		if (m_historyLimit < 0 || m_history.length == 0)
 			return;
 
 		QDateTime now = QDateTime.currentDateTime();
 		int nextTimeout = 0;
 
-		while (!m_history.isEmpty()) {
+		while (m_history.length) {
 			QDateTime checkForExpired = m_history.last().dateTime;
 			checkForExpired.setDate(checkForExpired.date().addDays(m_historyLimit));
 			if (now.daysTo(checkForExpired) > 7) {
@@ -336,8 +336,8 @@
 				break;
 			HistoryItem item = m_history.takeLast();
 			// remove from saved file also
-			m_lastSavedUrl = QString();
-			emit entryRemoved(item);
+			m_lastSavedUrl = null;
+			entryRemoved.emit(item);
 		}
 
 		if (nextTimeout > 0)
@@ -352,9 +352,9 @@
 		if (globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled))
 			return;
 
-		m_history.prepend(item);
-		emit entryAdded(item);
-		if (m_history.count() == 1)
+		m_history = [item] ~ m_history;
+		entryAdded.emit(item);
+		if (m_history.length == 1)
 			checkForExpired();
 	}
 
@@ -364,7 +364,7 @@
 	{
 		loadSettings();
 
-		historyFile = new QFile(QDesktopServices.storageLocation(QDesktopServices.DataLocation) + QLatin1String("/history"));
+		historyFile = new QFile(QDesktopServices.storageLocation(QDesktopServices.DataLocation) ~ QLatin1String("/history"));
 		if (!historyFile.exists())
 			return;
 		if (!historyFile.open(QFile.ReadOnly)) {
@@ -376,21 +376,21 @@
 		auto in_ = new QDataStream(&historyFile);
 		// Double check that the history file is sorted as it is read in
 		bool needToSort = false;
-		HistoryItem lastInsertedItem;
-		QByteArray data;
-		QDataStream stream;
-		QBuffer buffer;
+		auto lastInsertedItem = new HistoryItem;
+		auto data = new QByteArray;
+		auto stream = new QDataStream;
+		auto buffer = new QBuffer;
 		stream.setDevice(buffer);
 		while (!historyFile.atEnd()) {
 			in_ >> data;
 			buffer.close();
 			buffer.setBuffer(data);
 			buffer.open(QIODevice.ReadOnly);
-			quint32 ver;
+			uint ver;
 			stream >> ver;
 			if (ver != HISTORY_VERSION)
 				continue;
-			HistoryItem item;
+			auto item = new HistoryItem;
 			stream >> item.url;
 			stream >> item.dateTime;
 			stream >> item.title;
@@ -418,7 +418,7 @@
 
 		// If we had to sort re-write the whole history sorted
 		if (needToSort) {
-			m_lastSavedUrl = QString();
+			m_lastSavedUrl = null;
 			m_saveTimer.changeOccurred();
 		}
 	}
@@ -427,7 +427,7 @@
 	int m_historyLimit;
 	QTimer m_expiredTimer;
 	HistoryItem[] m_history;
-	QString m_lastSavedUrl;
+	string m_lastSavedUrl;
 
 	HistoryModel m_historyModel;
 	HistoryFilterModel m_historyFilterModel;
@@ -453,7 +453,7 @@
 	void entryUpdated(int offset)
 	{
 		QModelIndex idx = index(offset, 0);
-		emit dataChanged(idx, idx);
+		dataChanged.emit(idx, idx);
 	}
 
 public:
@@ -491,10 +491,10 @@
 	QVariant data(QModelIndex index, int role = Qt.DisplayRole)
 	{
 		HistoryItem[] lst = m_history.history();
-		if (index.row() < 0 || index.row() >= lst.size())
+		if (index.row() < 0 || index.row() >= lst.length)
 			return QVariant();
 
-		HistoryItem item = lst.at(index.row());
+		HistoryItem item = lst[index.row()];
 		switch (role) {
 			case DateTimeRole:
 				return item.dateTime;
@@ -510,7 +510,7 @@
 					case 0:
 						// when there is no title try to generate one from the url
 						if (item.title.isEmpty()) {
-							QString page = QFileInfo(QUrl(item.url).path()).fileName();
+							string page = QFileInfo(QUrl(item.url).path()).fileName();
 							if (!page.isEmpty())
 								return page;
 							return item.url;
@@ -554,8 +554,8 @@
 		return true;
 	}
 
+private:
 
-private:
 	HistoryManager m_history;
 }
 
@@ -579,16 +579,16 @@
 		setSourceModel(sourceModel);
 	}
 
-	bool historyContains(QString url)
+	bool historyContains(string url)
 	{
 		load();
-		return m_historyHash.contains(url);
+		return ((url in m_historyHash) != null);
 	}
 	
-	int historyLocation(QString url)
+	int historyLocation(string url)
 	{
 		load();
-		if (!m_historyHash.contains(url))
+		if (!(url in m_historyHash))
 			return 0;
 		return sourceModel().rowCount() - m_historyHash.value(url);
 	}
@@ -596,8 +596,8 @@
 	QModelIndex mapFromSource(QModelIndex sourceIndex)
 	{
 		load();
-		QString url = sourceIndex.data(HistoryModel.UrlStringRole).toString();
-		if (!m_historyHash.contains(url))
+		string url = sourceIndex.data(HistoryModel.UrlStringRole).toString();
+		if (!(url in m_historyHash))
 			return QModelIndex();
 
 		// This can be done in a binary search, but we can't use qBinary find
@@ -608,7 +608,7 @@
 		int sourceModelRow = sourceModel().rowCount() - sourceIndex.row();
 
 		for (int i = 0; i < m_sourceRow.count(); ++i) {
-			if (m_sourceRow.at(i) == sourceModelRow) {
+			if (m_sourceRow[i] == sourceModelRow) {
 				realRow = i;
 				break;
 			}
@@ -656,7 +656,7 @@
 		load();
 		if (parent.isValid())
 			return 0;
-		return m_historyHash.count();
+		return m_historyHash.length;
 	}
 
 	int columnCount(QModelIndex parent = QModelIndex())
@@ -701,7 +701,6 @@
 		return true;
 	}
 
-
 	QVariant data(QModelIndex index, int role = Qt.DisplayRole)
 	{
 		return QAbstractProxyModel.data(index, role);
@@ -722,20 +721,18 @@
 
 	void sourceRowsRemoved(QModelIndex , int start, int end)
 	{
-		//Q_UNUSED(start);
-		//Q_UNUSED(end);
 		sourceReset();
 	}
 
 	void sourceRowsInserted(QModelIndex parent, int start, int end)
 	{
 		assert(start == end && start == 0);
-		//Q_UNUSED(end);
+		
 		if (!m_loaded)
 			return;
 		QModelIndex idx = sourceModel().index(start, 0, parent);
-		QString url = idx.data(HistoryModel.UrlStringRole).toString();
-		if (m_historyHash.contains(url)) {
+		string url = idx.data(HistoryModel.UrlStringRole).toString();
+		if (url in m_historyHash) {
 			int sourceRow = sourceModel().rowCount() - m_historyHash[url];
 			int realRow = mapFromSource(sourceModel().index(sourceRow, 0)).row();
 			beginRemoveRows(QModelIndex(), realRow, realRow);
@@ -744,7 +741,7 @@
 			endRemoveRows();
 		}
 		beginInsertRows(QModelIndex(), 0, 0);
-		m_historyHash.insert(url, sourceModel().rowCount() - start);
+		m_historyHash[url] = (sourceModel().rowCount() - start);
 		m_sourceRow.insert(0, sourceModel().rowCount());
 		endInsertRows();
 	}
@@ -755,12 +752,13 @@
 		if (m_loaded)
 			return;
 		m_sourceRow.clear();
-		m_historyHash.clear();
-		m_historyHash.reserve(sourceModel().rowCount());
+		m_historyHash = null;
+		m_historyHash.length = sourceModel().rowCount();
+		m_historyHash.length = 0;
 		for (int i = 0; i < sourceModel().rowCount(); ++i) {
 			QModelIndex idx = sourceModel().index(i, 0);
-			QString url = idx.data(HistoryModel.UrlStringRole).toString();
-			if (!m_historyHash.contains(url)) {
+			string url = idx.data(HistoryModel.UrlStringRole).toString();
+			if (!(url in m_historyHash)) {
 				m_sourceRow.append(sourceModel().rowCount() - i);
 				m_historyHash[url] = sourceModel().rowCount() - i;
 			}
@@ -769,7 +767,7 @@
 	}
 
 	int[] m_sourceRow;
-	int[QString] m_historyHash;
+	int[string] m_historyHash;
 	bool m_loaded;
 }
 
@@ -923,8 +921,8 @@
 	void setInitialActions(QAction[] actions)
 	{
 		m_initialActions = actions;
-		for (int i = 0; i < m_initialActions.count(); ++i)
-			addAction(m_initialActions.at(i));
+		for (int i = 0; i < m_initialActions.length; ++i)
+			addAction(m_initialActions[i]);
 	}
 
 protected:
@@ -937,9 +935,9 @@
 			setModel(m_historyMenuModel);
 		}
 		// initial actions
-		for (int i = 0; i < m_initialActions.count(); ++i)
-			addAction(m_initialActions.at(i));
-		if (!m_initialActions.isEmpty())
+		for (int i = 0; i < m_initialActions.length; ++i)
+			addAction(m_initialActions[i]);
+		if (m_initialActions.length)
 			addSeparator();
 		setFirstSeparator(m_historyMenuModel.bumpedRows());
 
@@ -998,10 +996,10 @@
 		if (sourceModel() && (role == Qt.EditRole || role == Qt.DisplayRole) && index.isValid()) {
 			QModelIndex idx = mapToSource(index);
 			idx = idx.sibling(idx.row(), 1);
-			QString urlString = idx.data(HistoryModel.UrlStringRole).toString();
+			string urlString = idx.data(HistoryModel.UrlStringRole).toString();
 			if (index.row() % 2) {
 				QUrl url = urlString;
-				QString s = url.toString(QUrl.RemoveScheme | QUrl.RemoveUserInfo | QUrl.StripTrailingSlash);
+				string s = url.toString(QUrl.RemoveScheme | QUrl.RemoveUserInfo | QUrl.StripTrailingSlash);
 				return s.mid(2);  // strip // from the front
 			}
 			return urlString;
@@ -1100,7 +1098,7 @@
 					return date.toString(QLatin1String("dddd, MMMM d, yyyy"));
 				}
 				if (index.column() == 1) {
-					return tr("%1 items").arg(rowCount(index.sibling(index.row(), 0)));
+					return Format(tr("{} items"), rowCount(index.sibling(index.row(), 0)));
 				}
 			}
 		}
@@ -1127,8 +1125,8 @@
 
 		// row count OF dates
 		if (!parent.isValid()) {
-			if (!m_sourceRowCache.isEmpty())
-				return m_sourceRowCache.count();
+			if (m_sourceRowCache.length)
+				return m_sourceRowCache.length;
 			QDate currentDate;
 			int rows = 0;
 			int totalRows = sourceModel().rowCount();
@@ -1136,12 +1134,12 @@
 			for (int i = 0; i < totalRows; ++i) {
 				QDate rowDate = sourceModel().index(i, 0).data(HistoryModel.DateRole).toDate();
 				if (rowDate != currentDate) {
-					m_sourceRowCache.append(i);
+					m_sourceRowCache ~= i;
 					currentDate = rowDate;
 					++rows;
 				}
 			}
-			assert(m_sourceRowCache.count() == rows);
+			assert(m_sourceRowCache.length == rows);
 			return rows;
 		}
 
@@ -1156,7 +1154,7 @@
 		if (!sourceIndex.isValid())
 			return QModelIndex();
 
-		if (m_sourceRowCache.isEmpty())
+		if (m_sourceRowCache.length == 0)
 			rowCount(QModelIndex());
 
 		int[].iterator it;
@@ -1164,7 +1162,7 @@
 		if (*it != sourceIndex.row())
 			--it;
 		int dateRow = qMax(0, it - m_sourceRowCache.begin());
-		int row = sourceIndex.row() - m_sourceRowCache.at(dateRow);
+		int row = sourceIndex.row() - m_sourceRowCache[dateRow];
 		return createIndex(row, sourceIndex.column(), dateRow + 1);
 	}
 
@@ -1261,21 +1259,20 @@
 
 	void sourceReset()
 	{
-		m_sourceRowCache.clear();
+		m_sourceRowCache.length = 0;
 		reset();
 	}
 
 	void sourceRowsInserted(QModelIndex parent, int start, int end)
 	{
-		//Q_UNUSED(parent); // Avoid warnings when compiling release
 		assert(!parent.isValid());
 		if (start != 0 || start != end) {
-			m_sourceRowCache.clear();
+			m_sourceRowCache.length = 0;
 			reset();
 			return;
 		}
 
-		m_sourceRowCache.clear();
+		m_sourceRowCache.length = 0;
 		QModelIndex treeIndex = mapFromSource(sourceModel().index(start, 0));
 		QModelIndex treeParent = treeIndex.parent();
 		if (rowCount(treeParent) == 1) {
@@ -1287,18 +1284,17 @@
 		}
 	}
 
-	void sourceRowsRemoved(QModelIndex parent, int start, int end);
+	void sourceRowsRemoved(QModelIndex parent, int start, int end)
 	{
-		//Q_UNUSED(parent); // Avoid warnings when compiling release
 		assert(!parent.isValid());
-		if (m_sourceRowCache.isEmpty())
+		if (m_sourceRowCache.length == 0)
 			return;
 		for (int i = end; i >= start;) {
 			int[]::iterator it;
 			it = qLowerBound(m_sourceRowCache.begin(), m_sourceRowCache.end(), i);
 			// playing it safe
 			if (it == m_sourceRowCache.end()) {
-				m_sourceRowCache.clear();
+				m_sourceRowCache = null;
 				reset();
 				return;
 			}
@@ -1319,7 +1315,7 @@
 				++row;
 				--i;
 			}
-			for (int j = row; j < m_sourceRowCache.count(); ++j)
+			for (int j = row; j < m_sourceRowCache.length; ++j)
 				--m_sourceRowCache[j];
 			endRemoveRows();
 		}
@@ -1333,15 +1329,15 @@
 		if (row <= 0)
 			return 0;
 
-		if (m_sourceRowCache.isEmpty())
+		if (m_sourceRowCache.length == 0)
 			rowCount(QModelIndex());
 
-		if (row >= m_sourceRowCache.count()) {
+		if (row >= m_sourceRowCache.length) {
 			if (!sourceModel())
 				return 0;
 			return sourceModel().rowCount();
 		}
-		return m_sourceRowCache.at(row);
+		return m_sourceRowCache[row];
 	}
 
 	int[] m_sourceRowCache;
@@ -1362,7 +1358,8 @@
 		setFilterCaseSensitivity(Qt.CaseInsensitive);
 	}
 
-	protected:
+protected:
+
 	bool filterAcceptsRow(int source_row, QModelIndex source_parent)
 	{
 		if (!source_parent.isValid())
@@ -1392,7 +1389,7 @@
 		tree.setTextElideMode(Qt.ElideMiddle);
 		auto model = history.historyTreeModel();
 		auto proxyModel = new TreeProxyModel(this);
-		search.textChanged(QString).connect(&proxyModel.setFilterFixedString(QString));
+		search.textChanged.connect(&proxyModel.setFilterFixedString);
 		removeButton.clicked.connect(&tree.removeOne);
 		removeAllButton.clicked.connect(&history.clear);
 		proxyModel.setSourceModel(model);
@@ -1412,7 +1409,7 @@
 
 	void customContextMenuRequested(QPoint pos)
 	{
-		QMenu menu;
+		auto menu = new QMenu;
 		QModelIndex index = tree.indexAt(pos);
 		index = index.sibling(index.row(), 0);
 		if (index.isValid() && !tree.model().hasChildren(index)) {
@@ -1429,7 +1426,7 @@
 		QModelIndex index = tree.currentIndex();
 		if (!index.parent().isValid())
 			return;
-		emit openUrl(index.data(HistoryModel.UrlRole).toUrl());
+		openUrl.emit(index.data(HistoryModel.UrlRole).toUrl());
 	}
 
 	void copy()
@@ -1437,7 +1434,7 @@
 		QModelIndex index = tree.currentIndex();
 		if (!index.parent().isValid())
 			return;
-		QString url = index.data(HistoryModel.UrlStringRole).toString();
+		string url = index.data(HistoryModel.UrlStringRole).toString();
 
 		QClipboard clipboard = QApplication.clipboard();
 		clipboard.setText(url);
--- a/demos/browser/main.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/main.d	Sun May 24 13:46:32 2009 +0000
@@ -38,13 +38,14 @@
 ** $QT_END_LICENSE$
 **
 ****************************************************************************/
+
 module main;
 
 
 import browserapplication;
 
 
-int main(char[][] args)
+int main(string[] args)
 {
 	//Q_INIT_RESOURCE(data);
 	scope application = new BrowserApplication(args);
--- a/demos/browser/modelmenu.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/modelmenu.d	Sun May 24 13:46:32 2009 +0000
@@ -41,7 +41,7 @@
 module modelmenu;
 
 
-import qt.gui.QMenu
+import qt.gui.QMenu;
 import qt.core.QAbstractItemModel;
 
 import qt.core.QAbstractItemModel;
@@ -51,9 +51,9 @@
 // A QMenu that is dynamically populated from a QAbstractItemModel
 class ModelMenu : public QMenu
 {
-	
+
 mixin Signal!("activated", QModelIndex /*index*/);
-mixin Signal!("hovered", QString /*text*/);
+mixin Signal!("hovered", string /*text*/);
 
 public:
 
@@ -129,12 +129,12 @@
 		return m_separatorRole;
 	}
 
-	QAction makeAction(QIcon icon, QString text, QObject parent)
+	QAction makeAction(QIcon icon, string text, QObject parent)
 	{
 		auto fm = new QFontMetrics(font());
 		if (-1 == m_maxWidth)
 			m_maxWidth = fm.width(QLatin1Char('m')) * 30;
-		QString smallText = fm.elidedText(text, Qt.ElideMiddle, m_maxWidth);
+		string smallText = fm.elidedText(text, Qt.ElideMiddle, m_maxWidth);
 		return new QAction(icon, smallText, parent);
 	}
 
@@ -155,9 +155,9 @@
 	void createMenu(QModelIndex parent, int max, QMenu parentMenu = null, QMenu menu = null)
 	{
 		if (!menu) {
-			QString title = parent.data().toString();
+			string title = parent.data().toString();
 			menu = new QMenu(title, this);
-			QIcon icon = qvariant_cast<QIcon>(parent.data(Qt.DecorationRole));
+			QIcon icon = cast(QIcon) parent.data(Qt.DecorationRole);
 			menu.setIcon(icon);
 			parentMenu.addMenu(menu);
 			QVariant v;
@@ -193,10 +193,10 @@
 
 	void aboutToShow()
 	{
-		if (QMenu menu = qobject_cast<QMenu>(sender())) {
+		if (QMenu menu = cast(QMenu) signalSender()) {
 			QVariant v = menu.menuAction().data();
-			if (v.canConvert<QModelIndex>()) {
-				QModelIndex idx = qvariant_cast<QModelIndex>(v);
+			if (v.canConvert!(QModelIndex)()) {
+				QModelIndex idx = cast(QModelIndex) v;
 				createMenu(idx, -1, menu, menu);
 				menu.aboutToShow.disconnect(&this.aboutToShow);
 				return;
@@ -216,20 +216,20 @@
 	void triggered(QAction action)
 	{
 		QVariant v = action.data();
-		if (v.canConvert<QModelIndex>()) {
-			QModelIndex idx = qvariant_cast<QModelIndex>(v);
-			emit activated(idx);
+		if (v.canConvert!(QModelIndex)()) {
+			QModelIndex idx = cast(QModelIndex) v;
+			activated.emit(idx);
 		}
 	}
 
 	void hovered(QAction action)
 	{
 		QVariant v = action.data();
-		if (v.canConvert<QModelIndex>()) {
-			QModelIndex idx = qvariant_cast<QModelIndex>(v);
-			QString hoveredString = idx.data(m_hoverRole).toString();
+		if (v.canConvert!(QModelIndex)()) {
+			QModelIndex idx = cast(QModelIndex) v;
+			string hoveredString = idx.data(m_hoverRole).toString();
 			if (!hoveredString.isEmpty())
-				emit hovered(hoveredString);
+				hovered.emit(hoveredString);
 		}
 	}
 
--- a/demos/browser/networkaccessmanager.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/networkaccessmanager.d	Sun May 24 13:46:32 2009 +0000
@@ -80,20 +80,20 @@
 		loadSettings();
 
 		QNetworkDiskCache diskCache = new QNetworkDiskCache(this);
-		QString location = QDesktopServices.storageLocation(QDesktopServices.CacheLocation);
+		string location = QDesktopServices.storageLocation(QDesktopServices.CacheLocation);
 		diskCache.setCacheDirectory(location);
 		setCache(diskCache);
 	}
 
 private:
 
-    QString[] sslTrustedHostList;
+    string[] sslTrustedHostList;
 
 public:
 
 	void loadSettings()
 	{
-		QSettings settings;
+		auto settings = new QSettings;
 		settings.beginGroup(QLatin1String("proxy"));
 		QNetworkProxy proxy;
 		if (settings.value(QLatin1String("enabled"), false).toBool()) {
@@ -115,17 +115,16 @@
 	{
 		BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow();
 
-		QDialog dialog(mainWindow);
+		auto dialog = new QDialog(mainWindow);
 		dialog.setWindowFlags(Qt.Sheet);
 
-		Ui.PasswordDialog passwordDialog;
+		auto passwordDialog = new Ui.PasswordDialog;
 		passwordDialog.setupUi(&dialog);
 
-		passwordDialog.iconLabel.setText(QString());
+		passwordDialog.iconLabel.setText(null);
 		passwordDialog.iconLabel.setPixmap(mainWindow.style().standardIcon(QStyle.SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32));
 
-		QString introMessage = tr("<qt>Enter username and password for \"%1\" at %2</qt>");
-		introMessage = introMessage.arg(Qt.escape(reply.url().toString())).arg(Qt.escape(reply.url().toString()));
+		string introMessage = Format(tr("<qt>Enter username and password for \"{}\" at {}</qt>"), Qt.escape(reply.url().toString()), Qt.escape(reply.url().toString()));
 		passwordDialog.introLabel.setText(introMessage);
 		passwordDialog.introLabel.setWordWrap(true);
 
@@ -135,21 +134,20 @@
 		}
 	}
 
-	void proxyAuthenticationRequired(const QNetworkProxy proxy, QAuthenticator auth)
+	void proxyAuthenticationRequired(QNetworkProxy proxy, QAuthenticator auth)
 	{
 		BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow();
 
-		QDialog dialog(mainWindow);
+		auto dialog = new QDialog(mainWindow);
 		dialog.setWindowFlags(Qt.Sheet);
 
-		Ui.ProxyDialog proxyDialog;
+		auto proxyDialog = new Ui.ProxyDialog;
 		proxyDialog.setupUi(&dialog);
 
-		proxyDialog.iconLabel.setText(QString());
+		proxyDialog.iconLabel.setText(null);
 		proxyDialog.iconLabel.setPixmap(mainWindow.style().standardIcon(QStyle.SP_MessageBoxQuestion, 0, mainWindow).pixmap(32, 32));
 
-		QString introMessage = tr("<qt>Connect to proxy \"%1\" using:</qt>");
-		introMessage = introMessage.arg(Qt.escape(proxy.hostName()));
+		string introMessage = Format(tr("<qt>Connect to proxy \"{}\" using:</qt>"), Qt.escape(proxy.hostName()));
 		proxyDialog.introLabel.setText(introMessage);
 		proxyDialog.introLabel.setWordWrap(true);
 
@@ -164,17 +162,17 @@
 	void sslErrors(QNetworkReply reply, QSslError[] error)
 	{
 		// check if SSL certificate has been trusted already
-		QString replyHost = reply.url().host() ~ ":" ~ reply.url().port();
+		string replyHost = reply.url().host() ~ ":" ~ reply.url().port();
 		if(! sslTrustedHostList.contains(replyHost)) {
 			BrowserMainWindow mainWindow = BrowserApplication.instance().mainWindow();
 
-			QStringList errorStrings;
+			string[] errorStrings;
 			for (int i = 0; i < error.count(); ++i)
-				errorStrings += error.at(i).errorString();
-			QString errors = errorStrings.join(QLatin1String("\n"));
+				errorStrings += error[i].errorString();
+			string errors = errorStrings ~ QLatin1String("\n"));
 			int ret = QMessageBox.warning(mainWindow, QCoreApplication.applicationName(),
-				tr("SSL Errors:\n\n%1\n\n%2\n\n"
-				"Do you want to ignore these errors for this host?").arg(reply.url().toString()).arg(errors),
+				Format(tr("SSL Errors:\n\n{}\n\n{}\n\n"
+				"Do you want to ignore these errors for this host?"), reply.url().toString(), errors),
 				QMessageBox.Yes | QMessageBox.No, QMessageBox.No);
 			if (ret == QMessageBox.Yes) {
 				reply.ignoreSslErrors();
--- a/demos/browser/searchlineedit.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/searchlineedit.d	Sun May 24 13:46:32 2009 +0000
@@ -73,8 +73,7 @@
 	
 	void paintEvent(QPaintEvent event)
 	{
-		//Q_UNUSED(event);
-		QPainter painter(this);
+		auto painter = new QPainter(this);
 		int height = this.height();
 
 		painter.setRenderHint(QPainter.Antialiasing, true);
@@ -92,7 +91,7 @@
 		painter.drawLine(border, height - border, width() - border, border);
 	}
 
-	void textChanged(QString text)
+	void textChanged(string text)
 	{
 		setVisible(!text.isEmpty());
 	}
@@ -106,7 +105,7 @@
 {
 public:
 
-	SearchButton(QWidget parent = null)
+	this(QWidget parent = null)
 	{
 		super(parent);
 		m_menu = 0;
@@ -117,19 +116,18 @@
 
 	void paintEvent(QPaintEvent event)
 	{
-		//Q_UNUSED(event);
 		QPainterPath myPath;
 
 		int radius = (height() / 5) * 2;
-		QRect circle(height() / 3 - 1, height() / 4, radius, radius);
+		QRect circle = QRect(height() / 3 - 1, height() / 4, radius, radius);
 		myPath.addEllipse(circle);
 
 		myPath.arcMoveTo(circle, 300);
 		QPointF c = myPath.currentPosition();
 		int diff = height() / 7;
-		myPath.lineTo(qMin(width() - 2, (int)c.x() + diff), c.y() + diff);
+		myPath.lineTo(qMin(width() - 2, cast(int) c.x() + diff), c.y() + diff);
 
-		QPainter painter(this);
+		auto painter = new QPainter(this);
 		painter.setRenderHint(QPainter.Antialiasing, true);
 		painter.setPen(QPen(Qt.darkGray, 2));
 		painter.drawPath(myPath);
@@ -171,7 +169,7 @@
 
 class SearchLineEdit : public ExLineEdit
 {
-    mixin Signal!("textChanged", QString /*text*/);
+    mixin Signal!("textChanged", string /*text*/);
 
 public:
 	
@@ -193,12 +191,12 @@
 		setSizePolicy(QSizePolicy.Preferred, policy.verticalPolicy());
 	}
 
-	QString inactiveText()
+	string inactiveText()
 	{
 		return m_inactiveText;
 	}
 
-	void setInactiveText(QString text)
+	void setInactiveText(string text)
 	{
 		m_inactiveText = text;
 	}
@@ -208,7 +206,7 @@
 		if (!m_searchButton.m_menu) {
 			m_searchButton.m_menu = new QMenu(m_searchButton);
 			if (isVisible())
-				(const_cast<SearchLineEdit>(this)).updateGeometries();
+				(cast(SearchLineEdit) this).updateGeometries();
 		}
 		return m_searchButton.m_menu;
 	}
@@ -238,8 +236,8 @@
 			QRect r = style().subElementRect(QStyle.SE_LineEditContents, &panel, this);
 			QFontMetrics fm = fontMetrics();
 			int horizontalMargin = lineEdit().x();
-			QRect lineRect(horizontalMargin + r.x(), r.y() + (r.height() - fm.height() + 1) / 2, r.width() - 2 * horizontalMargin, fm.height());
-			QPainter painter(this);
+			QRect lineRect = QRect(horizontalMargin + r.x(), r.y() + (r.height() - fm.height() + 1) / 2, r.width() - 2 * horizontalMargin, fm.height());
+			QPainter painter = new QPainter(this);
 			painter.setPen(palette().brush(QPalette.Disabled, QPalette.Text).color());
 			painter.drawText(lineRect, Qt.AlignLeft|Qt.AlignVCenter, m_inactiveText);
 		} else {
@@ -259,5 +257,5 @@
 	}
 
 	SearchButton m_searchButton;
-	QString m_inactiveText;
+	string m_inactiveText;
 }
--- a/demos/browser/settings.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/settings.d	Sun May 24 13:46:32 2009 +0000
@@ -67,7 +67,7 @@
 		setupUi(this);
 		exceptionsButton.clicked.connect(&this.showExceptions);
 		setHomeToCurrentPageButton.clicked.connect(&this.setHomeToCurrentPage);
-		cookiesButton.clicked.connect(&this.showCookies()));
+		cookiesButton.clicked.connect(&this.showCookies());
 		standardFontButton.clicked.connect(this.chooseFont);
 		fixedFontButton.clicked.connect(&this.chooseFixedFont);
 
@@ -75,7 +75,7 @@
 		loadFromSettings();
 	}
 	
-	void accept();
+	void accept()
 	{
 		saveToSettings();
 		QDialog.accept();
@@ -86,15 +86,15 @@
 	void loadDefaults()
 	{
 		QWebSettings defaultSettings = QWebSettings.globalSettings();
-		QString standardFontFamily = defaultSettings.fontFamily(QWebSettings.StandardFont);
+		string standardFontFamily = defaultSettings.fontFamily(QWebSettings.StandardFont);
 		int standardFontSize = defaultSettings.fontSize(QWebSettings.DefaultFontSize);
 		standardFont = QFont(standardFontFamily, standardFontSize);
-		standardLabel.setText(QString(QLatin1String("%1 %2")).arg(standardFont.family()).arg(standardFont.pointSize()));
+		standardLabel.setText(Format(QLatin1String("{} {}"), standardFont.family(), standardFont.pointSize()));
 
-		QString fixedFontFamily = defaultSettings.fontFamily(QWebSettings.FixedFont);
+		string fixedFontFamily = defaultSettings.fontFamily(QWebSettings.FixedFont);
 		int fixedFontSize = defaultSettings.fontSize(QWebSettings.DefaultFixedFontSize);
 		fixedFont = QFont(fixedFontFamily, fixedFontSize);
-		fixedLabel.setText(QString(QLatin1String("%1 %2")).arg(fixedFont.family()).arg(fixedFont.pointSize()));
+		fixedLabel.setText(Format(QLatin1String("{} {}"), fixedFont.family(), fixedFont.pointSize()));
 
 		downloadsLocation.setText(QDesktopServices.storageLocation(QDesktopServices.DesktopLocation));
 
@@ -104,9 +104,9 @@
 
 	void loadFromSettings()
 	{
-		QSettings settings;
+		auto settings = new QSettings;
 		settings.beginGroup(QLatin1String("MainWindow"));
-		QString defaultHome = QLatin1String("http://qtsoftware.com");
+		string defaultHome = QLatin1String("http://qtsoftware.com");
 		homeLineEdit.setText(settings.value(QLatin1String("home"), defaultHome).toString());
 		settings.endGroup();
 
@@ -127,7 +127,7 @@
 		settings.endGroup();
 
 		settings.beginGroup(QLatin1String("downloadmanager"));
-		QString downloadDirectory = settings.value(QLatin1String("downloadDirectory"), downloadsLocation.text()).toString();
+		string downloadDirectory = settings.value(QLatin1String("downloadDirectory"), downloadsLocation.text()).toString();
 		downloadsLocation.setText(downloadDirectory);
 		settings.endGroup();
 
@@ -141,8 +141,8 @@
 		fixedFont = qVariantValue<QFont>(settings.value(QLatin1String("fixedFont"), fixedFont));
 		standardFont = qVariantValue<QFont>(settings.value(QLatin1String("standardFont"), standardFont));
 
-		standardLabel.setText(QString(QLatin1String("%1 %2")).arg(standardFont.family()).arg(standardFont.pointSize()));
-		fixedLabel.setText(QString(QLatin1String("%1 %2")).arg(fixedFont.family()).arg(fixedFont.pointSize()));
+		standardLabel.setText(Format(QLatin1String("{} {}"), standardFont.family(), standardFont.pointSize()));
+		fixedLabel.setText(Format(QLatin1String("{} {}"), fixedFont.family(), fixedFont.pointSize()));
 
 		enableJavascript.setChecked(settings.value(QLatin1String("enableJavascript"), enableJavascript.isChecked()).toBool());
 		enablePlugins.setChecked(settings.value(QLatin1String("enablePlugins"), enablePlugins.isChecked()).toBool());
@@ -228,7 +228,7 @@
 		settings.setValue(QLatin1String("standardFont"), standardFont);
 		settings.setValue(QLatin1String("enableJavascript"), enableJavascript.isChecked());
 		settings.setValue(QLatin1String("enablePlugins"), enablePlugins.isChecked());
-		QString userStyleSheetString = userStyleSheet.text();
+		string userStyleSheetString = userStyleSheet.text();
 		if (QFile.exists(userStyleSheetString))
 			settings.setValue(QLatin1String("userStyleSheet"), QUrl.fromLocalFile(userStyleSheetString));
 		else
@@ -316,7 +316,7 @@
 		QFont font = QFontDialog.getFont(&ok, standardFont, this);
 		if ( ok ) {
 			standardFont = font;
-			standardLabel.setText(QString(QLatin1String("%1 %2")).arg(font.family()).arg(font.pointSize()));
+			standardLabel.setText(Format(QLatin1String("{} {}"), font.family(), font.pointSize()));
 		}
 	}
 
@@ -326,7 +326,7 @@
 		QFont font = QFontDialog.getFont(&ok, fixedFont, this);
 		if ( ok ) {
 			fixedFont = font;
-			fixedLabel.setText(QString(QLatin1String("%1 %2")).arg(font.family()).arg(font.pointSize()));
+			fixedLabel.setText(Format(QLatin1String("{} {}"), font.family(), font.pointSize()));
 		}
 	}
 
--- a/demos/browser/squeezelabel.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/squeezelabel.d	Sun May 24 13:46:32 2009 +0000
@@ -59,8 +59,8 @@
 	{
 		QFontMetrics fm = fontMetrics();
 		if (fm.width(text()) > contentsRect().width()) {
-			QString elided = fm.elidedText(text(), Qt.ElideMiddle, width());
-			QString oldText = text();
+			string elided = fm.elidedText(text(), Qt.ElideMiddle, width());
+			string oldText = text();
 			setText(elided);
 			QLabel.paintEvent(event);
 			setText(oldText);
--- a/demos/browser/tabwidget.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/tabwidget.d	Sun May 24 13:46:32 2009 +0000
@@ -83,13 +83,13 @@
 		setAcceptDrops(true);
 		this.customContextMenuRequested.connect(&this.contextMenuRequested);
 
-		QString alt = QLatin1String("Alt+%1");
+		string alt = QLatin1String("Alt+%1");
 		for (int i = 1; i <= 10; ++i) {
 			int key = i;
 			if (key == 10)
 				key = 0;
 			QShortcut shortCut = new QShortcut(alt.arg(key), this);
-			m_tabShortcuts.append(shortCut);
+			m_tabShortcuts ~= shortCut;
 			shortCut.activated.connect(&this.selectTabAction);
 		}
 		setTabsClosable(true);
@@ -115,10 +115,10 @@
 			if ((event.pos() - m_dragStartPos).manhattanLength() > QApplication.startDragDistance() && diffX < 3 && diffX > -3 && diffY < -10) {
 				QDrag drag = new QDrag(this);
 				QMimeData mimeData = new QMimeData;
-				QList<QUrl> urls;
+				QUrl[] urls;
 				int index = tabAt(event.pos());
 				QUrl url = tabData(index).toUrl();
-				urls.append(url);
+				urls ~= url;
 				mimeData.setUrls(urls);
 				mimeData.setText(tabText(index));
 				mimeData.setData(QLatin1String("action"), "tab-reordering");
@@ -133,7 +133,7 @@
 
 	void selectTabAction()
 	{
-		if (QShortcut shortCut = qobject_cast<QShortcut*>(sender())) {
+		if (QShortcut shortCut = cast(QShortcut) signalSender()) {
 			int index = m_tabShortcuts.indexOf(shortCut);
 			if (index == 0)
 				index = 10;
@@ -143,33 +143,33 @@
 
 	void cloneTab()
 	{
-		if (QAction action = qobject_cast<QAction>(sender())) {
+		if (QAction action = cast(QAction) signalSender()) {
 			int index = action.data().toInt();
-			emit cloneTab(index);
+			cloneTab.emit(index);
 		}
 	}
 
 	void closeTab()
 	{
-		if (QAction action = qobject_cast<QAction>(sender())) {
+		if (QAction action = cast(QAction) signalSender()) {
 			int index = action.data().toInt();
-			emit closeTab(index);
+			closeTab.emit(index);
 		}
 	}
 
 	void closeOtherTabs()
 	{
-		if (QAction action = qobject_cast<QAction>(sender())) {
+		if (QAction action = cast(QAction) signalSender()) {
 			int index = action.data().toInt();
-			emit closeOtherTabs(index);
+			closeOtherTabs.emit(index);
 		}
 	}
 
 	void reloadTab()
 	{
-		if (QAction action = qobject_cast<QAction>(sender())) {
+		if (QAction action = cast(QAction) signalSender()) {
 			int index = action.data().toInt();
-			emit reloadTab(index);
+			reloadTab.emit(index);
 		}
 	}
 
@@ -278,7 +278,7 @@
 
 	void childChanged()
 	{
-		if (QAction source = qobject_cast<QAction>(sender())) {
+		if (QAction source = cast(QAction) signalSender()) {
 			if (m_root && m_currentParent && source.parent() == m_currentParent) {
 					m_root.setChecked(source.isChecked());
 					m_root.setEnabled(source.isEnabled());
@@ -317,14 +317,14 @@
 class TabWidget : public QTabWidget
 {
 	// tab widget signals
-	mixin Singal!("loadPage", QString /*url*/);
+	mixin Singal!("loadPage", string /*url*/);
 	mixin Singal!("tabsChanged");
 	mixin Singal!("lastTabClosed");
 
 	// current tab signals
-	mixin Singal!("setCurrentTitle", QString /*url*/);
-	mixin Singal!("showStatusBarMessage", QString /*message*/);
-	mixin Singal!("linkHovered", QString /*link*/);
+	mixin Singal!("setCurrentTitle", string /*url*/);
+	mixin Singal!("showStatusBarMessage", string /*message*/);
+	mixin Singal!("linkHovered", string /*link*/);
 	mixin Singal!("loadProgress", int /*progress*/);
 	mixin Singal!("geometryChangeRequested", QRect /*geometry*/);
 	mixin Singal!("menuBarVisibilityChangeRequested", bool /*visible*/);
@@ -336,7 +336,7 @@
 
 	this(QWidget parent = null)
 	{
-		QTabWidget(parent)
+		super(parent);
 		m_recentlyClosedTabsAction = 0;
 		m_newTabAction = 0;
 		m_closeTabAction = 0;
@@ -350,12 +350,12 @@
 		setElideMode(Qt.ElideRight);
 
 		m_tabBar.newTab.connect(&this.newTab);
-		m_tabBar.closeTab.connect(&this.closeTab(int)));
-		m_tabBar.cloneTab.connect(&this.cloneTab(int)));
-		m_tabBar.closeOtherTabs.connect(&this.closeOtherTabs(int)));
-		m_tabBar.reloadTab.connect(&this.reloadTab(int)));
-		m_tabBar.reloadAllTabs.connect(&this.reloadAllTabs()));
-		m_tabBar.tabMoved.connect(&this.moveTab(int, int)));
+		m_tabBar.closeTab.connect(&this.closeTab);
+		m_tabBar.cloneTab.connect(&this.cloneTab);
+		m_tabBar.closeOtherTabs.connect(&this.closeOtherTabs);
+		m_tabBar.reloadTab.connect(&this.reloadTab);
+		m_tabBar.reloadAllTabs.connect(&this.reloadAllTabs);
+		m_tabBar.tabMoved.connect(&this.moveTab);
 		setTabBar(m_tabBar);
 		setDocumentMode(true);
 
@@ -371,20 +371,20 @@
 		m_closeTabAction.triggered.connect(&this.closeTab);
 
 		m_nextTabAction = new QAction(tr("Show Next Tab"), this);
-		QList<QKeySequence> shortcuts;
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_BraceRight));
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_PageDown));
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_BracketRight));
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_Less));
+		QKeySequence[] shortcuts;
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_BraceRight);
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_PageDown);
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_BracketRight);
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_Less);
 		m_nextTabAction.setShortcuts(shortcuts);
 		m_nextTabAction.triggered.connect(&this.nextTab);
 
 		m_previousTabAction = new QAction(tr("Show Previous Tab"), this);
 		shortcuts.clear();
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_BraceLeft));
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_PageUp));
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_BracketLeft));
-		shortcuts.append(QKeySequence(Qt.CTRL | Qt.Key_Greater));
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_BraceLeft);
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_PageUp);
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_BracketLeft);
+		shortcuts ~= QKeySequence(Qt.CTRL | Qt.Key_Greater);
 		m_previousTabAction.setShortcuts(shortcuts);
 		m_previousTabAction.triggered.connect(&this.previousTab);
 
@@ -403,7 +403,7 @@
 	void clear()
 	{
 		// clear the recently closed tabs
-		m_recentlyClosedTabs.clear();
+		m_recentlyClosedTabs.length = 0;
 		// clear the line edit history
 		for (int i = 0; i < m_lineEdits.count(); ++i) {
 			QLineEdit qLineEdit = lineEdit(i);
@@ -466,7 +466,7 @@
 		} else {
 			// optimization to delay creating the first webview
 			if (count() == 1) {
-				TabWidget that = const_cast<TabWidget>(this);
+				TabWidget that = cast(TabWidget) this;
 				that.setUpdatesEnabled(false);
 				that.newTab();
 				that.closeTab(0);
@@ -479,7 +479,7 @@
 
 	QLineEdit lineEdit(int index)
 	{
-		UrlLineEdit urlLineEdit = qobject_cast<UrlLineEdit>(m_lineEdits.widget(index));
+		UrlLineEdit urlLineEdit = cast(UrlLineEdit) m_lineEdits.widget(index);
 		if (urlLineEdit)
 			return urlLineEdit.lineEdit();
 		return 0;
@@ -492,23 +492,23 @@
 	}
 
     
-static const qint32 TabWidgetMagic = 0xaa;
+static const int TabWidgetMagic = 0xaa;
 
 	QByteArray saveState()
 	{
-		int version = 1;
+		int version_ = 1;
 		QByteArray data;
 		QDataStream stream(data, QIODevice.WriteOnly);
 
-		stream << qint32(TabWidgetMagic);
-		stream << qint32(version);
+		stream << cast(int) TabWidgetMagic;
+		stream << cast(int) version_;
 
-		QStringList tabs;
+		string[] tabs;
 		for (int i = 0; i < count(); ++i) {
-			if (WebView tab = cast(WebView) widget(i))) {
+			if (WebView tab = cast(WebView) widget(i)) {
 				tabs.append(tab.url().toString());
 			} else {
-				tabs.append(QString.null);
+				tabs.append(null); //QString.null);
 			}
 		}
 		stream << tabs;
@@ -524,20 +524,20 @@
 		if (stream.atEnd())
 			return false;
 
-		qint32 marker;
-		qint32 v;
+		int marker;
+		int v;
 		stream >> marker;
 		stream >> v;
 		if (marker != TabWidgetMagic || v != version_)
 			return false;
 
-		QStringList openTabs;
+		string[] openTabs;
 		stream >> openTabs;
 
-		for (int i = 0; i < openTabs.count(); ++i) {
+		for (int i = 0; i < openTabs.length; ++i) {
 			if (i != 0)
 				newTab();
-			loadPage(openTabs.at(i));
+			loadPage(openTabs[i]);
 		}
 
 		int currentTab;
@@ -575,7 +575,7 @@
 		if (event.button() == Qt.MidButton && !childAt(event.pos())
 		// Remove the line below when QTabWidget does not have a one pixel frame
 		&& event.pos().y() < (tabBar().y() + tabBar().height())) {
-			QUrl url(QApplication.clipboard().text(QClipboard.Selection));
+			auto url = new QUrl(QApplication.clipboard().text(QClipboard.Selection));
 			if (!url.isEmpty() && url.isValid() && !url.scheme().isEmpty()) {
 				WebView webView = newTab();
 				webView.setUrl(url);
@@ -605,7 +605,7 @@
 			m_lineEditCompleter = new QCompleter(completionModel, this);
 			// Should this be in Qt by default?
 			QAbstractItemView popup = m_lineEditCompleter.popup();
-			QListView listView = qobject_cast<QListView*>(popup);
+			QListView listView = cast(QListView) popup;
 			if (listView)
 				listView.setUniformItemSizes(true);
 		}
@@ -653,7 +653,7 @@
 
 		if (count() == 1)
 			currentChanged(currentIndex());
-		emit tabsChanged();
+		tabsChanged.emit();
 		return webView;
 	}
 
@@ -694,8 +694,8 @@
 			hasFocus = tab.hasFocus();
 
 			m_recentlyClosedTabsAction.setEnabled(true);
-			m_recentlyClosedTabs.prepend(tab.url());
-			if (m_recentlyClosedTabs.size() >= TabWidget.m_recentlyClosedTabsSize)
+			m_recentlyClosedTabs = [tab.url()] ~ m_recentlyClosedTabs;
+			if (m_recentlyClosedTabs.length >= TabWidget.m_recentlyClosedTabsSize)
 				m_recentlyClosedTabs.removeLast();
 		}
 		QWidget lineEdit = m_lineEdits.widget(index);
@@ -704,11 +704,11 @@
 		QWidget webView = widget(index);
 		removeTab(index);
 		webView.deleteLater();
-		emit tabsChanged();
+		tabsChanged.emit();
 		if (hasFocus && count() > 0)
 			currentWebView().setFocus();
 		if (count() == 0)
-			emit lastTabClosed();
+			lastTabClosed.emit();
 	}
 
 	void closeOtherTabs(int index)
@@ -785,10 +785,10 @@
 			WebActionMapper mapper = m_actions[i];
 			mapper.updateCurrent(webView.page());
 		}
-		emit setCurrentTitle(webView.title());
+		setCurrentTitle.emit(webView.title());
 		m_lineEdits.setCurrentIndex(index);
-		emit loadProgress(webView.progress());
-		emit showStatusBarMessage(webView.lastStatusBarText());
+		loadProgress.emit(webView.progress());
+		showStatusBarMessage.emit(webView.lastStatusBarText());
 		if (webView.url().isEmpty())
 			m_lineEdits.currentWidget().setFocus();
 		else
@@ -798,12 +798,12 @@
 	void aboutToShowRecentTabsMenu()
 	{
 		m_recentlyClosedTabsMenu.clear();
-		for (int i = 0; i < m_recentlyClosedTabs.count(); ++i) {
+		for (int i = 0; i < m_recentlyClosedTabs.length; ++i) {
 			QAction action = new QAction(m_recentlyClosedTabsMenu);
-			action.setData(m_recentlyClosedTabs.at(i));
-			QIcon icon = BrowserApplication.instance().icon(m_recentlyClosedTabs.at(i));
+			action.setData(m_recentlyClosedTabs[i]);
+			QIcon icon = BrowserApplication.instance().icon(m_recentlyClosedTabs[i]);
 			action.setIcon(icon);
-			action.setText(m_recentlyClosedTabs.at(i).toString());
+			action.setText(m_recentlyClosedTabs[i].toString());
 			m_recentlyClosedTabsMenu.addAction(action);
 		}
 	}
@@ -816,17 +816,17 @@
 
 	void webViewLoadStarted()
 	{
-		WebView webView = cast(WebView) sender();
+		WebView webView = cast(WebView) signalSender();
 		int index = webViewIndex(webView);
 		if (-1 != index) {
-			QIcon icon(QLatin1String(":loading.gif"));
+			auto icon = new QIcon(QLatin1String(":loading.gif"));
 			setTabIcon(index, icon);
 		}
 	}
 
 	void webViewIconChanged()
 	{
-		WebView webView = cast(WebView) sender();
+		WebView webView = cast(WebView) signalSender();
 		int index = webViewIndex(webView);
 		if (-1 != index) {
 			QIcon icon = BrowserApplication.instance().icon(webView.url());
@@ -834,32 +834,32 @@
 		}
 	}
 
-	void webViewTitleChanged(QString title)
+	void webViewTitleChanged(string title)
 	{
-		WebView webView = cast(WebView) sender();
+		WebView webView = cast(WebView) signalSender();
 		int index = webViewIndex(webView);
 		if (-1 != index) {
 			setTabText(index, title);
 		}
 		if (currentIndex() == index)
-			emit setCurrentTitle(title);
+			setCurrentTitle.emit(title);
 		BrowserApplication.historyManager().updateHistoryItem(webView.url(), title);
 	}
 
 	void webViewUrlChanged(QUrl url)
 	{
-		WebView webView = cast(WebView) sender();
+		WebView webView = cast(WebView) signalSender();
 		int index = webViewIndex(webView);
 		if (-1 != index) {
 			m_tabBar.setTabData(index, url);
 		}
-		emit tabsChanged();
+		tabsChanged.emit();
 	}
 
 	void lineEditReturnPressed()
 	{
-		if (QLineEdit lineEdit = cast(QLineEdit) sender()) {
-			emit loadPage(lineEdit.text());
+		if (QLineEdit lineEdit = cast(QLineEdit) signalSender()) {
+			loadPage.emit(lineEdit.text());
 			if (m_lineEdits.currentWidget() == lineEdit)
 				currentWebView().setFocus();
 		}
@@ -867,7 +867,7 @@
 
 	void windowCloseRequested()
 	{
-		WebPage webPage = cast(WebPage) sender();
+		WebPage webPage = cast(WebPage) signalSender();
 		WebView webView = cast(WebView) webPage.view();
 		int index = webViewIndex(webView);
 		if (index >= 0) {
--- a/demos/browser/toolbarsearch.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/toolbarsearch.d	Sun May 24 13:46:32 2009 +0000
@@ -56,7 +56,7 @@
 
 class ToolbarSearch : public SearchLineEdit
 {
-	mixin Signal!("search", QUrl /*url*/)
+	mixin Signal!("search", QUrl /*url*/);
 
 public:
 
@@ -66,7 +66,7 @@
 	*/
 	this(QWidget parent = null)
 	{
-		super(parent)
+		super(parent);
 		m_autosaver = new AutoSaver(this);
 		m_maxSavedSearches = 10;
 		m_stringListModel = new QStringListModel(this);
@@ -76,7 +76,7 @@
 		m.triggered.connect(&this.triggeredMenuAction);
 
 		QCompleter completer = new QCompleter(m_stringListModel, this);
-		completer.setCompletionMode(QCompleter::InlineCompletion);
+		completer.setCompletionMode(QCompleter.InlineCompletion);
 		lineEdit().setCompleter(completer);
 
 		lineEdit().returnPressed.connect(&searchNow);
@@ -93,32 +93,32 @@
 
 	void clear()
 	{
-		m_stringListModel.setStringList(QStringList());
+		m_stringListModel.setStringList(string[]());
 		m_autosaver.changeOccurred();
 	}
 
 	void searchNow()
 	{
-		QString searchText = lineEdit().text();
-		QStringList newList = m_stringListModel.stringList();
+		string searchText = lineEdit().text();
+		string[] newList = m_stringListModel.stringList();
 		if (newList.contains(searchText))
 			newList.removeAt(newList.indexOf(searchText));
 		newList.prepend(searchText);
 		if (newList.size() >= m_maxSavedSearches)
 			newList.removeLast();
 
-		QWebSettings globalSettings = QWebSettings::globalSettings();
-		if (!globalSettings.testAttribute(QWebSettings::PrivateBrowsingEnabled)) {
+		QWebSettings globalSettings = QWebSettings.globalSettings();
+		if (!globalSettings.testAttribute(QWebSettings.PrivateBrowsingEnabled)) {
 			m_stringListModel.setStringList(newList);
 			m_autosaver.changeOccurred();
 		}
 
-		QUrl url(QLatin1String("http://www.google.com/search"));
+		auto url = new QUrl(QLatin1String("http://www.google.com/search"));
 		url.addQueryItem(QLatin1String("q"), searchText);
 		url.addQueryItem(QLatin1String("ie"), QLatin1String("UTF-8"));
 		url.addQueryItem(QLatin1String("oe"), QLatin1String("UTF-8"));
 		url.addQueryItem(QLatin1String("client"), QLatin1String("qtdemobrowser"));
-		emit search(url);
+		search.emit(url);
 	}
 
 private:
@@ -138,7 +138,7 @@
 		lineEdit().selectAll();
 		QMenu m = menu();
 		m.clear();
-		QStringList list = m_stringListModel.stringList();
+		string[] list = m_stringListModel.stringList();
 		if (list.isEmpty()) {
 			m.addAction(tr("No Recent Searches"));
 			return;
@@ -146,8 +146,8 @@
 
 		QAction recent = m.addAction(tr("Recent Searches"));
 		recent.setEnabled(false);
-		for (int i = 0; i < list.count(); ++i) {
-			QString text = list.at(i);
+		for (int i = 0; i < list.length; ++i) {
+			string text = list[i];
 			m.addAction(text).setData(text);
 		}
 		m.addSeparator();
@@ -157,8 +157,8 @@
 	void triggeredMenuAction(QAction action)
 	{
 		QVariant v = action.data();
-		if (v.canConvert<QString>()) {
-			QString text = v.toString();
+		if (v.canConvert!(string)()) {
+			string text = v.toString();
 			lineEdit().setText(text);
 			searchNow();
 		}
@@ -170,7 +170,7 @@
 	{
 		QSettings settings;
 		settings.beginGroup(QLatin1String("toolbarsearch"));
-		QStringList list = settings.value(QLatin1String("recentSearches")).toStringList();
+		string[] list = settings.value(QLatin1String("recentSearches")).toStringList();
 		m_maxSavedSearches = settings.value(QLatin1String("maximumSaved"), m_maxSavedSearches).toInt();
 		m_stringListModel.setStringList(list);
 		settings.endGroup();
--- a/demos/browser/urllineedit.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/urllineedit.d	Sun May 24 13:46:32 2009 +0000
@@ -254,8 +254,8 @@
 			QDrag drag = new QDrag(this);
 			QMimeData mimeData = new QMimeData;
 			mimeData.setText(QString.fromUtf8(m_webView.url().toEncoded()));
-			QList<QUrl> urls;
-			urls.append(m_webView.url());
+			QUrl[] urls;
+			urls ~= m_webView.url();
 			mimeData.setUrls(urls);
 			drag.setMimeData(mimeData);
 			drag.exec();
--- a/demos/browser/webview.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/webview.d	Sun May 24 13:46:32 2009 +0000
@@ -80,7 +80,7 @@
 	{
 		QObject w = this.parent();
 		while (w) {
-			if (BrowserMainWindow mw = qobject_cast<BrowserMainWindow>(w))
+			if (BrowserMainWindow mw = cast(BrowserMainWindow) w)
 				return mw;
 			w = w.parent();
 		}
@@ -117,14 +117,13 @@
 		}
 		if (frame == mainFrame()) {
 			m_loadingUrl = request.url();
-			emit loadingUrl(m_loadingUrl);
+			loadingUrl.emit(m_loadingUrl);
 		}
 		return QWebPage.acceptNavigationRequest(frame, request, type);
 	}
 
 	QWebPage createWindow(QWebPage.WebWindowType type)
 	{
-		//Q_UNUSED(type);
 		if (m_keyboardModifiers & Qt.ControlModifier || m_pressedButtons == Qt.MidButton)
 			m_openInNewTab = true;
 		if (m_openInNewTab) {
@@ -138,12 +137,9 @@
 
 	version(QT_NO_UITOOLS) {} else
 	{
-		QObject createPlugin(QString classId, QUrl url, QStringList paramNames, QStringList paramValues);
+		QObject createPlugin(string classId, QUrl url, string[] paramNames, string[] paramValues);
 		{
-			//Q_UNUSED(url);
-			//Q_UNUSED(paramNames);
-			//Q_UNUSED(paramValues);
-			QUiLoader loader;
+			auto loader = new QUiLoader;
 			return loader.createWidget(classId, view());
 		}
 	}
@@ -157,14 +153,14 @@
 			return;
 		}
 
-		QFile file(QLatin1String(":/notfound.html"));
+		auto file = new QFile(QLatin1String(":/notfound.html"));
 		bool isOpened = file.open(QIODevice.ReadOnly);
 		assert(isOpened);
-		QString title = tr("Error loading page: %1").arg(reply.url().toString());
-		QString html = QString(QLatin1String(file.readAll()))
-			.arg(title)
-			.arg(reply.errorString())
-			.arg(reply.url().toString());
+		string title = Format(tr("Error loading page: {}"), reply.url().toString());
+		string html = Format(QLatin1String(file.readAll()),
+			title,
+			reply.errorString(),
+			reply.url().toString());
 
 		QBuffer imageBuffer;
 		imageBuffer.open(QBuffer.ReadWrite);
@@ -172,7 +168,7 @@
 		QPixmap pixmap = icon.pixmap(QSize(32,32));
 		if (pixmap.save(&imageBuffer, "PNG")) {
 			html.replace(QLatin1String("IMAGE_BINARY_DATA_HERE"),
-			QString(QLatin1String(imageBuffer.buffer().toBase64())));
+			QLatin1String(imageBuffer.buffer().toBase64()));
 		}
 
 		QWebFrame[] frames;
@@ -235,7 +231,7 @@
 		return m_initialUrl;
 	}
 
-	QString lastStatusBarText()
+	string lastStatusBarText()
 	{
 		return m_statusBarText;
 	}
@@ -310,9 +306,9 @@
 		m_progress = 0;
 	}
 
-	void setStatusBarText(QString string)
+	void setStatusBarText(string str)
 	{
-		m_statusBarText = string;
+		m_statusBarText = str;
 	}
 
 	void downloadRequested(QNetworkRequest request)
@@ -328,7 +324,7 @@
 	
 private:
 
-	QString m_statusBarText;
+	string m_statusBarText;
 	QUrl m_initialUrl;
 	int m_progress;
 	WebPage m_page;
--- a/demos/browser/xbel.d	Sun May 24 11:24:57 2009 +0000
+++ b/demos/browser/xbel.d	Sun May 24 13:46:32 2009 +0000
@@ -80,10 +80,10 @@
 	bool operator==(BookmarkNode other)
 	{
 		if (url != other.url || title != other.title || desc != other.desc || expanded != other.expanded
-			|| m_type != other.m_type || m_children.count() != other.m_children.count())
+			|| m_type != other.m_type || m_children.length != other.m_children.length)
 			return false;
 
-		for (int i = 0; i < m_children.count(); ++i)
+		for (int i = 0; i < m_children.length; ++i)
 			if (!((*(m_children[i])) == (*(other.m_children[i]))))
 				return false;
 		return true;
@@ -104,8 +104,7 @@
 		return m_children;
 	}
 
-
-	BookmarkNode parent() const
+	BookmarkNode parent()
 	{
 		return m_parent;
 	}
@@ -117,7 +116,7 @@
 			child.m_parent.remove(child);
 		child.m_parent = this;
 		if (-1 == offset)
-			offset = m_children.size();
+			offset = m_children.length;
 		m_children.insert(offset, child);
 	}
 
@@ -127,9 +126,9 @@
 		m_children.removeAll(child);
 	}
 
-	QString url;
-	QString title;
-	QString desc;
+	string url;
+	string title;
+	string desc;
 	bool expanded;
 
 private:
@@ -147,7 +146,7 @@
 	{
 	}
 
-	BookmarkNode read(QString fileName)
+	BookmarkNode read(string fileName)
 	{
 		auto file = new QFile(fileName);
 		if (!file.exists()) {
@@ -164,7 +163,7 @@
 		while (!atEnd()) {
 			readNext();
 			if (isStartElement()) {
-				QString version_ = attributes().value(QLatin1String("version")).toString();
+				string version_ = attributes().value(QLatin1String("version")).toString();
 				if (name() == QLatin1String("xbel") && (version_.isEmpty() || version_ == QLatin1String("1.0"))) {
 					readXBEL(root);
 				} else {
@@ -299,9 +298,9 @@
 		setAutoFormatting(true);
 	}
 	
-	bool write(QString fileName, BookmarkNode root)
+	bool write(string fileName, BookmarkNode root)
 	{
-		QFile file(fileName);
+		auto file = new QFile(fileName);
 		if (!root || !file.open(QFile.WriteOnly))
 			return false;
 		return write(&file, root);
@@ -316,8 +315,8 @@
 		writeStartElement(QLatin1String("xbel"));
 		writeAttribute(QLatin1String("version"), QLatin1String("1.0"));
 		if (root.type() == BookmarkNode.Root) {
-			for (int i = 0; i < root.children().count(); ++i)
-				writeItem(root.children().at(i));
+			for (int i = 0; i < root.children().length; ++i)
+				writeItem(root.children()[i]);
 		} else {
 			writeItem(root);
 		}
@@ -336,7 +335,7 @@
 				writeAttribute(QLatin1String("folded"), parent.expanded ? QLatin1String("no") : QLatin1String("yes"));
 				writeTextElement(QLatin1String("title"), parent.title);
 				for (int i = 0; i < parent.children().count(); ++i)
-					writeItem(parent.children().at(i));
+					writeItem(parent.children()[i]);
 				writeEndElement();
 				break;
 			case BookmarkNode.Bookmark: