Bladeren bron

Basic style sheet loading

Marko Pintera 13 jaren geleden
bovenliggende
commit
7cb7dc1736

+ 6 - 0
CamelotEditor/Include/CmEditorApplication.h

@@ -33,11 +33,17 @@ namespace CamelotEditor
 	private:
 		static const QString PROJECT_PREFS_FILE_NAME;
 		static const QString EDITOR_PREFS_FILE_NAME;
+		static const QString STYLE_SHEETS_DIRECTORY_NAME;
 
 		PImpl* p;
 
 		QString getProjectPrefsPath(const QString& absProjPath) const;
 		QString getEditorPrefsPath() const;
+		QString getStyleSheetsDirectoryPath() const;
+
+		void startUpQt();
+		void shutDownQt();
+		void loadStyleSheets();
 	};
 
 	EditorApplication& gEditorApp();

+ 1 - 0
CamelotEditor/Include/CmQtEditor.h

@@ -32,6 +32,7 @@ namespace CamelotEditor
 
 		void setupUi();
 		void retranslateUi();
+		void setObjectNames();
 
 		QMenu* findOrCreateMenu(const QString& name);
 

+ 2 - 1
CamelotEditor/Include/CmQtEditorWindow.h

@@ -32,7 +32,7 @@ namespace CamelotEditor
 		bool isDocked() { return mIsDocked; }
 
 	protected:
-		QWidget* mContent;
+		QWidget* mContentWidget;
 
 		QSizePolicy	sizePolicy() const;
 
@@ -49,6 +49,7 @@ namespace CamelotEditor
 		void setupUi(QString title);
 		void setupSignals();
 		void retranslateUi(QString title);
+		void setObjectNames();
 
 		void mousePressEvent(QMouseEvent* event);
 		void mouseReleaseEvent(QMouseEvent* event);

+ 1 - 0
CamelotEditor/Include/CmQtNewProject.h

@@ -34,6 +34,7 @@ namespace CamelotEditor
 		void setupUi();
 		void setupSignals();
 		void retranslateUi();
+		void setObjectNames();
 
 		private Q_SLOTS:
 		void createProject();

+ 3 - 2
CamelotEditor/Include/CmQtProjectSelection.h

@@ -21,14 +21,15 @@ namespace CamelotEditor
 		boost::signal<void(const QString&)> onProjectSelected;
 
 	private:
-		QListWidget* mListWidget;
+		QListWidget* mListRecentProjects;
 		QPushButton* mBtnOpen;
 		QPushButton* mBtnNew;
-		QPushButton* mBtnBrowse;
+		QPushButton* mBtnOpenOther;
 
 		void setupUi();
 		void setupSignals();
 		void retranslateUi();
+		void setObjectNames();
 
 		void openProject(const QString& path);
 		void addRecentlyUsedProject(const QString& path);

+ 47 - 5
CamelotEditor/Source/CmEditorApplication.cpp

@@ -9,6 +9,7 @@
 #include "CmHierarchyWindowFactory.h"
 #include "CmFileSystem.h"
 #include "CmException.h"
+#include "CmDataStream.h"
 #include <QtWidgets/QApplication>
 #include <QtCore/QDir>
 
@@ -16,6 +17,7 @@ namespace CamelotEditor
 {
 	const QString EditorApplication::PROJECT_PREFS_FILE_NAME = "CamelotProject.xml";
 	const QString EditorApplication::EDITOR_PREFS_FILE_NAME = "Editor.xml";
+	const QString EditorApplication::STYLE_SHEETS_DIRECTORY_NAME = "Styles";
 
 	struct EditorApplication::PImpl
 	{
@@ -44,9 +46,7 @@ namespace CamelotEditor
 		
 		ProjectPrefs::startUp(new ProjectPrefs());
 
-		int argc = 0;
-		p->mApp = new QApplication(argc, nullptr);
-		p->mEditor = new QtEditor();
+		startUpQt();
 
 		EditorWindowManager::startUp(new EditorWindowManager());
 		WindowDockManager::startUp(new WindowDockManager(p->mEditor->getCentralWidget(), p->mEditor->getDockOverlayWidget()));
@@ -79,14 +79,51 @@ namespace CamelotEditor
 		WindowDockManager::shutDown();
 		EditorWindowManager::shutDown();
 
-		delete p->mApp;
-
+		shutDownQt();
+		
 		ProjectPrefs::shutDown();
 
 		gEditorPrefs().save(getEditorPrefsPath());
 		EditorPrefs::shutDown();
 	}
 
+	void EditorApplication::startUpQt()
+	{
+		int argc = 0;
+		p->mApp = new QApplication(argc, nullptr);
+		p->mEditor = new QtEditor();
+
+		loadStyleSheets();
+	}
+
+	void EditorApplication::shutDownQt()
+	{
+		delete p->mApp;
+	}
+
+	void EditorApplication::loadStyleSheets()
+	{
+		QDir styleSheetsDir = getStyleSheetsDirectoryPath();
+
+		if(!styleSheetsDir.exists())
+			return;
+
+		QStringList nameFilters;
+		nameFilters<<"*.css";
+
+		QFileInfoList fileInfos = styleSheetsDir.entryInfoList(nameFilters, QDir::Files | QDir::Readable);
+
+		QString styleSheet;
+		for(auto iter = fileInfos.begin(); iter != fileInfos.end(); ++iter)
+		{
+			DataStreamPtr dataStream = FileSystem::open(iter->absoluteFilePath().toStdString());
+
+			styleSheet += QString::fromStdString(dataStream->getAsString());
+		}
+
+		p->mApp->setStyleSheet(styleSheet);
+	}
+
 	void EditorApplication::loadProject(const QString& absProjPath)
 	{
 		if(!isValidProject(absProjPath))
@@ -163,6 +200,11 @@ namespace CamelotEditor
 		return p->mEditor;
 	}
 
+	QString EditorApplication::getStyleSheetsDirectoryPath() const
+	{
+		return QDir::cleanPath(QDir::toNativeSeparators(getEditorRootPath() + QDir::separator() + STYLE_SHEETS_DIRECTORY_NAME));
+	}
+
 	EditorApplication& gEditorApp()
 	{
 		static EditorApplication application;

+ 12 - 9
CamelotEditor/Source/CmQtEditor.cpp

@@ -23,25 +23,18 @@ namespace CamelotEditor
 
 	void QtEditor::setupUi()
 	{
-		if (objectName().isEmpty())
-			setObjectName(QStringLiteral("CamelotEditorClass"));
-
 		resize(600, 400);
 
 		mMenuBar = new QMenuBar(this);
-		mMenuBar->setObjectName(QStringLiteral("menuBar"));
-
 		setMenuBar(mMenuBar);
-		mMainToolBar = new QToolBar(this);
-		mMainToolBar->setObjectName(QStringLiteral("mainToolBar"));
 
+		mMainToolBar = new QToolBar(this);
 		addToolBar(mMainToolBar);
+
 		mCentralWidget = new QWidget(this);
-		mCentralWidget->setObjectName(QStringLiteral("centralWidget"));
 		setCentralWidget(mCentralWidget);
 
 		mStatusBar = new QStatusBar(this);
-		mStatusBar->setObjectName(QStringLiteral("statusBar"));
 		setStatusBar(mStatusBar);
 		
 		addMenuItemCallback("File", "Open project", boost::bind(&QtEditor::openProject, this));
@@ -52,6 +45,7 @@ namespace CamelotEditor
 		mDockOverlayWidget = new QtDockOverlayWidget(this);
 
 		retranslateUi();
+		setObjectNames();
 
 		QMetaObject::connectSlotsByName(this);
 	}
@@ -61,6 +55,15 @@ namespace CamelotEditor
 		setProjectName("No project");
 	}
 
+	void QtEditor::setObjectNames()
+	{
+		mMenuBar->setObjectName(QStringLiteral("MenuBar"));
+		mMainToolBar->setObjectName(QStringLiteral("MainToolBar"));
+		mCentralWidget->setObjectName(QStringLiteral("CentralWidget"));
+		mStatusBar->setObjectName(QStringLiteral("StatusBar"));
+		mDockOverlayWidget->setObjectName(QStringLiteral("DockOverlayWidget"));
+	}
+
 	void QtEditor::setProjectName(const QString& name)
 	{
 		QString title = tr("Camelot Editor") + " - " + name;

+ 13 - 14
CamelotEditor/Source/CmQtEditorWindow.cpp

@@ -27,7 +27,6 @@ namespace CamelotEditor
 		/* 								TITLE BAR	                     		*/
 		/************************************************************************/
 		mTitleBar = new QWidget(this);
-		mTitleBar->setObjectName("titleBar");
 
 		mLblTitle = new QLabel(this);
 		mLblTitle->setAttribute(Qt::WA_TransparentForMouseEvents);
@@ -45,9 +44,8 @@ namespace CamelotEditor
 		/************************************************************************/
 
 		mCentralWidget = new QWidget(this);
-		mCentralWidget->setObjectName("window");
 
-		mContent = new QWidget(this);
+		mContentWidget = new QWidget(this);
 
 		QVBoxLayout* centralLayout = new QVBoxLayout(this);
 		centralLayout->setMargin(0);
@@ -59,19 +57,10 @@ namespace CamelotEditor
 		mainLayout->setContentsMargins(2, 0, 2, 2);
 		mainLayout->setSpacing(0);
 		mainLayout->addWidget(mTitleBar);
-		mainLayout->addWidget(mContent, 1);
+		mainLayout->addWidget(mContentWidget, 1);
 		mCentralWidget->setLayout(mainLayout);
-
-		/************************************************************************/
-		/* 								OTHER		                      		*/
-		/************************************************************************/
-
-		// Style sheets // TODO - Load this from disk from unified storage
-		mTitleBar->setStyleSheet("QWidget#titleBar { background-color : rgb(157, 208, 250) }");
-		mCentralWidget->setStyleSheet("#window { border-style: solid; border-width: 2px; border-color: rgb(157, 208, 250); }");
-
-		//setAttribute(Qt::WA_TransparentForMouseEvents);
 		
+		setObjectNames();
 		retranslateUi(title);
 		setupSignals();
 	}
@@ -87,6 +76,16 @@ namespace CamelotEditor
 		mBtnClose->setText(tr("Close"));
 	}
 
+	void QtEditorWindow::setObjectNames()
+	{
+		mTitleBar->setObjectName(QStringLiteral("TitleBar"));
+		mLblTitle->setObjectName(QStringLiteral("LblTitle"));
+		mBtnClose->setObjectName(QStringLiteral("BtnClose"));
+
+		mCentralWidget->setObjectName(QStringLiteral("CentralWidget"));
+		mContentWidget->setObjectName(QStringLiteral("ContentWidget"));
+	}
+
 	QSizePolicy	QtEditorWindow::sizePolicy() const
 	{
 		return QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

+ 11 - 0
CamelotEditor/Source/CmQtNewProject.cpp

@@ -73,6 +73,7 @@ namespace CamelotEditor
 
 		setLayout(centralLayout);
 
+		setObjectNames();
 		retranslateUi();
 		setupSignals();
 	}
@@ -99,6 +100,16 @@ namespace CamelotEditor
 			mTxtProjectPath->setText(QString::fromStdString(FileSystem::getCurrentPath()));
 	}
 
+	void QtNewProject::setObjectNames()
+	{
+		mLblProjectName->setObjectName(QStringLiteral("LblProjectName"));
+		mTxtProjectName->setObjectName(QStringLiteral("TxtProjectName"));
+		mBtnCreate->setObjectName(QStringLiteral("BtnCreate"));
+		mLblProjectPath->setObjectName(QStringLiteral("LblProjectPath"));
+		mTxtProjectPath->setObjectName(QStringLiteral("TxtProjectPath"));
+		mBtnBrowse->setObjectName(QStringLiteral("BtnBrowse"));
+	}
+
 	void QtNewProject::createProject()
 	{
 		QString name = mTxtProjectName->text();

+ 18 - 9
CamelotEditor/Source/CmQtProjectSelection.cpp

@@ -27,28 +27,29 @@ namespace CamelotEditor
 		setWindowFlags(Qt::CustomizeWindowHint | Qt::WindowCloseButtonHint | Qt::MSWindowsFixedSizeDialogHint);
 		setFixedSize(400, 170);
 
-		mListWidget = new QListWidget(this);
+		mListRecentProjects = new QListWidget(this);
 
 		QWidget* buttonsWidget = new QWidget(this);
 		mBtnNew = new QPushButton(buttonsWidget);
 		mBtnOpen = new QPushButton(buttonsWidget);
-		mBtnBrowse = new QPushButton(buttonsWidget);
+		mBtnOpenOther = new QPushButton(buttonsWidget);
 
 		QHBoxLayout* buttonLayout = new QHBoxLayout(this);
 		buttonLayout->setMargin(0);
 		buttonLayout->addWidget(mBtnNew);
-		buttonLayout->addWidget(mBtnBrowse);
+		buttonLayout->addWidget(mBtnOpenOther);
 		buttonLayout->addWidget(mBtnOpen);
 		buttonsWidget->setLayout(buttonLayout);
 		
 		QVBoxLayout* centralLayout = new QVBoxLayout(this);
 		centralLayout->setMargin(0);
-		centralLayout->addWidget(mListWidget);
+		centralLayout->addWidget(mListRecentProjects);
 		centralLayout->addWidget(buttonsWidget);
 		setLayout(centralLayout);
 
 		reloadProjectList();
 
+		setObjectNames();
 		retranslateUi();
 		setupSignals();
 	}
@@ -57,23 +58,31 @@ namespace CamelotEditor
 	{
 		setWindowTitle(tr("Project selection"));
 		mBtnNew->setText(tr("New"));
-		mBtnBrowse->setText(tr("Browse"));
+		mBtnOpenOther->setText(tr("Open other"));
 		mBtnOpen->setText(tr("Open"));
 	}
 
 	void QtProjectSelection::setupSignals()
 	{
 		connect(mBtnNew, &QPushButton::clicked, this, &QtProjectSelection::newProject);
-		connect(mBtnBrowse, &QPushButton::clicked, this, &QtProjectSelection::browseProject);
+		connect(mBtnOpenOther, &QPushButton::clicked, this, &QtProjectSelection::browseProject);
 		connect(mBtnOpen, &QPushButton::clicked, this, &QtProjectSelection::openSelectedProject);
 	}
 
+	void QtProjectSelection::setObjectNames()
+	{
+		mListRecentProjects->setObjectName(QStringLiteral("ListRecentProjects"));
+		mBtnOpen->setObjectName(QStringLiteral("BtnOpen"));
+		mBtnNew->setObjectName(QStringLiteral("BtnNew"));
+		mBtnOpenOther->setObjectName(QStringLiteral("BtnOpenOther"));
+	}
+
 	void QtProjectSelection::reloadProjectList()
 	{
-		mListWidget->clear();
+		mListRecentProjects->clear();
 
 		for(int i = 0; i < gEditorPrefs().getNumRecentlyUsedProjects(); i++)
-			mListWidget->insertItem(i, gEditorPrefs().getRecentlyUsedProjectPath(i));
+			mListRecentProjects->insertItem(i, gEditorPrefs().getRecentlyUsedProjectPath(i));
 	}
 
 	void QtProjectSelection::newProject()
@@ -108,7 +117,7 @@ namespace CamelotEditor
 
 	void QtProjectSelection::openSelectedProject()
 	{
-		QListWidgetItem* item = mListWidget->currentItem();
+		QListWidgetItem* item = mListRecentProjects->currentItem();
 
 		if(item == nullptr)
 		{