Split MultiMC up into a few separate libraries.
Fixed plugin system. Tons of other stuff...
This commit is contained in:
		
							
								
								
									
										38
									
								
								libutil/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								libutil/CMakeLists.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
project(libmmcutil)
 | 
			
		||||
 | 
			
		||||
# Find Qt
 | 
			
		||||
find_package(Qt5Core REQUIRED)
 | 
			
		||||
 | 
			
		||||
# Include Qt headers.
 | 
			
		||||
include_directories(${Qt5Base_INCLUDE_DIRS})
 | 
			
		||||
include_directories(${Qt5Network_INCLUDE_DIRS})
 | 
			
		||||
 | 
			
		||||
SET(LIBUTIL_HEADERS
 | 
			
		||||
include/libutil_config.h
 | 
			
		||||
 | 
			
		||||
include/apputils.h
 | 
			
		||||
 | 
			
		||||
include/pathutils.h
 | 
			
		||||
include/osutils.h
 | 
			
		||||
 | 
			
		||||
include/inifile.h
 | 
			
		||||
 | 
			
		||||
include/siglist.h
 | 
			
		||||
include/siglist_impl.h
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
SET(LIBUTIL_SOURCES
 | 
			
		||||
src/pathutils.cpp
 | 
			
		||||
src/osutils.cpp
 | 
			
		||||
 | 
			
		||||
src/inifile.cpp
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
# Set the include dir path.
 | 
			
		||||
SET(LIBMMCUTIL_INCLUDE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/include" PARENT_SCOPE)
 | 
			
		||||
 | 
			
		||||
add_definitions(-DLIBMMCUTIL_LIBRARY)
 | 
			
		||||
 | 
			
		||||
add_library(libmmcutil SHARED ${LIBUTIL_SOURCES} ${LIBUTIL_HEADERS})
 | 
			
		||||
qt5_use_modules(libmmcutil Core)
 | 
			
		||||
target_link_libraries(libmmcutil)
 | 
			
		||||
							
								
								
									
										21
									
								
								libutil/include/apputils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								libutil/include/apputils.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,21 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef APPUTILS_H
 | 
			
		||||
#define APPUTILS_H
 | 
			
		||||
 | 
			
		||||
#define STR_VAL(val) # val
 | 
			
		||||
 | 
			
		||||
#endif // APPUTILS_H
 | 
			
		||||
							
								
								
									
										38
									
								
								libutil/include/inifile.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										38
									
								
								libutil/include/inifile.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,38 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef INIFILE_H
 | 
			
		||||
#define INIFILE_H
 | 
			
		||||
 | 
			
		||||
#include <QMap>
 | 
			
		||||
#include <QString>
 | 
			
		||||
#include <QVariant>
 | 
			
		||||
 | 
			
		||||
#include "libutil_config.h"
 | 
			
		||||
 | 
			
		||||
// Sectionless INI parser (for instance config files)
 | 
			
		||||
class LIBMMCUTIL_EXPORT INIFile : public QMap<QString, QVariant>
 | 
			
		||||
{
 | 
			
		||||
public:
 | 
			
		||||
	explicit INIFile();
 | 
			
		||||
	
 | 
			
		||||
	bool loadFile(QString fileName);
 | 
			
		||||
	bool saveFile(QString fileName);
 | 
			
		||||
	
 | 
			
		||||
	QVariant get(QString key, QVariant def) const;
 | 
			
		||||
	void set(QString key, QVariant val);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
#endif // INIFILE_H
 | 
			
		||||
							
								
								
									
										27
									
								
								libutil/include/libutil_config.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								libutil/include/libutil_config.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef LIBUTIL_CONFIG_H
 | 
			
		||||
#define LIBUTIL_CONFIG_H
 | 
			
		||||
 | 
			
		||||
#include <QtCore/QtGlobal>
 | 
			
		||||
 | 
			
		||||
#ifdef LIBMMCUTIL_LIBRARY
 | 
			
		||||
#  define LIBMMCUTIL_EXPORT Q_DECL_EXPORT
 | 
			
		||||
#else
 | 
			
		||||
#  define LIBMMCUTIL_EXPORT Q_DECL_IMPORT
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // LIBUTIL_CONFIG_H
 | 
			
		||||
							
								
								
									
										29
									
								
								libutil/include/osutils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								libutil/include/osutils.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef OSUTILS_H
 | 
			
		||||
#define OSUTILS_H
 | 
			
		||||
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
#if defined _WIN32 | defined _WIN64
 | 
			
		||||
#define WINDOWS	1
 | 
			
		||||
#elif __APPLE__ & __MACH__
 | 
			
		||||
#define OSX 1
 | 
			
		||||
#elif __linux__
 | 
			
		||||
#define LINUX 1
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
#endif // OSUTILS_H
 | 
			
		||||
							
								
								
									
										28
									
								
								libutil/include/pathutils.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								libutil/include/pathutils.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,28 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef PATHUTILS_H
 | 
			
		||||
#define PATHUTILS_H
 | 
			
		||||
 | 
			
		||||
#include <QString>
 | 
			
		||||
 | 
			
		||||
#include "libutil_config.h"
 | 
			
		||||
 | 
			
		||||
LIBMMCUTIL_EXPORT QString PathCombine(QString path1, QString path2);
 | 
			
		||||
LIBMMCUTIL_EXPORT QString PathCombine(QString path1, QString path2, QString path3);
 | 
			
		||||
 | 
			
		||||
LIBMMCUTIL_EXPORT QString AbsolutePath(QString path);
 | 
			
		||||
 | 
			
		||||
#endif // PATHUTILS_H
 | 
			
		||||
							
								
								
									
										130
									
								
								libutil/include/siglist.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										130
									
								
								libutil/include/siglist.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,130 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef SIGLIST_H
 | 
			
		||||
#define SIGLIST_H
 | 
			
		||||
 | 
			
		||||
#include <QObject>
 | 
			
		||||
#include <QList>
 | 
			
		||||
 | 
			
		||||
// A QList that allows emitting signals when the list changes.
 | 
			
		||||
// Since QObject doesn't support templates, to use this class with a 
 | 
			
		||||
// certain type, you should create a class deriving from SigList<T> and then
 | 
			
		||||
// call the DEFINE_SIGLIST_SIGNALS(T) and SETUP_SIGLIST_SIGNALS(T) macros.
 | 
			
		||||
template <typename T>
 | 
			
		||||
class SigList : public QList<T>
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
public:
 | 
			
		||||
	explicit SigList() : QList<T>() {}
 | 
			
		||||
	
 | 
			
		||||
	virtual void append(const T &value);
 | 
			
		||||
	virtual void append(const QList<T> &other);
 | 
			
		||||
	
 | 
			
		||||
	virtual void clear();
 | 
			
		||||
	
 | 
			
		||||
	virtual void erase(iterator pos);
 | 
			
		||||
	virtual void erase(iterator first, iterator last);
 | 
			
		||||
	
 | 
			
		||||
	virtual void insert(int i, const T &t);
 | 
			
		||||
	virtual void insert(iterator before, const T &t);
 | 
			
		||||
	
 | 
			
		||||
	virtual void move(int from, int to);
 | 
			
		||||
	
 | 
			
		||||
	virtual void pop_back() { takeLast(); }
 | 
			
		||||
	virtual void pop_front() { takeFirst(); }
 | 
			
		||||
	
 | 
			
		||||
	virtual void push_back(const T &t) { append(t); }
 | 
			
		||||
	virtual void push_front(const T &t) { prepend(t); }
 | 
			
		||||
	
 | 
			
		||||
	virtual void prepend(const T &t);
 | 
			
		||||
	
 | 
			
		||||
	virtual int removeAll(const T &t);
 | 
			
		||||
	virtual bool removeOne(const T &t);
 | 
			
		||||
	
 | 
			
		||||
	virtual void removeAt(int i) { takeAt(i); }
 | 
			
		||||
	virtual void removeFirst() { takeFirst(); }
 | 
			
		||||
	virtual void removeLast() { takeLast(); }
 | 
			
		||||
	
 | 
			
		||||
	virtual void swap(QList<T> &other);
 | 
			
		||||
	virtual void swap(int i, int j);
 | 
			
		||||
	
 | 
			
		||||
	virtual T takeAt(int i);
 | 
			
		||||
	virtual T takeFirst();
 | 
			
		||||
	virtual T takeLast();
 | 
			
		||||
	
 | 
			
		||||
	virtual QList<T> &operator +=(const QList<T> &other) { append(other); return *this; }
 | 
			
		||||
	virtual QList<T> &operator +=(const T &value) { append(value); return *this; }
 | 
			
		||||
	virtual QList<T> &operator <<(const QList<T> &other) { append(other); return *this; }
 | 
			
		||||
	virtual QList<T> &operator <<(const T &value) { append(value); return *this; }
 | 
			
		||||
	
 | 
			
		||||
	virtual QList<T> &operator =(const QList<T> &other);
 | 
			
		||||
	
 | 
			
		||||
	
 | 
			
		||||
	// Signal emitted after an item is added to the list. 
 | 
			
		||||
	// Contains a reference to item and the item's new index.
 | 
			
		||||
	virtual void onItemAdded(const T &item, int index) = 0;
 | 
			
		||||
	
 | 
			
		||||
	// Signal emitted after multiple items are added to the list at once.
 | 
			
		||||
	// The items parameter is a const reference to a QList of the items that 
 | 
			
		||||
	// were added.
 | 
			
		||||
	// The firstIndex parameter is the new index of the first item added.
 | 
			
		||||
	virtual void onItemsAdded(const QList<T> &items, int firstIndex) = 0;
 | 
			
		||||
	
 | 
			
		||||
	// Signal emitted after an item is removed to the list.
 | 
			
		||||
	// Contains a reference to the item and the item's old index.
 | 
			
		||||
	virtual void onItemRemoved(const T &item, int index) = 0;
 | 
			
		||||
	
 | 
			
		||||
	// Signal emitted after multiple items are removed from the list at once.
 | 
			
		||||
	// The items parameter is a const reference to a QList of the items that 
 | 
			
		||||
	// were added.
 | 
			
		||||
	// The firstIndex parameter is the new index of the first item added.
 | 
			
		||||
	virtual void onItemsRemoved(const QList<T> &items, int firstIndex) = 0;
 | 
			
		||||
	
 | 
			
		||||
	// Signal emitted after an item is moved to another index.
 | 
			
		||||
	// Contains the item, the old index, and the new index.
 | 
			
		||||
	virtual void onItemMoved(const T &item, int oldIndex, int newIndex) = 0;
 | 
			
		||||
	
 | 
			
		||||
	// Signal emitted after an operation that changes the whole list occurs.
 | 
			
		||||
	// This signal should be treated as if all data in the entire list was cleared 
 | 
			
		||||
	// and new data added in its place.
 | 
			
		||||
	virtual void onInvalidated() = 0;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
// Defines the signals for a SigList
 | 
			
		||||
#define DEFINE_SIGLIST_SIGNALS(TYPE) \
 | 
			
		||||
	Q_SIGNAL void itemAdded(TYPE const &item, int index);\
 | 
			
		||||
	Q_SIGNAL void itemsAdded(const QList<TYPE> &items, int firstIndex);\
 | 
			
		||||
	Q_SIGNAL void itemRemoved(TYPE const &item, int index);\
 | 
			
		||||
	Q_SIGNAL void itemsRemoved(const QList<TYPE> &items, int firstIndex);\
 | 
			
		||||
	Q_SIGNAL void itemMoved(TYPE const &item, int oldIndex, int newIndex);\
 | 
			
		||||
	Q_SIGNAL void invalidated();
 | 
			
		||||
 | 
			
		||||
// Overrides the onItem* functions and causes them to emit their corresponding 
 | 
			
		||||
// signals.
 | 
			
		||||
#define SETUP_SIGLIST_SIGNALS(TYPE) \
 | 
			
		||||
	virtual void onItemAdded(TYPE const &item, int index)\
 | 
			
		||||
	{ emit itemAdded(item, index); }\
 | 
			
		||||
	virtual void onItemsAdded(const QList<TYPE> &items, int firstIndex)\
 | 
			
		||||
	{ emit itemsAdded(items, firstIndex); }\
 | 
			
		||||
	virtual void onItemRemoved(TYPE const &item, int index)\
 | 
			
		||||
	{ emit itemRemoved(item, index); }\
 | 
			
		||||
	virtual void onItemsRemoved(const QList<TYPE> &items, int firstIndex)\
 | 
			
		||||
	{ emit itemsRemoved(items, firstIndex); }\
 | 
			
		||||
	virtual void onItemMoved(TYPE const &item, int oldIndex, int newIndex)\
 | 
			
		||||
	{ emit itemMoved(item, oldIndex, newIndex); }\
 | 
			
		||||
	virtual void onInvalidated() { emit invalidated(); }
 | 
			
		||||
 | 
			
		||||
#endif // SIGLIST_H
 | 
			
		||||
							
								
								
									
										156
									
								
								libutil/include/siglist_impl.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										156
									
								
								libutil/include/siglist_impl.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,156 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "siglist.h"
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::append(const T &value)
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::append(value);
 | 
			
		||||
	onItemAdded(value, length() - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::prepend(const T &value)
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::prepend(value);
 | 
			
		||||
	onItemAdded(value, 0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::append(const QList<T> &other)
 | 
			
		||||
{
 | 
			
		||||
	int index = length();
 | 
			
		||||
	QList<T>::append(other);
 | 
			
		||||
	onItemsAdded(other, index);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::clear()
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::clear();
 | 
			
		||||
	onInvalidated();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::erase(QList<T>::iterator pos)
 | 
			
		||||
{
 | 
			
		||||
	T value = *pos;
 | 
			
		||||
	int index = indexOf(*pos);
 | 
			
		||||
	QList<T>::erase(pos);
 | 
			
		||||
	onItemRemoved(value, index);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::erase(QList<T>::iterator first, QList<T>::iterator last)
 | 
			
		||||
{
 | 
			
		||||
	QList<T> removedValues;
 | 
			
		||||
	int firstIndex = indexOf(*first);
 | 
			
		||||
	
 | 
			
		||||
	for (QList<T>::iterator iter = first; iter < last; iter++)
 | 
			
		||||
	{
 | 
			
		||||
		removedValues << *iter;
 | 
			
		||||
		QList<T>::erase(iter);
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	onItemsRemoved(removedValues, firstIndex);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::insert(int i, const T &t)
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::insert(i, t);
 | 
			
		||||
	onItemAdded(t, i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::insert(QList<T>::iterator before, const T &t)
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::insert(before, t);
 | 
			
		||||
	onItemAdded(t, indexOf(t));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::move(int from, int to)
 | 
			
		||||
{
 | 
			
		||||
	const T &item = at(from);
 | 
			
		||||
	QList<T>::move(from, to);
 | 
			
		||||
	onItemMoved(item, from, to);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
int SigList<T>::removeAll(const T &t)
 | 
			
		||||
{
 | 
			
		||||
	int retVal = QList<T>::removeAll(t);
 | 
			
		||||
	onInvalidated();
 | 
			
		||||
	return retVal;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
bool SigList<T>::removeOne(const T &t)
 | 
			
		||||
{
 | 
			
		||||
	int index = indexOf(t);
 | 
			
		||||
	if (QList<T>::removeOne(t))
 | 
			
		||||
	{
 | 
			
		||||
		onItemRemoved(t, index);
 | 
			
		||||
		return true;
 | 
			
		||||
	}
 | 
			
		||||
	return false;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::swap(QList<T> &other)
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::swap(other);
 | 
			
		||||
	onInvalidated();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
void SigList<T>::swap(int i, int j)
 | 
			
		||||
{
 | 
			
		||||
	const T &item1 = at(i);
 | 
			
		||||
	const T &item2 = at(j);
 | 
			
		||||
	QList<T>::swap(i, j);
 | 
			
		||||
	onItemMoved(item1, i, j);
 | 
			
		||||
	onItemMoved(item2, j, i);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
T SigList<T>::takeAt(int i)
 | 
			
		||||
{
 | 
			
		||||
	T val = QList<T>::takeAt(i);
 | 
			
		||||
	onItemRemoved(val, i);
 | 
			
		||||
	return val;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
T SigList<T>::takeFirst()
 | 
			
		||||
{
 | 
			
		||||
	return takeAt(0);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
T SigList<T>::takeLast()
 | 
			
		||||
{
 | 
			
		||||
	return takeAt(length() - 1);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename T>
 | 
			
		||||
QList<T> &SigList<T>::operator =(const QList<T> &other)
 | 
			
		||||
{
 | 
			
		||||
	QList<T>::operator =(other);
 | 
			
		||||
	onInvalidated();
 | 
			
		||||
	return *this;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										86
									
								
								libutil/src/inifile.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								libutil/src/inifile.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,86 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "include/inifile.h"
 | 
			
		||||
 | 
			
		||||
#include <QFile>
 | 
			
		||||
#include <QTextStream>
 | 
			
		||||
#include <QStringList>
 | 
			
		||||
 | 
			
		||||
INIFile::INIFile()
 | 
			
		||||
{
 | 
			
		||||
	
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool INIFile::saveFile(QString fileName)
 | 
			
		||||
{
 | 
			
		||||
	// TODO Handle errors.
 | 
			
		||||
	QFile file(fileName);
 | 
			
		||||
	file.open(QIODevice::WriteOnly);
 | 
			
		||||
	QTextStream out(&file);
 | 
			
		||||
	
 | 
			
		||||
	for (Iterator iter = begin(); iter != end(); iter++)
 | 
			
		||||
	{
 | 
			
		||||
		out << iter.key() << "=" << iter.value().toString() << "\n";
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
bool INIFile::loadFile(QString fileName)
 | 
			
		||||
{
 | 
			
		||||
	// TODO Handle errors.
 | 
			
		||||
	QFile file(fileName);
 | 
			
		||||
	file.open(QIODevice::ReadOnly);
 | 
			
		||||
	QTextStream	in(&file);
 | 
			
		||||
	
 | 
			
		||||
	QStringList lines = in.readAll().split('\n');
 | 
			
		||||
	for (int i = 0; i < lines.count(); i++)
 | 
			
		||||
	{
 | 
			
		||||
		QString & lineRaw = lines[i];
 | 
			
		||||
		// Ignore comments.
 | 
			
		||||
		QString line = lineRaw.left(lineRaw.indexOf('#')).trimmed();
 | 
			
		||||
		
 | 
			
		||||
		int eqPos = line.indexOf('=');
 | 
			
		||||
		if(eqPos == -1)
 | 
			
		||||
			continue;
 | 
			
		||||
		QString key = line.left(eqPos).trimmed();
 | 
			
		||||
		QString valueStr = line.right(line.length() - eqPos - 1).trimmed();
 | 
			
		||||
		
 | 
			
		||||
		QVariant value(valueStr);
 | 
			
		||||
		/*
 | 
			
		||||
		QString dbg = key;
 | 
			
		||||
		dbg += " = ";
 | 
			
		||||
		dbg += valueStr;
 | 
			
		||||
		qDebug(dbg.toLocal8Bit());
 | 
			
		||||
		*/
 | 
			
		||||
		this->operator [](key) = value;
 | 
			
		||||
	}
 | 
			
		||||
	
 | 
			
		||||
	return true;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QVariant INIFile::get(QString key, QVariant def) const
 | 
			
		||||
{
 | 
			
		||||
	if (!this->contains(key))
 | 
			
		||||
		return def;
 | 
			
		||||
	else
 | 
			
		||||
		return this->operator [](key);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void INIFile::set(QString key, QVariant val)
 | 
			
		||||
{
 | 
			
		||||
	this->operator [](key) = val;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										19
									
								
								libutil/src/osutils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										19
									
								
								libutil/src/osutils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,19 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "include/osutils.h"
 | 
			
		||||
 | 
			
		||||
#include <QUrl>
 | 
			
		||||
#include <QFileInfo>
 | 
			
		||||
							
								
								
									
										37
									
								
								libutil/src/pathutils.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								libutil/src/pathutils.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
/* Copyright 2013 MultiMC Contributors
 | 
			
		||||
 *
 | 
			
		||||
 * Licensed under the Apache License, Version 2.0 (the "License");
 | 
			
		||||
 * you may not use this file except in compliance with the License.
 | 
			
		||||
 * You may obtain a copy of the License at
 | 
			
		||||
 * 
 | 
			
		||||
 *     http://www.apache.org/licenses/LICENSE-2.0
 | 
			
		||||
 *
 | 
			
		||||
 * Unless required by applicable law or agreed to in writing, software
 | 
			
		||||
 * distributed under the License is distributed on an "AS IS" BASIS,
 | 
			
		||||
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | 
			
		||||
 * See the License for the specific language governing permissions and
 | 
			
		||||
 * limitations under the License.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#include "include/pathutils.h"
 | 
			
		||||
 | 
			
		||||
#include <QFileInfo>
 | 
			
		||||
#include <QDir>
 | 
			
		||||
 | 
			
		||||
QString PathCombine(QString path1, QString path2)
 | 
			
		||||
{
 | 
			
		||||
	if (!path1.endsWith('/'))
 | 
			
		||||
		return path1.append('/').append(path2);
 | 
			
		||||
	else
 | 
			
		||||
		return path1.append(path2);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString PathCombine(QString path1, QString path2, QString path3)
 | 
			
		||||
{
 | 
			
		||||
	return PathCombine(PathCombine(path1, path2), path3);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
QString AbsolutePath(QString path)
 | 
			
		||||
{
 | 
			
		||||
	return QFileInfo(path).absolutePath();
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user