diff options
author | Andrew <forkk@forkk.net> | 2013-11-04 19:58:56 -0600 |
---|---|---|
committer | Andrew <forkk@forkk.net> | 2013-11-04 19:58:56 -0600 |
commit | 5083a6a8090fa03d3c1800c1f9588079ca11e9f9 (patch) | |
tree | 7c2e88c7184a7f5acf5e7a03be5c5f0bf6904113 | |
parent | dc3b0fcb2b74aeede37b08216b203cab284f7fce (diff) | |
parent | bb7e8985f6d189de0acac6a1c3033cb16378c1fb (diff) | |
download | MultiMC-5083a6a8090fa03d3c1800c1f9588079ca11e9f9.tar MultiMC-5083a6a8090fa03d3c1800c1f9588079ca11e9f9.tar.gz MultiMC-5083a6a8090fa03d3c1800c1f9588079ca11e9f9.tar.lz MultiMC-5083a6a8090fa03d3c1800c1f9588079ca11e9f9.tar.xz MultiMC-5083a6a8090fa03d3c1800c1f9588079ca11e9f9.zip |
Merge branch 'develop' of github.com:MultiMC/MultiMC5 into develop
208 files changed, 4492 insertions, 3767 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index cb24499f..e150c459 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -178,49 +178,53 @@ logger/QsLog.h logger/QsLogDest.cpp logger/QsLogDest.h -# GUI -gui/mainwindow.h -gui/mainwindow.cpp -gui/settingsdialog.h -gui/settingsdialog.cpp -gui/CopyInstanceDialog.h -gui/CopyInstanceDialog.cpp -gui/newinstancedialog.h -gui/newinstancedialog.cpp -gui/logindialog.h -gui/logindialog.cpp -gui/ProgressDialog.h -gui/ProgressDialog.cpp -gui/aboutdialog.h -gui/aboutdialog.cpp -gui/consolewindow.h -gui/consolewindow.cpp -gui/instancedelegate.h -gui/instancedelegate.cpp -gui/versionselectdialog.h -gui/versionselectdialog.cpp -gui/lwjglselectdialog.h -gui/lwjglselectdialog.cpp -gui/instancesettings.h -gui/instancesettings.cpp -gui/IconPickerDialog.h -gui/IconPickerDialog.cpp -gui/LegacyModEditDialog.h -gui/LegacyModEditDialog.cpp -gui/OneSixModEditDialog.h -gui/OneSixModEditDialog.cpp -gui/ModEditDialogCommon.h -gui/ModEditDialogCommon.cpp -gui/ModListView.h -gui/ModListView.cpp -gui/LabeledToolButton.h -gui/LabeledToolButton.cpp -gui/EditNotesDialog.h -gui/EditNotesDialog.cpp -gui/MCModInfoFrame.h -gui/MCModInfoFrame.cpp -gui/CustomMessageBox.h -gui/CustomMessageBox.cpp +# GUI - windows +gui/MainWindow.h +gui/MainWindow.cpp +gui/ConsoleWindow.h +gui/ConsoleWindow.cpp + +# GUI - dialogs +gui/dialogs/SettingsDialog.h +gui/dialogs/SettingsDialog.cpp +gui/dialogs/CopyInstanceDialog.h +gui/dialogs/CopyInstanceDialog.cpp +gui/dialogs/dialogs/ +gui/dialogs/NewInstanceDialog.cpp +gui/dialogs/LoginDialog.h +gui/dialogs/LoginDialog.cpp +gui/dialogs/ProgressDialog.h +gui/dialogs/ProgressDialog.cpp +gui/dialogs/AboutDialog.h +gui/dialogs/AboutDialog.cpp +gui/dialogs/VersionSelectDialog.h +gui/dialogs/VersionSelectDialog.cpp +gui/dialogs/LwjglSelectDialog.h +gui/dialogs/LwjglSelectDialog.cpp +gui/dialogs/InstanceSettings.h +gui/dialogs/InstanceSettings.cpp +gui/dialogs/IconPickerDialog.h +gui/dialogs/IconPickerDialog.cpp +gui/dialogs/LegacyModEditDialog.h +gui/dialogs/LegacyModEditDialog.cpp +gui/dialogs/OneSixModEditDialog.h +gui/dialogs/OneSixModEditDialog.cpp +gui/dialogs/ModEditDialogCommon.h +gui/dialogs/ModEditDialogCommon.cpp +gui/dialogs/EditNotesDialog.h +gui/dialogs/EditNotesDialog.cpp +gui/dialogs/CustomMessageBox.h +gui/dialogs/CustomMessageBox.cpp + +# GUI - widgets +gui/widgets/InstanceDelegate.h +gui/widgets/InstanceDelegate.cpp +gui/widgets/ModListView.h +gui/widgets/ModListView.cpp +gui/widgets/LabeledToolButton.h +gui/widgets/LabeledToolButton.cpp +gui/widgets/MCModInfoFrame.h +gui/widgets/MCModInfoFrame.cpp # Base classes and infrastructure logic/BaseVersion.h @@ -332,24 +336,28 @@ logic/NagUtils.cpp ######## UIs ######## SET(MULTIMC_UIS -gui/mainwindow.ui -gui/settingsdialog.ui -gui/CopyInstanceDialog.ui -gui/newinstancedialog.ui -gui/logindialog.ui -gui/aboutdialog.ui -gui/consolewindow.ui -gui/versionselectdialog.ui -gui/lwjglselectdialog.ui -gui/instancesettings.ui - -gui/ProgressDialog.ui -gui/IconPickerDialog.ui -gui/LegacyModEditDialog.ui -gui/OneSixModEditDialog.ui -gui/EditNotesDialog.ui - -gui/MCModInfoFrame.ui + +# Windows +gui/MainWindow.ui +gui/ConsoleWindow.ui + +# Dialogs +gui/dialogs/SettingsDialog.ui +gui/dialogs/CopyInstanceDialog.ui +gui/dialogs/NewInstanceDialog.ui +gui/dialogs/LoginDialog.ui +gui/dialogs/AboutDialog.ui +gui/dialogs/VersionSelectDialog.ui +gui/dialogs/LwjglSelectDialog.ui +gui/dialogs/InstanceSettings.ui +gui/dialogs/ProgressDialog.ui +gui/dialogs/IconPickerDialog.ui +gui/dialogs/LegacyModEditDialog.ui +gui/dialogs/OneSixModEditDialog.ui +gui/dialogs/EditNotesDialog.ui + +# Widgets/other +gui/widgets/MCModInfoFrame.ui ) set (FILES_TO_TRANSLATE ${FILES_TO_TRANSLATE} ${MULTIMC_SOURCES} ${MULTIMC_UIS}) @@ -364,9 +372,9 @@ ENDIF() IF(UNIX AND NOT APPLE) SET(MultiMC_QT_ADDITIONAL_MODULES ${MultiMC_QT_ADDITIONAL_MODULES} X11Extras) SET(MultiMC_LINK_ADDITIONAL_LIBS ${MultiMC_LINK_ADDITIONAL_LIBS} xcb) - LIST(APPEND MULTIMC_SOURCES gui/platform_x11.cpp) + LIST(APPEND MULTIMC_SOURCES gui/Platform_X11.cpp) ELSE() - LIST(APPEND MULTIMC_SOURCES gui/platform_other.cpp) + LIST(APPEND MULTIMC_SOURCES gui/Platform_Other.cpp) ENDIF() diff --git a/MultiMC.cpp b/MultiMC.cpp index e04904b4..1c70fb54 100644 --- a/MultiMC.cpp +++ b/MultiMC.cpp @@ -7,8 +7,8 @@ #include <QLibraryInfo> #include <QMessageBox> -#include "gui/mainwindow.h" -#include "gui/versionselectdialog.h" +#include "gui/MainWindow.h" +#include "gui/dialogs/VersionSelectDialog.h" #include "logic/lists/InstanceList.h" #include "logic/lists/IconList.h" #include "logic/lists/LwjglVersionList.h" @@ -24,7 +24,7 @@ #include "cmdutils.h" #include <inisettingsobject.h> #include <setting.h> -#include <logger/QsLog.h> +#include "logger/QsLog.h" #include <logger/QsLogDest.h> #include "config.h" diff --git a/depends/classparser/include/classparser_config.h b/depends/classparser/include/classparser_config.h index fe6a2ab9..a043824a 100644 --- a/depends/classparser/include/classparser_config.h +++ b/depends/classparser/include/classparser_config.h @@ -16,8 +16,7 @@ #include <QtCore/QtGlobal> #ifdef CLASSPARSER_LIBRARY -# define CLASSPARSER_EXPORT Q_DECL_EXPORT +#define CLASSPARSER_EXPORT Q_DECL_EXPORT #else -# define CLASSPARSER_EXPORT Q_DECL_IMPORT +#define CLASSPARSER_EXPORT Q_DECL_IMPORT #endif - diff --git a/depends/classparser/include/javautils.h b/depends/classparser/include/javautils.h index 63e5ec26..90042261 100644 --- a/depends/classparser/include/javautils.h +++ b/depends/classparser/include/javautils.h @@ -22,8 +22,8 @@ namespace javautils { - /** - * @brief Get the version from a minecraft.jar by parsing its class files. Expensive! - */ - QString GetMinecraftJarVersion(QString jar); +/** + * @brief Get the version from a minecraft.jar by parsing its class files. Expensive! + */ +QString GetMinecraftJarVersion(QString jar); } diff --git a/depends/classparser/src/annotations.cpp b/depends/classparser/src/annotations.cpp index fc0c98fa..d1a7c046 100644 --- a/depends/classparser/src/annotations.cpp +++ b/depends/classparser/src/annotations.cpp @@ -4,80 +4,82 @@ namespace java { - std::string annotation::toString() +std::string annotation::toString() +{ + std::ostringstream ss; + ss << "Annotation type : " << type_index << " - " << pool[type_index].str_data << std::endl; + ss << "Contains " << name_val_pairs.size() << " pairs:" << std::endl; + for (unsigned i = 0; i < name_val_pairs.size(); i++) { - std::ostringstream ss; - ss << "Annotation type : " << type_index << " - " << pool[type_index].str_data << std::endl; - ss << "Contains " << name_val_pairs.size() << " pairs:" << std::endl; - for(unsigned i = 0; i < name_val_pairs.size(); i++) - { - std::pair<uint16_t, element_value *> &val = name_val_pairs[i]; - auto name_idx = val.first; - ss << pool[name_idx].str_data << "(" << name_idx << ")" << " = " << val.second->toString() << std::endl; - } - return ss.str(); + std::pair<uint16_t, element_value *> &val = name_val_pairs[i]; + auto name_idx = val.first; + ss << pool[name_idx].str_data << "(" << name_idx << ")" + << " = " << val.second->toString() << std::endl; } + return ss.str(); +} + +annotation *annotation::read(util::membuffer &input, constant_pool &pool) +{ + uint16_t type_index = 0; + input.read_be(type_index); + annotation *ann = new annotation(type_index, pool); - annotation * annotation::read (util::membuffer& input, constant_pool& pool) + uint16_t num_pairs = 0; + input.read_be(num_pairs); + while (num_pairs) { - uint16_t type_index = 0; - input.read_be(type_index); - annotation * ann = new annotation(type_index,pool); - - uint16_t num_pairs = 0; - input.read_be(num_pairs); - while(num_pairs) - { - uint16_t name_idx = 0; - // read name index - input.read_be(name_idx); - auto elem = element_value::readElementValue(input,pool); - // read value - ann->add_pair(name_idx, elem); - num_pairs --; - } - return ann; + uint16_t name_idx = 0; + // read name index + input.read_be(name_idx); + auto elem = element_value::readElementValue(input, pool); + // read value + ann->add_pair(name_idx, elem); + num_pairs--; } - - element_value* element_value::readElementValue ( util::membuffer& input, java::constant_pool& pool ) + return ann; +} + +element_value *element_value::readElementValue(util::membuffer &input, + java::constant_pool &pool) +{ + element_value_type type = INVALID; + input.read(type); + uint16_t index = 0; + uint16_t index2 = 0; + std::vector<element_value *> vals; + switch (type) { - element_value_type type = INVALID; - input.read(type); - uint16_t index = 0; - uint16_t index2 = 0; - std::vector <element_value *> vals; - switch (type) + case PRIMITIVE_BYTE: + case PRIMITIVE_CHAR: + case PRIMITIVE_DOUBLE: + case PRIMITIVE_FLOAT: + case PRIMITIVE_INT: + case PRIMITIVE_LONG: + case PRIMITIVE_SHORT: + case PRIMITIVE_BOOLEAN: + case STRING: + input.read_be(index); + return new element_value_simple(type, index, pool); + case ENUM_CONSTANT: + input.read_be(index); + input.read_be(index2); + return new element_value_enum(type, index, index2, pool); + case CLASS: // Class + input.read_be(index); + return new element_value_class(type, index, pool); + case ANNOTATION: // Annotation + // FIXME: runtime visibility info needs to be passed from parent + return new element_value_annotation(ANNOTATION, annotation::read(input, pool), pool); + case ARRAY: // Array + input.read_be(index); + for (int i = 0; i < index; i++) { - case PRIMITIVE_BYTE: - case PRIMITIVE_CHAR: - case PRIMITIVE_DOUBLE: - case PRIMITIVE_FLOAT: - case PRIMITIVE_INT: - case PRIMITIVE_LONG: - case PRIMITIVE_SHORT: - case PRIMITIVE_BOOLEAN: - case STRING: - input.read_be(index); - return new element_value_simple(type, index, pool); - case ENUM_CONSTANT: - input.read_be(index); - input.read_be(index2); - return new element_value_enum(type, index, index2, pool); - case CLASS: // Class - input.read_be(index); - return new element_value_class(type, index, pool); - case ANNOTATION: // Annotation - // FIXME: runtime visibility info needs to be passed from parent - return new element_value_annotation(ANNOTATION, annotation::read(input, pool), pool); - case ARRAY: // Array - input.read_be(index); - for (int i = 0; i < index; i++) - { - vals.push_back(element_value::readElementValue(input, pool)); - } - return new element_value_array(ARRAY, vals, pool); - default: - throw new java::classfile_exception(); + vals.push_back(element_value::readElementValue(input, pool)); } + return new element_value_array(ARRAY, vals, pool); + default: + throw new java::classfile_exception(); } +} }
\ No newline at end of file diff --git a/depends/classparser/src/annotations.h b/depends/classparser/src/annotations.h index b115dc0b..aa25d241 100644 --- a/depends/classparser/src/annotations.h +++ b/depends/classparser/src/annotations.h @@ -5,248 +5,273 @@ namespace java { - enum element_value_type : uint8_t - { - INVALID = 0, - STRING = 's', - ENUM_CONSTANT = 'e', - CLASS = 'c', - ANNOTATION = '@', - ARRAY = '[', // one array dimension - PRIMITIVE_INT = 'I', // integer - PRIMITIVE_BYTE = 'B', // signed byte - PRIMITIVE_CHAR = 'C', // Unicode character code point in the Basic Multilingual Plane, encoded with UTF-16 - PRIMITIVE_DOUBLE = 'D', // double-precision floating-point value - PRIMITIVE_FLOAT = 'F', // single-precision floating-point value - PRIMITIVE_LONG = 'J', // long integer - PRIMITIVE_SHORT = 'S', // signed short - PRIMITIVE_BOOLEAN = 'Z' // true or false - }; +enum element_value_type : uint8_t +{ + INVALID = 0, + STRING = 's', + ENUM_CONSTANT = 'e', + CLASS = 'c', + ANNOTATION = '@', + ARRAY = '[', // one array dimension + PRIMITIVE_INT = 'I', // integer + PRIMITIVE_BYTE = 'B', // signed byte + PRIMITIVE_CHAR = 'C', // Unicode character code point in the Basic Multilingual Plane, + // encoded with UTF-16 + PRIMITIVE_DOUBLE = 'D', // double-precision floating-point value + PRIMITIVE_FLOAT = 'F', // single-precision floating-point value + PRIMITIVE_LONG = 'J', // long integer + PRIMITIVE_SHORT = 'S', // signed short + PRIMITIVE_BOOLEAN = 'Z' // true or false +}; +/** + * The element_value structure is a discriminated union representing the value of an + *element-value pair. + * It is used to represent element values in all attributes that describe annotations + * - RuntimeVisibleAnnotations + * - RuntimeInvisibleAnnotations + * - RuntimeVisibleParameterAnnotations + * - RuntimeInvisibleParameterAnnotations). + * + * The element_value structure has the following format: + */ +class element_value +{ +protected: + element_value_type type; + constant_pool &pool; + +public: + element_value(element_value_type type, constant_pool &pool) : type(type), pool(pool) {}; + + element_value_type getElementValueType() + { + return type; + } + + virtual std::string toString() = 0; + + static element_value *readElementValue(util::membuffer &input, constant_pool &pool); +}; + +/** + * Each value of the annotations table represents a single runtime-visible annotation on a + * program element. + * The annotation structure has the following format: + */ +class annotation +{ +public: + typedef std::vector<std::pair<uint16_t, element_value *>> value_list; + +protected: /** - * The element_value structure is a discriminated union representing the value of an element-value pair. - * It is used to represent element values in all attributes that describe annotations - * - RuntimeVisibleAnnotations - * - RuntimeInvisibleAnnotations - * - RuntimeVisibleParameterAnnotations - * - RuntimeInvisibleParameterAnnotations). + * The value of the type_index item must be a valid index into the constant_pool table. + * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure + * representing a field descriptor representing the annotation type corresponding + * to the annotation represented by this annotation structure. + */ + uint16_t type_index; + /** + * map between element_name_index and value. * - * The element_value structure has the following format: + * The value of the element_name_index item must be a valid index into the constant_pool + *table. + * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure + *representing + * a valid field descriptor (§4.3.2) that denotes the name of the annotation type element + *represented + * by this element_value_pairs entry. */ - class element_value - { - protected: - element_value_type type; - constant_pool & pool; - - public: - element_value(element_value_type type, constant_pool & pool): type(type), pool(pool) {}; + value_list name_val_pairs; + /** + * Reference to the parent constant pool + */ + constant_pool &pool; - element_value_type getElementValueType() +public: + annotation(uint16_t type_index, constant_pool &pool) + : type_index(type_index), pool(pool) {}; + ~annotation() + { + for (unsigned i = 0; i < name_val_pairs.size(); i++) { - return type; + delete name_val_pairs[i].second; } - - virtual std::string toString() = 0; + } + void add_pair(uint16_t key, element_value *value) + { + name_val_pairs.push_back(std::make_pair(key, value)); + } + ; + value_list::const_iterator begin() + { + return name_val_pairs.cbegin(); + } + value_list::const_iterator end() + { + return name_val_pairs.cend(); + } + std::string toString(); + static annotation *read(util::membuffer &input, constant_pool &pool); +}; +typedef std::vector<annotation *> annotation_table; + +/// type for simple value annotation elements +class element_value_simple : public element_value +{ +protected: + /// index of the constant in the constant pool + uint16_t index; - static element_value * readElementValue(util::membuffer & input, constant_pool & pool); - }; - +public: + element_value_simple(element_value_type type, uint16_t index, constant_pool &pool) + : element_value(type, pool), index(index) { + // TODO: verify consistency + }; + uint16_t getIndex() + { + return index; + } + virtual std::string toString() + { + return pool[index].toString(); + } + ; +}; +/// The enum_const_value item is used if the tag item is 'e'. +class element_value_enum : public element_value +{ +protected: /** - * Each value of the annotations table represents a single runtime-visible annotation on a program element. - * The annotation structure has the following format: + * The value of the type_name_index item must be a valid index into the constant_pool table. + * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure + * representing a valid field descriptor (§4.3.2) that denotes the internal form of the + * binary + * name (§4.2.1) of the type of the enum constant represented by this element_value + * structure. */ - class annotation - { - public: - typedef std::vector< std::pair<uint16_t, element_value * > > value_list; - protected: - /** - * The value of the type_index item must be a valid index into the constant_pool table. - * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure - * representing a field descriptor representing the annotation type corresponding - * to the annotation represented by this annotation structure. - */ - uint16_t type_index; - /** - * map between element_name_index and value. - * - * The value of the element_name_index item must be a valid index into the constant_pool table. - * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure representing - * a valid field descriptor (§4.3.2) that denotes the name of the annotation type element represented - * by this element_value_pairs entry. - */ - value_list name_val_pairs; - /** - * Reference to the parent constant pool - */ - constant_pool & pool; - public: - annotation(uint16_t type_index, constant_pool& pool):type_index(type_index), pool(pool) {}; - ~annotation() - { - for(unsigned i = 0 ; i < name_val_pairs.size(); i++) - { - delete name_val_pairs[i].second; - } - } - void add_pair(uint16_t key, element_value * value) - { - name_val_pairs.push_back(std::make_pair(key, value)); - }; - value_list::const_iterator begin() - { - return name_val_pairs.cbegin(); - } - value_list::const_iterator end() - { - return name_val_pairs.cend(); - } - std::string toString(); - static annotation * read(util::membuffer & input, constant_pool & pool); - }; - typedef std::vector<annotation *> annotation_table; - - - /// type for simple value annotation elements - class element_value_simple : public element_value - { - protected: - /// index of the constant in the constant pool - uint16_t index; - public: - element_value_simple(element_value_type type, uint16_t index , constant_pool& pool): - element_value(type, pool), index(index) - { - // TODO: verify consistency - }; - uint16_t getIndex() - { - return index; - } - virtual std::string toString() - { - return pool[index].toString(); - }; - }; - /// The enum_const_value item is used if the tag item is 'e'. - class element_value_enum : public element_value - { - protected: - /** - * The value of the type_name_index item must be a valid index into the constant_pool table. - * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure - * representing a valid field descriptor (§4.3.2) that denotes the internal form of the binary - * name (§4.2.1) of the type of the enum constant represented by this element_value structure. - */ - uint16_t typeIndex; - /** - * The value of the const_name_index item must be a valid index into the constant_pool table. - * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure - * representing the simple name of the enum constant represented by this element_value structure. - */ - uint16_t valueIndex; - public: - element_value_enum(element_value_type type, uint16_t typeIndex, uint16_t valueIndex, constant_pool& pool): - element_value(type, pool), typeIndex(typeIndex), valueIndex(valueIndex) - { - // TODO: verify consistency - } - uint16_t getValueIndex() - { - return valueIndex; - } - uint16_t getTypeIndex() - { - return typeIndex; - } - virtual std::string toString() - { - return "enum value"; - }; - }; - - class element_value_class : public element_value - { - protected: - /** - * The class_info_index item must be a valid index into the constant_pool table. - * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure - * representing the return descriptor (§4.3.3) of the type that is reified by the class - * represented by this element_value structure. - * - * For example, 'V' for Void.class, 'Ljava/lang/Object;' for Object, etc. - * - * Or in plain english, you can store type information in annotations. Yay. - */ - uint16_t classIndex; - public: - element_value_class(element_value_type type, uint16_t classIndex, constant_pool& pool): - element_value(type, pool), classIndex(classIndex) - { - // TODO: verify consistency - } - uint16_t getIndex() - { - return classIndex; - } - virtual std::string toString() - { - return "class"; - }; - }; - - /// nested annotations... yay - class element_value_annotation : public element_value - { - private: - annotation * nestedAnnotation; - public: - element_value_annotation(element_value_type type, annotation * nestedAnnotation, constant_pool& pool): - element_value(type, pool), nestedAnnotation(nestedAnnotation) - {}; - ~element_value_annotation() - { - if(nestedAnnotation) - { - delete nestedAnnotation; - nestedAnnotation = nullptr; - } - } - virtual std::string toString() - { - return "nested annotation"; - }; - }; - - /// and arrays! - class element_value_array : public element_value - { - public: - typedef std::vector <element_value *> elem_vec; - protected: - elem_vec values; - public: - element_value_array ( element_value_type type, std::vector <element_value *>& values, constant_pool& pool ): - element_value(type, pool), values(values) - {}; - ~element_value_array () - { - for(unsigned i = 0; i < values.size();i++) - { - delete values[i]; - } - }; - elem_vec::const_iterator begin() + uint16_t typeIndex; + /** + * The value of the const_name_index item must be a valid index into the constant_pool + * table. + * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure + * representing the simple name of the enum constant represented by this element_value + * structure. + */ + uint16_t valueIndex; + +public: + element_value_enum(element_value_type type, uint16_t typeIndex, uint16_t valueIndex, + constant_pool &pool) + : element_value(type, pool), typeIndex(typeIndex), valueIndex(valueIndex) + { + // TODO: verify consistency + } + uint16_t getValueIndex() + { + return valueIndex; + } + uint16_t getTypeIndex() + { + return typeIndex; + } + virtual std::string toString() + { + return "enum value"; + } + ; +}; + +class element_value_class : public element_value +{ +protected: + /** + * The class_info_index item must be a valid index into the constant_pool table. + * The constant_pool entry at that index must be a CONSTANT_Utf8_info (§4.4.7) structure + * representing the return descriptor (§4.3.3) of the type that is reified by the class + * represented by this element_value structure. + * + * For example, 'V' for Void.class, 'Ljava/lang/Object;' for Object, etc. + * + * Or in plain english, you can store type information in annotations. Yay. + */ + uint16_t classIndex; + +public: + element_value_class(element_value_type type, uint16_t classIndex, constant_pool &pool) + : element_value(type, pool), classIndex(classIndex) + { + // TODO: verify consistency + } + uint16_t getIndex() + { + return classIndex; + } + virtual std::string toString() + { + return "class"; + } + ; +}; + +/// nested annotations... yay +class element_value_annotation : public element_value +{ +private: + annotation *nestedAnnotation; + +public: + element_value_annotation(element_value_type type, annotation *nestedAnnotation, + constant_pool &pool) + : element_value(type, pool), nestedAnnotation(nestedAnnotation) {}; + ~element_value_annotation() + { + if (nestedAnnotation) { - return values.cbegin(); + delete nestedAnnotation; + nestedAnnotation = nullptr; } - elem_vec::const_iterator end() + } + virtual std::string toString() + { + return "nested annotation"; + } + ; +}; + +/// and arrays! +class element_value_array : public element_value +{ +public: + typedef std::vector<element_value *> elem_vec; + +protected: + elem_vec values; + +public: + element_value_array(element_value_type type, std::vector<element_value *> &values, + constant_pool &pool) + : element_value(type, pool), values(values) {}; + ~element_value_array() + { + for (unsigned i = 0; i < values.size(); i++) { - return values.cend(); + delete values[i]; } - virtual std::string toString() - { - return "array"; - }; - }; + } + ; + elem_vec::const_iterator begin() + { + return values.cbegin(); + } + elem_vec::const_iterator end() + { + return values.cend(); + } + virtual std::string toString() + { + return "array"; + } + ; +}; }
\ No newline at end of file diff --git a/depends/classparser/src/classfile.h b/depends/classparser/src/classfile.h index 33207e99..a5e7ee50 100644 --- a/depends/classparser/src/classfile.h +++ b/depends/classparser/src/classfile.h @@ -5,149 +5,152 @@ #include <map> namespace java { - /** - * Class representing a Java .class file - */ - class classfile : public util::membuffer +/** + * Class representing a Java .class file + */ +class classfile : public util::membuffer +{ +public: + classfile(char *data, std::size_t size) : membuffer(data, size) { - public: - classfile(char * data, std::size_t size) : membuffer(data, size) + valid = false; + is_synthetic = false; + read_be(magic); + if (magic != 0xCAFEBABE) + throw new classfile_exception(); + read_be(minor_version); + read_be(major_version); + constants.load(*this); + read_be(access_flags); + read_be(this_class); + read_be(super_class); + + // Interfaces + uint16_t iface_count = 0; + read_be(iface_count); + while (iface_count) { - valid = false; - is_synthetic = false; - read_be(magic); - if(magic != 0xCAFEBABE) - throw new classfile_exception(); - read_be(minor_version); - read_be(major_version); - constants.load(*this); - read_be(access_flags); - read_be(this_class); - read_be(super_class); - - // Interfaces - uint16_t iface_count = 0; - read_be(iface_count); - while (iface_count) - { - uint16_t iface; - read_be(iface); - interfaces.push_back(iface); - iface_count --; - } - - // Fields - // read fields (and attributes from inside fields) (and possible inner classes. yay for recursion!) - // for now though, we will ignore all attributes - /* - * field_info - * { - * u2 access_flags; - * u2 name_index; - * u2 descriptor_index; - * u2 attributes_count; - * attribute_info attributes[attributes_count]; - * } - */ - uint16_t field_count = 0; - read_be(field_count); - while (field_count) - { - // skip field stuff - skip(6); - // and skip field attributes - uint16_t attr_count = 0; - read_be(attr_count); - while(attr_count) - { - skip(2); - uint32_t attr_length = 0; - read_be(attr_length); - skip(attr_length); - attr_count --; - } - field_count --; - } + uint16_t iface; + read_be(iface); + interfaces.push_back(iface); + iface_count--; + } - // class methods - /* - * method_info - * { - * u2 access_flags; - * u2 name_index; - * u2 descriptor_index; - * u2 attributes_count; - * attribute_info attributes[attributes_count]; - * } - */ - uint16_t method_count = 0; - read_be(method_count); - while( method_count ) + // Fields + // read fields (and attributes from inside fields) (and possible inner classes. yay for + // recursion!) + // for now though, we will ignore all attributes + /* + * field_info + * { + * u2 access_flags; + * u2 name_index; + * u2 descriptor_index; + * u2 attributes_count; + * attribute_info attributes[attributes_count]; + * } + */ + uint16_t field_count = 0; + read_be(field_count); + while (field_count) + { + // skip field stuff + skip(6); + // and skip field attributes + uint16_t attr_count = 0; + read_be(attr_count); + while (attr_count) { - skip(6); - // and skip method attributes - uint16_t attr_count = 0; - read_be(attr_count); - while(attr_count) - { - skip(2); - uint32_t attr_length = 0; - read_be(attr_length); - skip(attr_length); - attr_count --; - } - method_count --; + skip(2); + uint32_t attr_length = 0; + read_be(attr_length); + skip(attr_length); + attr_count--; } + field_count--; + } - // class attributes - // there are many kinds of attributes. this is just the generic wrapper structure. - // type is decided by attribute name. extensions to the standard are *possible* - // class annotations are one kind of a attribute (one per class) - /* - * attribute_info - * { - * u2 attribute_name_index; - * u4 attribute_length; - * u1 info[attribute_length]; - * } - */ - uint16_t class_attr_count = 0; - read_be(class_attr_count); - while(class_attr_count) + // class methods + /* + * method_info + * { + * u2 access_flags; + * u2 name_index; + * u2 descriptor_index; + * u2 attributes_count; + * attribute_info attributes[attributes_count]; + * } + */ + uint16_t method_count = 0; + read_be(method_count); + while (method_count) + { + skip(6); + // and skip method attributes + uint16_t attr_count = 0; + read_be(attr_count); + while (attr_count) { - uint16_t name_idx = 0; - read_be(name_idx); + skip(2); uint32_t attr_length = 0; read_be(attr_length); - - auto name = constants[name_idx]; - if(name.str_data == "RuntimeVisibleAnnotations") + skip(attr_length); + attr_count--; + } + method_count--; + } + + // class attributes + // there are many kinds of attributes. this is just the generic wrapper structure. + // type is decided by attribute name. extensions to the standard are *possible* + // class annotations are one kind of a attribute (one per class) + /* + * attribute_info + * { + * u2 attribute_name_index; + * u4 attribute_length; + * u1 info[attribute_length]; + * } + */ + uint16_t class_attr_count = 0; + read_be(class_attr_count); + while (class_attr_count) + { + uint16_t name_idx = 0; + read_be(name_idx); + uint32_t attr_length = 0; + read_be(attr_length); + + auto name = constants[name_idx]; + if (name.str_data == "RuntimeVisibleAnnotations") + { + uint16_t num_annotations = 0; + read_be(num_annotations); + while (num_annotations) { - uint16_t num_annotations = 0; - read_be(num_annotations); - while (num_annotations) - { - visible_class_annotations.push_back(annotation::read(*this, constants)); - num_annotations --; - } + visible_class_annotations.push_back(annotation::read(*this, constants)); + num_annotations--; } - else skip(attr_length); - class_attr_count --; } - valid = true; - }; - bool valid; - bool is_synthetic; - uint32_t magic; - uint16_t minor_version; - uint16_t major_version; - constant_pool constants; - uint16_t access_flags; - uint16_t this_class; - uint16_t super_class; - // interfaces this class implements ? must be. investigate. - std::vector<uint16_t> interfaces; - // FIXME: doesn't free up memory on delete - java::annotation_table visible_class_annotations; - }; + else + skip(attr_length); + class_attr_count--; + } + valid = true; + } + ; + bool valid; + bool is_synthetic; + uint32_t magic; + uint16_t minor_version; + uint16_t major_version; + constant_pool constants; + uint16_t access_flags; + uint16_t this_class; + uint16_t super_class; + // interfaces this class implements ? must be. investigate. + std::vector<uint16_t> interfaces; + // FIXME: doesn't free up memory on delete + java::annotation_table visible_class_annotations; +}; }
\ No newline at end of file diff --git a/depends/classparser/src/constants.h b/depends/classparser/src/constants.h index 61aa5687..242b943e 100644 --- a/depends/classparser/src/constants.h +++ b/depends/classparser/src/constants.h @@ -4,209 +4,217 @@ namespace java { - class constant +class constant +{ +public: + enum type_t : uint8_t { - public: - enum type_t : uint8_t - { - j_hole = 0, // HACK: this is a hole in the array, because java is crazy - j_string_data = 1, - j_int = 3, - j_float = 4, - j_long = 5, - j_double = 6, - j_class = 7, - j_string = 8, - j_fieldref = 9, - j_methodref = 10, - j_interface_methodref = 11, - j_nameandtype = 12 - } type; + j_hole = 0, // HACK: this is a hole in the array, because java is crazy + j_string_data = 1, + j_int = 3, + j_float = 4, + j_long = 5, + j_double = 6, + j_class = 7, + j_string = 8, + j_fieldref = 9, + j_methodref = 10, + j_interface_methodref = 11, + j_nameandtype = 12 + } type; - constant(util::membuffer & buf ) - { - buf.read(type); - // invalid constant type! - if(type > j_nameandtype || type == (type_t)0 || type == (type_t)2) - throw new classfile_exception(); - - // load data depending on type - switch(type) - { - case j_float: - case j_int: - buf.read_be(int_data); // same as float data really - break; - case j_double: - case j_long: - buf.read_be(long_data); // same as double - break; - case j_class: - buf.read_be(ref_type.class_idx); - break; - case j_fieldref: - case j_methodref: - case j_interface_methodref: - buf.read_be(ref_type.class_idx); - buf.read_be(ref_type.name_and_type_idx); - break; - case j_string: - buf.read_be(index); - break; - case j_string_data: - // HACK HACK: for now, we call these UTF-8 and do no further processing. - // Later, we should do some decoding. It's really modified UTF-8 - // * U+0000 is represented as 0xC0,0x80 invalid character - // * any single zero byte ends the string - // * characters above U+10000 are encoded like in CESU-8 - buf.read_jstr(str_data); - break; - case j_nameandtype: - buf.read_be(name_and_type.name_index); - buf.read_be(name_and_type.descriptor_index); - break; - } - } + constant(util::membuffer &buf) + { + buf.read(type); + // invalid constant type! + if (type > j_nameandtype || type == (type_t)0 || type == (type_t)2) + throw new classfile_exception(); - constant(int fake) + // load data depending on type + switch (type) { - type = j_hole; + case j_float: + case j_int: + buf.read_be(int_data); // same as float data really + break; + case j_double: + case j_long: + buf.read_be(long_data); // same as double + break; + case j_class: + buf.read_be(ref_type.class_idx); + break; + case j_fieldref: + case j_methodref: + case j_interface_methodref: + buf.read_be(ref_type.class_idx); + buf.read_be(ref_type.name_and_type_idx); + break; + case j_string: + buf.read_be(index); + break; + case j_string_data: + // HACK HACK: for now, we call these UTF-8 and do no further processing. + // Later, we should do some decoding. It's really modified UTF-8 + // * U+0000 is represented as 0xC0,0x80 invalid character + // * any single zero byte ends the string + // * characters above U+10000 are encoded like in CESU-8 + buf.read_jstr(str_data); + break; + case j_nameandtype: + buf.read_be(name_and_type.name_index); + buf.read_be(name_and_type.descriptor_index); + break; } + } + + constant(int fake) + { + type = j_hole; + } - std::string toString() + std::string toString() + { + std::ostringstream ss; + switch (type) { - std::ostringstream ss; - switch(type) - { - case j_hole: - ss << "Fake legacy entry"; - break; - case j_float: - ss << "Float: " << float_data; - break; - case j_double: - ss << "Double: " << double_data; - break; - case j_int: - ss << "Int: " << int_data; - break; - case j_long: - ss << "Long: " << long_data; - break; - case j_string_data: - ss << "StrData: " << str_data; - break; - case j_string: - ss << "Str: " << index; - break; - case j_fieldref: - ss << "FieldRef: " << ref_type.class_idx << " " << ref_type.name_and_type_idx; - break; - case j_methodref: - ss << "MethodRef: " << ref_type.class_idx << " " << ref_type.name_and_type_idx; - break; - case j_interface_methodref: - ss << "IfMethodRef: " << ref_type.class_idx << " " << ref_type.name_and_type_idx; - break; - case j_class: - ss << "Class: " << ref_type.class_idx; - break; - case j_nameandtype: - ss << "NameAndType: " << name_and_type.name_index << " " << name_and_type.descriptor_index; - break; - } - return ss.str(); + case j_hole: + ss << "Fake legacy entry"; + break; + case j_float: + ss << "Float: " << float_data; + break; + case j_double: + ss << "Double: " << double_data; + break; + case j_int: + ss << "Int: " << int_data; + break; + case j_long: + ss << "Long: " << long_data; + break; + case j_string_data: + ss << "StrData: " << str_data; + break; + case j_string: + ss << "Str: " << index; + break; + case j_fieldref: + ss << "FieldRef: " << ref_type.class_idx << " " << ref_type.name_and_type_idx; + break; + case j_methodref: + ss << "MethodRef: " << ref_type.class_idx << " " << ref_type.name_and_type_idx; + break; + case j_interface_methodref: + ss << "IfMethodRef: " << ref_type.class_idx << " " << ref_type.name_and_type_idx; + break; + case j_class: + ss << "Class: " << ref_type.class_idx; + break; + case j_nameandtype: + ss << "NameAndType: " << name_and_type.name_index << " " + << name_and_type.descriptor_index; + break; } + return ss.str(); + } - std::string str_data; /** String data in 'modified utf-8'.*/ - // store everything here. - union + std::string str_data; /** String data in 'modified utf-8'.*/ + // store everything here. + union + { + int32_t int_data; + int64_t long_data; + float float_data; + double double_data; + uint16_t index; + struct { - int32_t int_data; - int64_t long_data; - float float_data; - double double_data; - uint16_t index; - struct - { - /** - * Class reference: - * an index within the constant pool to a UTF-8 string containing - * the fully qualified class name (in internal format) - * Used for j_class, j_fieldref, j_methodref and j_interface_methodref - */ - uint16_t class_idx; - // used for j_fieldref, j_methodref and j_interface_methodref - uint16_t name_and_type_idx; - } ref_type; - struct - { - uint16_t name_index; - uint16_t descriptor_index; - } name_and_type; - }; + /** + * Class reference: + * an index within the constant pool to a UTF-8 string containing + * the fully qualified class name (in internal format) + * Used for j_class, j_fieldref, j_methodref and j_interface_methodref + */ + uint16_t class_idx; + // used for j_fieldref, j_methodref and j_interface_methodref + uint16_t name_and_type_idx; + } ref_type; + struct + { + uint16_t name_index; + uint16_t descriptor_index; + } name_and_type; }; +}; +/** + * A helper class that represents the custom container used in Java class file for storage of + * constants + */ +class constant_pool +{ +public: + /** + * Create a pool of constants + */ + constant_pool() + { + } /** - * A helper class that represents the custom container used in Java class file for storage of constants + * Load a java constant pool */ - class constant_pool + void load(util::membuffer &buf) { - public: - /** - * Create a pool of constants - */ - constant_pool(){} - /** - * Load a java constant pool - */ - void load(util::membuffer & buf) + uint16_t length = 0; + buf.read_be(length); + length--; + uint16_t index = 1; + const constant *last_constant = nullptr; + while (length) { - uint16_t length = 0; - buf.read_be(length); - length --; - uint16_t index = 1; - const constant * last_constant = nullptr; - while(length) + const constant &cnst = constant(buf); + constants.push_back(cnst); + last_constant = &constants[constants.size() - 1]; + if (last_constant->type == constant::j_double || + last_constant->type == constant::j_long) { - const constant & cnst = constant(buf); - constants.push_back(cnst); - last_constant = &constants[constants.size() - 1]; - if(last_constant->type == constant::j_double || last_constant->type == constant::j_long) - { - // push in a fake constant to preserve indexing - constants.push_back(constant(0)); - length-=2; - index+=2; - } - else - { - length--; - index++; - } + // push in a fake constant to preserve indexing + constants.push_back(constant(0)); + length -= 2; + index += 2; } - } - typedef std::vector<java::constant> container_type; - /** - * Access constants based on jar file index numbers (index of the first element is 1) - */ - java::constant & operator[](std::size_t constant_index) - { - if(constant_index == 0 || constant_index > constants.size()) + else { - throw new classfile_exception(); + length--; + index++; } - return constants[constant_index - 1]; - }; - container_type::const_iterator begin() const - { - return constants.begin(); - }; - container_type::const_iterator end() const + } + } + typedef std::vector<java::constant> container_type; + /** + * Access constants based on jar file index numbers (index of the first element is 1) + */ + java::constant &operator[](std::size_t constant_index) + { + if (constant_index == 0 || constant_index > constants.size()) { - return constants.end(); + throw new classfile_exception(); } - private: - container_type constants; - }; + return constants[constant_index - 1]; + } + ; + container_type::const_iterator begin() const + { + return constants.begin(); + } + ; + container_type::const_iterator end() const + { + return constants.end(); + } + +private: + container_type constants; +}; } diff --git a/depends/classparser/src/errors.h b/depends/classparser/src/errors.h index c02b07c8..ddbbd828 100644 --- a/depends/classparser/src/errors.h +++ b/depends/classparser/src/errors.h @@ -2,5 +2,7 @@ #include <exception> namespace java { - class classfile_exception : public std::exception {}; +class classfile_exception : public std::exception +{ +}; } diff --git a/depends/classparser/src/javaendian.h b/depends/classparser/src/javaendian.h index fa6207fe..d488b382 100644 --- a/depends/classparser/src/javaendian.h +++ b/depends/classparser/src/javaendian.h @@ -10,53 +10,67 @@ namespace util inline uint64_t bigswap(uint64_t x) { return x; -}; +} +; inline uint32_t bigswap(uint32_t x) { return x; -}; +} +; inline uint16_t bigswap(uint16_t x) { return x; -}; +} +; inline int64_t bigswap(int64_t x) { return x; -}; +} +; inline int32_t bigswap(int32_t x) { return x; -}; +} +; inline int16_t bigswap(int16_t x) { return x; -}; +} +; #else inline uint64_t bigswap(uint64_t x) { - return (x>>56) | ((x<<40) & 0x00FF000000000000) | ((x<<24) & 0x0000FF0000000000) | ((x<<8) & 0x000000FF00000000) | - ((x>>8) & 0x00000000FF000000) | ((x>>24) & 0x0000000000FF0000) | ((x>>40) & 0x000000000000FF00) | (x<<56); -}; + return (x >> 56) | ((x << 40) & 0x00FF000000000000) | ((x << 24) & 0x0000FF0000000000) | + ((x << 8) & 0x000000FF00000000) | ((x >> 8) & 0x00000000FF000000) | + ((x >> 24) & 0x0000000000FF0000) | ((x >> 40) & 0x000000000000FF00) | (x << 56); +} +; inline uint32_t bigswap(uint32_t x) { - return (x>>24) | ((x<<8) & 0x00FF0000) | ((x>>8) & 0x0000FF00) | (x<<24); -}; + return (x >> 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x << 24); +} +; inline uint16_t bigswap(uint16_t x) { - return (x>>8) | (x<<8); -}; + return (x >> 8) | (x << 8); +} +; inline int64_t bigswap(int64_t x) { - return (x>>56) | ((x<<40) & 0x00FF000000000000) | ((x<<24) & 0x0000FF0000000000) | ((x<<8) & 0x000000FF00000000) | - ((x>>8) & 0x00000000FF000000) | ((x>>24) & 0x0000000000FF0000) | ((x>>40) & 0x000000000000FF00) | (x<<56); -}; + return (x >> 56) | ((x << 40) & 0x00FF000000000000) | ((x << 24) & 0x0000FF0000000000) | + ((x << 8) & 0x000000FF00000000) | ((x >> 8) & 0x00000000FF000000) | + ((x >> 24) & 0x0000000000FF0000) | ((x >> 40) & 0x000000000000FF00) | (x << 56); +} +; inline int32_t bigswap(int32_t x) { - return (x>>24) | ((x<<8) & 0x00FF0000) | ((x>>8) & 0x0000FF00) | (x<<24); -}; + return (x >> 24) | ((x << 8) & 0x00FF0000) | ((x >> 8) & 0x0000FF00) | (x << 24); +} +; inline int16_t bigswap(int16_t x) { - return (x>>8) | (x<<8); -}; + return (x >> 8) | (x << 8); +} +; #endif } diff --git a/depends/classparser/src/javautils.cpp b/depends/classparser/src/javautils.cpp index 3a5c6934..9f9ac263 100644 --- a/depends/classparser/src/javautils.cpp +++ b/depends/classparser/src/javautils.cpp @@ -49,24 +49,28 @@ QString GetMinecraftJarVersion(QString jarName) Minecraft.read(classfile, size); // parse Minecraft.class - try { + try + { char *temp = classfile; java::classfile MinecraftClass(temp, size); java::constant_pool constants = MinecraftClass.constants; - for(java::constant_pool::container_type::const_iterator iter=constants.begin(); - iter != constants.end(); iter++) + for (java::constant_pool::container_type::const_iterator iter = constants.begin(); + iter != constants.end(); iter++) { - const java::constant & constant = *iter; + const java::constant &constant = *iter; if (constant.type != java::constant::j_string_data) continue; - const std::string & str = constant.str_data; + const std::string &str = constant.str_data; if (str.compare(0, 20, "Minecraft Minecraft ") == 0) { version = str.substr(20).data(); break; } } - } catch(java::classfile_exception &) {} + } + catch (java::classfile_exception &) + { + } // clean up delete[] classfile; @@ -76,5 +80,4 @@ QString GetMinecraftJarVersion(QString jarName) return version; } - } diff --git a/depends/classparser/src/membuffer.h b/depends/classparser/src/membuffer.h index 2ea3a69b..ab83412a 100644 --- a/depends/classparser/src/membuffer.h +++ b/depends/classparser/src/membuffer.h @@ -7,58 +7,57 @@ namespace util { - class membuffer +class membuffer +{ +public: + membuffer(char *buffer, std::size_t size) + { + current = start = buffer; + end = start + size; + } + ~membuffer() + { + // maybe? possibly? left out to avoid confusion. for now. + // delete start; + } + /** + * Read some value. That's all ;) + */ + template <class T> void read(T &val) + { + val = *(T *)current; + current += sizeof(T); + } + /** + * Read a big-endian number + * valid for 2-byte, 4-byte and 8-byte variables + */ + template <class T> void read_be(T &val) { - public: - membuffer(char * buffer, std::size_t size) - { - current = start = buffer; - end = start + size; - } - ~membuffer() - { - // maybe? possibly? left out to avoid confusion. for now. - //delete start; - } - /** - * Read some value. That's all ;) - */ - template <class T> - void read(T& val) - { - val = *(T *)current; - current += sizeof(T); - } - /** - * Read a big-endian number - * valid for 2-byte, 4-byte and 8-byte variables - */ - template <class T> - void read_be(T& val) - { - val = util::bigswap(*(T *)current); - current += sizeof(T); - } - /** - * Read a string in the format: - * 2B length (big endian, unsigned) - * length bytes data - */ - void read_jstr(std::string & str) - { - uint16_t length = 0; - read_be(length); - str.append(current,length); - current += length; - } - /** - * Skip N bytes - */ - void skip (std::size_t N) - { - current += N; - } - private: - char * start, *end, *current; - }; + val = util::bigswap(*(T *)current); + current += sizeof(T); + } + /** + * Read a string in the format: + * 2B length (big endian, unsigned) + * length bytes data + */ + void read_jstr(std::string &str) + { + uint16_t length = 0; + read_be(length); + str.append(current, length); + current += length; + } + /** + * Skip N bytes + */ + void skip(std::size_t N) + { + current += N; + } + +private: + char *start, *end, *current; +}; } diff --git a/depends/launcher/MCFrame.java b/depends/launcher/MCFrame.java index d6ebb240..ce4564c9 100644 --- a/depends/launcher/MCFrame.java +++ b/depends/launcher/MCFrame.java @@ -1,12 +1,12 @@ -// +// // Copyright 2012 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. @@ -30,94 +30,85 @@ import java.awt.image.BufferedImage; public class MCFrame extends Frame implements WindowListener { - private Launcher appletWrap = null; - public MCFrame(String title) - { - super(title); - BufferedImage image = null; - try - { - image = ImageIO.read(new File("icon.png")); - setIconImage(image); - } - catch (IOException e) - { - e.printStackTrace(); - } - this.addWindowListener(this); - } + private Launcher appletWrap = null; + public MCFrame ( String title ) + { + super ( title ); + BufferedImage image = null; + try { + image = ImageIO.read ( new File ( "icon.png" ) ); + setIconImage ( image ); + } catch ( IOException e ) { + e.printStackTrace(); + } + this.addWindowListener ( this ); + } + + public void start ( Applet mcApplet, String user, String session, Dimension winSize, boolean maximize ) + { + try { + appletWrap = new Launcher ( mcApplet, new URL ( "http://www.minecraft.net/game" ) ); + } catch ( MalformedURLException ignored ) {} + + appletWrap.setParameter ( "username", user ); + appletWrap.setParameter ( "sessionid", session ); + appletWrap.setParameter ( "stand-alone", "true" ); // Show the quit button. + mcApplet.setStub ( appletWrap ); + + this.add ( appletWrap ); + appletWrap.setPreferredSize ( winSize ); + this.pack(); + this.setLocationRelativeTo ( null ); + this.setResizable ( true ); + if ( maximize ) { + this.setExtendedState ( MAXIMIZED_BOTH ); + } - public void start(Applet mcApplet, String user, String session, Dimension winSize, boolean maximize) - { - try - { - appletWrap = new Launcher(mcApplet, new URL("http://www.minecraft.net/game")); - } - catch (MalformedURLException ignored){} - - appletWrap.setParameter("username", user); - appletWrap.setParameter("sessionid", session); - appletWrap.setParameter("stand-alone", "true"); // Show the quit button. - mcApplet.setStub(appletWrap); - - this.add(appletWrap); - appletWrap.setPreferredSize(winSize); - this.pack(); - this.setLocationRelativeTo(null); - this.setResizable(true); - if (maximize) - this.setExtendedState(MAXIMIZED_BOTH); - - validate(); - appletWrap.init(); - appletWrap.start(); - setVisible(true); - } + validate(); + appletWrap.init(); + appletWrap.start(); + setVisible ( true ); + } - @Override - public void windowActivated(WindowEvent e) {} + @Override + public void windowActivated ( WindowEvent e ) {} - @Override - public void windowClosed(WindowEvent e) {} + @Override + public void windowClosed ( WindowEvent e ) {} - @Override - public void windowClosing(WindowEvent e) - { - new Thread() - { - public void run() - { - try - { - Thread.sleep(30000L); - } catch (InterruptedException localInterruptedException) - { - localInterruptedException.printStackTrace(); - } - System.out.println("FORCING EXIT!"); - System.exit(0); - } - } - .start(); + @Override + public void windowClosing ( WindowEvent e ) + { + new Thread() { + public void run() { + try { + Thread.sleep ( 30000L ); + } catch ( InterruptedException localInterruptedException ) { + localInterruptedException.printStackTrace(); + } + System.out.println ( "FORCING EXIT!" ); + System.exit ( 0 ); + } + } + .start(); - if (appletWrap != null) - { - appletWrap.stop(); - appletWrap.destroy(); - } - // old minecraft versions can hang without this >_< - System.exit(0); - } + if ( appletWrap != null ) { + appletWrap.stop(); + appletWrap.destroy(); + } + // old minecraft versions can hang without this >_< + System.exit ( 0 ); + } - @Override - public void windowDeactivated(WindowEvent e) {} + @Override + public void windowDeactivated ( WindowEvent e ) {} - @Override - public void windowDeiconified(WindowEvent e) {} + @Override + public void windowDeiconified ( WindowEvent e ) {} - @Override - public void windowIconified(WindowEvent e) {} + @Override + public void windowIconified ( WindowEvent e ) {} - @Override - public void windowOpened(WindowEvent e) {} -}
\ No newline at end of file + @Override + public void windowOpened ( WindowEvent e ) {} +} diff --git a/depends/pack200/src/unpack.cpp b/depends/pack200/src/unpack.cpp index d7de1b22..b286269d 100644 --- a/depends/pack200/src/unpack.cpp +++ b/depends/pack200/src/unpack.cpp @@ -1523,8 +1523,8 @@ band **unpacker::attr_definitions::buildBands(unpacker::layout_definition *lo) call.le_body[0] = &cble; // Distinguish backward calls and callables: assert(cble.le_kind == EK_CBLE); - //FIXME: hit this one - //assert(cble.le_len == call_num); + // FIXME: hit this one + // assert(cble.le_len == call_num); cble.le_back |= call.le_back; } calls_to_link.popTo(0); @@ -2778,8 +2778,8 @@ void unpacker::putlayout(band **body) { band &cble = *b.le_body[0]; assert(cble.le_kind == EK_CBLE); - //FIXME: hit this one - //assert(cble.le_len == b.le_len); + // FIXME: hit this one + // assert(cble.le_len == b.le_len); putlayout(cble.le_body); } break; diff --git a/depends/settings/include/basicsettingsobject.h b/depends/settings/include/basicsettingsobject.h index b7e5851d..387a3646 100644 --- a/depends/settings/include/basicsettingsobject.h +++ b/depends/settings/include/basicsettingsobject.h @@ -3,7 +3,7 @@ * 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 @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef BASICSETTINGSOBJECT_H -#define BASICSETTINGSOBJECT_H +#pragma once #include <QObject> #include <QSettings> @@ -31,14 +30,13 @@ class LIBSETTINGS_EXPORT BasicSettingsObject : public SettingsObject Q_OBJECT public: explicit BasicSettingsObject(QObject *parent = 0); - -protected slots: + +protected +slots: virtual void changeSetting(const Setting &setting, QVariant value); - + protected: virtual QVariant retrieveValue(const Setting &setting); - + QSettings config; }; - -#endif // BASICSETTINGSOBJECT_H diff --git a/depends/settings/include/inifile.h b/depends/settings/include/inifile.h index 8d30a258..27da7bf0 100644 --- a/depends/settings/include/inifile.h +++ b/depends/settings/include/inifile.h @@ -3,7 +3,7 @@ * 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 @@ -14,6 +14,7 @@ */ #pragma once + #include <QString> #include <QVariant> #include <QIODevice> @@ -25,11 +26,11 @@ class LIBSETTINGS_EXPORT INIFile : public QMap<QString, QVariant> { public: explicit INIFile(); - + bool loadFile(QByteArray file); bool loadFile(QString fileName); bool saveFile(QString fileName); - + QVariant get(QString key, QVariant def) const; void set(QString key, QVariant val); QString unescape(QString orig); diff --git a/depends/settings/include/inisettingsobject.h b/depends/settings/include/inisettingsobject.h index 03d6fe05..8badc0c6 100644 --- a/depends/settings/include/inisettingsobject.h +++ b/depends/settings/include/inisettingsobject.h @@ -3,7 +3,7 @@ * 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 @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef INISETTINGSOBJECT_H -#define INISETTINGSOBJECT_H +#pragma once #include <QObject> @@ -22,7 +21,7 @@ #include "settingsobject.h" -#include "libutil_config.h" +#include "libsettings_config.h" /*! * \brief A settings object that stores its settings in an INIFile. @@ -32,29 +31,31 @@ class LIBSETTINGS_EXPORT INISettingsObject : public SettingsObject Q_OBJECT public: explicit INISettingsObject(const QString &path, QObject *parent = 0); - + /*! * \brief Gets the path to the INI file. * \return The path to the INI file. */ - virtual QString filePath() const { return m_filePath; } - + virtual QString filePath() const + { + return m_filePath; + } + /*! * \brief Sets the path to the INI file and reloads it. * \param filePath The INI file's new path. */ virtual void setFilePath(const QString &filePath); - -protected slots: + +protected +slots: virtual void changeSetting(const Setting &setting, QVariant value); - virtual void resetSetting ( const Setting& setting ); - + virtual void resetSetting(const Setting &setting); + protected: virtual QVariant retrieveValue(const Setting &setting); - + INIFile m_ini; - + QString m_filePath; }; - -#endif // INISETTINGSOBJECT_H diff --git a/depends/settings/include/keyring.h b/depends/settings/include/keyring.h index 299b14b0..747211de 100644 --- a/depends/settings/include/keyring.h +++ b/depends/settings/include/keyring.h @@ -15,8 +15,7 @@ * limitations under the License. */ -#ifndef KEYRING_H -#define KEYRING_H +#pragma once #include <QString> @@ -79,14 +78,15 @@ public: * @return */ virtual void removeStoredAccount(QString service, QString username) = 0; - + protected: /// fall back to StubKeyring if false - virtual bool isValid() { return false; } + virtual bool isValid() + { + return false; + } private: static Keyring *m_instance; static void destroy(); }; - -#endif // KEYRING_H diff --git a/depends/settings/include/libsettings_config.h b/depends/settings/include/libsettings_config.h index 2ecfe1c1..ba77f640 100644 --- a/depends/settings/include/libsettings_config.h +++ b/depends/settings/include/libsettings_config.h @@ -3,7 +3,7 @@ * 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 @@ -18,11 +18,11 @@ #include <QtCore/QtGlobal> #ifdef LIBSETTINGS_STATIC - #define LIBSETTINGS_EXPORT +#define LIBSETTINGS_EXPORT +#else +#ifdef LIBSETTINGS_LIBRARY +#define LIBSETTINGS_EXPORT Q_DECL_EXPORT #else - #ifdef LIBSETTINGS_LIBRARY - #define LIBSETTINGS_EXPORT Q_DECL_EXPORT - #else - #define LIBSETTINGS_EXPORT Q_DECL_IMPORT - #endif +#define LIBSETTINGS_EXPORT Q_DECL_IMPORT +#endif #endif diff --git a/depends/settings/include/overridesetting.h b/depends/settings/include/overridesetting.h index 58bb6d40..3e60dc7c 100644 --- a/depends/settings/include/overridesetting.h +++ b/depends/settings/include/overridesetting.h @@ -3,7 +3,7 @@ * 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 @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef OVERRIDESETTING_H -#define OVERRIDESETTING_H +#pragma once #include <QObject> @@ -25,7 +24,7 @@ /*! * \brief A setting that 'overrides another.' * This means that the setting's default value will be the value of another setting. - * The other setting can be (and usually is) a part of a different SettingsObject + * The other setting can be (and usually is) a part of a different SettingsObject * than this one. */ class LIBSETTINGS_EXPORT OverrideSetting : public Setting @@ -33,11 +32,9 @@ class LIBSETTINGS_EXPORT OverrideSetting : public Setting Q_OBJECT public: explicit OverrideSetting(const QString &name, Setting *other, QObject *parent = 0); - + virtual QVariant defValue() const; - + protected: Setting *m_other; }; - -#endif // OVERRIDESETTING_H diff --git a/depends/settings/include/setting.h b/depends/settings/include/setting.h index a161ab50..39490207 100644 --- a/depends/settings/include/setting.h +++ b/depends/settings/include/setting.h @@ -3,7 +3,7 @@ * 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 @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef SETTING_H -#define SETTING_H +#pragma once #include <QObject> #include <QVariant> @@ -24,7 +23,7 @@ class SettingsObject; /*! - * + * */ class LIBSETTINGS_EXPORT Setting : public QObject { @@ -35,23 +34,30 @@ public: * \param parent The Setting's parent object. */ explicit Setting(QString id, QVariant defVal = QVariant(), QObject *parent = 0); - + /*! * \brief Gets this setting's ID. * This is used to refer to the setting within the application. - * \warning Changing the ID while the setting is registered with a SettingsObject results in undefined behavior. + * \warning Changing the ID while the setting is registered with a SettingsObject results in + * undefined behavior. * \return The ID of the setting. */ - virtual QString id() const { return m_id; } - + virtual QString id() const + { + return m_id; + } + /*! * \brief Gets this setting's config file key. * This is used to store the setting's value in the config file. It is usually * the same as the setting's ID, but it can be different. * \return The setting's config file key. */ - virtual QString configKey() const { return id(); } - + virtual QString configKey() const + { + return id(); + } + /*! * \brief Gets this setting's value as a QVariant. * This is done by calling the SettingsObject's retrieveValue() function. @@ -60,22 +66,23 @@ public: * \sa value() */ virtual QVariant get() const; - + /*! * \brief Gets this setting's actual value (I.E. not as a QVariant). * This function is just shorthand for get().value<T>() * \return The setting's actual value. */ - template<typename T> - inline T value() const { return get().value<T>(); } - - + template <typename T> inline T value() const + { + return get().value<T>(); + } + /*! * \brief Gets this setting's default value. * \return The default value of this setting. */ virtual QVariant defValue() const; - + signals: /*! * \brief Signal emitted when this Setting object's value changes. @@ -83,14 +90,15 @@ signals: * \param value This Setting object's new value. */ void settingChanged(const Setting &setting, QVariant value); - + /*! * \brief Signal emitted when this Setting object's value resets to default. * \param setting A reference to the Setting that changed. */ void settingReset(const Setting &setting); - -public slots: + +public +slots: /*! * \brief Changes the setting's value. * This is done by emitting the settingChanged() signal which will then be @@ -98,7 +106,7 @@ public slots: * \param value The new value. */ virtual void set(QVariant value); - + /*! * \brief Reset the setting to default * This is done by emitting the settingReset() signal which will then be @@ -106,9 +114,8 @@ public slots: * \param value The new value. */ virtual void reset(); + protected: QString m_id; QVariant m_defVal; }; - -#endif // SETTING_H diff --git a/depends/settings/include/settingsobject.h b/depends/settings/include/settingsobject.h index e8bf5c83..7a6b3cb6 100644 --- a/depends/settings/include/settingsobject.h +++ b/depends/settings/include/settingsobject.h @@ -3,7 +3,7 @@ * 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 @@ -23,9 +23,10 @@ class Setting; /*! - * \brief The SettingsObject handles communicating settings between the application and a settings file. + * \brief The SettingsObject handles communicating settings between the application and a + *settings file. * The class keeps a list of Setting objects. Each Setting object represents one - * of the application's settings. These Setting objects are registered with + * of the application's settings. These Setting objects are registered with * a SettingsObject and can be managed similarly to the way a list works. * * \author Andrew Okin @@ -38,9 +39,10 @@ class LIBSETTINGS_EXPORT SettingsObject : public QObject Q_OBJECT public: explicit SettingsObject(QObject *parent = 0); - + /*! - * \brief Registers the given setting with this SettingsObject and connects the necessary signals. + * \brief Registers the given setting with this SettingsObject and connects the necessary + * signals. * This will fail if there is already a setting with the same ID as * the one that is being registered. * \note Registering a setting object causes the SettingsObject to take ownership @@ -52,36 +54,38 @@ public: * \return True if successful. False if registry failed. */ virtual bool registerSetting(Setting *setting); - + /*! - * \brief Unregisters the given setting from this SettingsObject and disconnects its signals. - * \note This does not delete the setting. Furthermore, when the setting is + * \brief Unregisters the given setting from this SettingsObject and disconnects its + * signals. + * \note This does not delete the setting. Furthermore, when the setting is * unregistered, the SettingsObject drops ownership of the setting. This means * that if you unregister a setting, its parent is set to null and you become * responsible for freeing its memory. * \param setting The setting to unregister. */ virtual void unregisterSetting(Setting *setting); - - + /*! * \brief Gets the setting with the given ID. * \param id The ID of the setting to get. - * \return A pointer to the setting with the given ID. + * \return A pointer to the setting with the given ID. * Returns null if there is no setting with the given ID. * \sa operator []() */ virtual Setting *getSetting(const QString &id) const; - + /*! * \brief Same as getSetting() * \param id The ID of the setting to get. - * \return A pointer to the setting with the given ID. + * \return A pointer to the setting with the given ID. * \sa getSetting() */ - inline Setting *operator [](const QString &id) { return getSetting(id); } - - + inline Setting *operator[](const QString &id) + { + return getSetting(id); + } + /*! * \brief Gets the value of the setting with the given ID. * \param id The ID of the setting to get. @@ -89,7 +93,7 @@ public: * If no setting with the given ID exists, returns an invalid QVariant. */ virtual QVariant get(const QString &id) const; - + /*! * \brief Sets the value of the setting with the given ID. * If no setting with the given ID exists, returns false and logs to qDebug @@ -98,87 +102,88 @@ public: * \return True if successful, false if it failed. */ virtual bool set(const QString &id, QVariant value); - + /*! * \brief Reverts the setting with the given ID to default. * \param id The ID of the setting to reset. */ virtual void reset(const QString &id) const; - + /*! * \brief Gets a QList with pointers to all of the registered settings. * The order of the entries in the list is undefined. * \return A QList with pointers to all registered settings. */ virtual QList<Setting *> getSettings(); - + /*! * \brief Checks if this SettingsObject contains a setting with the given ID. * \param id The ID to check for. * \return True if the SettingsObject has a setting with the given ID. */ virtual bool contains(const QString &id); - + signals: /*! * \brief Signal emitted when one of this SettingsObject object's settings changes. - * This is usually just connected directly to each Setting object's + * This is usually just connected directly to each Setting object's * settingChanged() signals. * \param setting A reference to the Setting object that changed. * \param value The Setting object's new value. */ void settingChanged(const Setting &setting, QVariant value); - + /*! * \brief Signal emitted when one of this SettingsObject object's settings resets. - * This is usually just connected directly to each Setting object's + * This is usually just connected directly to each Setting object's * settingReset() signals. * \param setting A reference to the Setting object that changed. */ void settingReset(const Setting &setting); - -protected slots: + +protected +slots: /*! * \brief Changes a setting. - * This slot is usually connected to each Setting object's + * This slot is usually connected to each Setting object's * settingChanged() signal. The signal is emitted, causing this slot * to update the setting's value in the config file. * \param setting A reference to the Setting object that changed. * \param value The setting's new value. */ virtual void changeSetting(const Setting &setting, QVariant value) = 0; - + /*! * \brief Resets a setting. - * This slot is usually connected to each Setting object's + * This slot is usually connected to each Setting object's * settingReset() signal. The signal is emitted, causing this slot * to update the setting's value in the config file. * \param setting A reference to the Setting object that changed. */ virtual void resetSetting(const Setting &setting) = 0; - + protected: /*! * \brief Connects the necessary signals to the given Setting. * \param setting The setting to connect. */ virtual void connectSignals(const Setting &setting); - + /*! * \brief Disconnects signals from the given Setting. * \param setting The setting to disconnect. */ virtual void disconnectSignals(const Setting &setting); - + /*! * \brief Function used by Setting objects to get their values from the SettingsObject. - * \param setting The - * \return + * \param setting The + * \return */ virtual QVariant retrieveValue(const Setting &setting) = 0; - + friend class Setting; - + private: QMap<QString, Setting *> m_settings; }; diff --git a/depends/settings/src/basicsettingsobject.cpp b/depends/settings/src/basicsettingsobject.cpp index 484928c8..96b38851 100644 --- a/depends/settings/src/basicsettingsobject.cpp +++ b/depends/settings/src/basicsettingsobject.cpp @@ -3,7 +3,7 @@ * 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 @@ -16,17 +16,15 @@ #include "include/basicsettingsobject.h" #include "include/setting.h" -BasicSettingsObject::BasicSettingsObject(QObject *parent) : - SettingsObject(parent) +BasicSettingsObject::BasicSettingsObject(QObject *parent) : SettingsObject(parent) { - } void BasicSettingsObject::changeSetting(const Setting &setting, QVariant value) { if (contains(setting.id())) { - if(value.isValid()) + if (value.isValid()) config.setValue(setting.configKey(), value); else config.remove(setting.configKey()); diff --git a/depends/settings/src/inifile.cpp b/depends/settings/src/inifile.cpp index 1eae5609..83aec15e 100644 --- a/depends/settings/src/inifile.cpp +++ b/depends/settings/src/inifile.cpp @@ -3,7 +3,7 @@ * 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 @@ -19,10 +19,8 @@ #include <QTextStream> #include <QStringList> - INIFile::INIFile() { - } QString INIFile::unescape(QString orig) @@ -47,50 +45,50 @@ bool INIFile::saveFile(QString fileName) file.open(QIODevice::WriteOnly); QTextStream out(&file); out.setCodec("UTF-8"); - + for (Iterator iter = begin(); iter != end(); iter++) { QString value = iter.value().toString(); value = escape(value); out << iter.key() << "=" << value << "\n"; } - + return true; } bool INIFile::loadFile(QString fileName) { QFile file(fileName); - if(!file.open(QIODevice::ReadOnly)) + if (!file.open(QIODevice::ReadOnly)) return false; bool success = loadFile(file.readAll()); file.close(); return success; } -bool INIFile::loadFile( QByteArray file ) +bool INIFile::loadFile(QByteArray file) { QTextStream in(file); in.setCodec("UTF-8"); - + QStringList lines = in.readAll().split('\n'); for (int i = 0; i < lines.count(); i++) { - QString & lineRaw = lines[i]; + QString &lineRaw = lines[i]; // Ignore comments. QString line = lineRaw.left(lineRaw.indexOf('#')).trimmed(); - + int eqPos = line.indexOf('='); - if(eqPos == -1) + if (eqPos == -1) continue; QString key = line.left(eqPos).trimmed(); QString valueStr = line.right(line.length() - eqPos - 1).trimmed(); - + valueStr = unescape(valueStr); - + QVariant value(valueStr); - this->operator [](key) = value; + this->operator[](key) = value; } - + return true; } @@ -99,10 +97,10 @@ QVariant INIFile::get(QString key, QVariant def) const if (!this->contains(key)) return def; else - return this->operator [](key); + return this->operator[](key); } void INIFile::set(QString key, QVariant val) { - this->operator [](key) = val; + this->operator[](key) = val; } diff --git a/depends/settings/src/inisettingsobject.cpp b/depends/settings/src/inisettingsobject.cpp index 854421b6..4a7a7428 100644 --- a/depends/settings/src/inisettingsobject.cpp +++ b/depends/settings/src/inisettingsobject.cpp @@ -3,7 +3,7 @@ * 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 @@ -16,8 +16,8 @@ #include "include/inisettingsobject.h" #include "include/setting.h" -INISettingsObject::INISettingsObject(const QString &path, QObject *parent) : - SettingsObject(parent) +INISettingsObject::INISettingsObject(const QString &path, QObject *parent) + : SettingsObject(parent) { m_filePath = path; m_ini.loadFile(path); @@ -32,7 +32,7 @@ void INISettingsObject::changeSetting(const Setting &setting, QVariant value) { if (contains(setting.id())) { - if(value.isValid()) + if (value.isValid()) m_ini.set(setting.configKey(), value); else m_ini.remove(setting.configKey()); @@ -40,7 +40,7 @@ void INISettingsObject::changeSetting(const Setting &setting, QVariant value) } } -void INISettingsObject::resetSetting ( const Setting& setting ) +void INISettingsObject::resetSetting(const Setting &setting) { if (contains(setting.id())) { diff --git a/depends/settings/src/overridesetting.cpp b/depends/settings/src/overridesetting.cpp index eafb298f..5b10920d 100644 --- a/depends/settings/src/overridesetting.cpp +++ b/depends/settings/src/overridesetting.cpp @@ -3,7 +3,7 @@ * 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 @@ -15,8 +15,8 @@ #include "include/overridesetting.h" -OverrideSetting::OverrideSetting(const QString &name, Setting *other, QObject *parent) : - Setting(name, QVariant(), parent) +OverrideSetting::OverrideSetting(const QString &name, Setting *other, QObject *parent) + : Setting(name, QVariant(), parent) { m_other = other; } diff --git a/depends/settings/src/setting.cpp b/depends/settings/src/setting.cpp index 8e60af06..899463dc 100644 --- a/depends/settings/src/setting.cpp +++ b/depends/settings/src/setting.cpp @@ -3,7 +3,7 @@ * 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 @@ -16,10 +16,9 @@ #include "include/setting.h" #include "include/settingsobject.h" -Setting::Setting(QString id, QVariant defVal, QObject *parent) : - QObject(parent), m_id(id), m_defVal(defVal) +Setting::Setting(QString id, QVariant defVal, QObject *parent) + : QObject(parent), m_id(id), m_defVal(defVal) { - } QVariant Setting::get() const @@ -32,7 +31,7 @@ QVariant Setting::get() const else { QVariant test = sbase->retrieveValue(*this); - if(!test.isValid()) + if (!test.isValid()) return defValue(); return test; } diff --git a/depends/settings/src/settingsobject.cpp b/depends/settings/src/settingsobject.cpp index 2ca544ad..32a63b8d 100644 --- a/depends/settings/src/settingsobject.cpp +++ b/depends/settings/src/settingsobject.cpp @@ -3,7 +3,7 @@ * 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 @@ -18,10 +18,8 @@ #include <QVariant> -SettingsObject::SettingsObject(QObject *parent) : - QObject(parent) +SettingsObject::SettingsObject(QObject *parent) : QObject(parent) { - } bool SettingsObject::registerSetting(Setting *setting) @@ -29,24 +27,26 @@ bool SettingsObject::registerSetting(Setting *setting) // Check if setting is null or we already have a setting with the same ID. if (!setting) { - qDebug(QString("Failed to register setting. Setting is null."). - arg(setting->id()).toUtf8()); + qDebug(QString("Failed to register setting. Setting is null.") + .arg(setting->id()) + .toUtf8()); return false; // Fail } - + if (contains(setting->id())) { - qDebug(QString("Failed to register setting %1. ID already exists."). - arg(setting->id()).toUtf8()); + qDebug(QString("Failed to register setting %1. ID already exists.") + .arg(setting->id()) + .toUtf8()); return false; // Fail } - + m_settings.insert(setting->id(), setting); setting->setParent(this); // Take ownership. - + // Connect signals. connectSignals(*setting); - + // qDebug(QString("Registered setting %1.").arg(setting->id()).toUtf8()); return true; } @@ -55,22 +55,21 @@ void SettingsObject::unregisterSetting(Setting *setting) { if (!setting || !m_settings.contains(setting->id())) return; // We can't unregister something that's not registered. - + m_settings.remove(setting->id()); - + // Disconnect signals. disconnectSignals(*setting); - + setting->setParent(NULL); // Drop ownership. } - Setting *SettingsObject::getSetting(const QString &id) const { // Make sure there is a setting with the given ID. if (!m_settings.contains(id)) return NULL; - + return m_settings[id]; } @@ -85,8 +84,7 @@ bool SettingsObject::set(const QString &id, QVariant value) Setting *setting = getSetting(id); if (!setting) { - qDebug(QString("Error changing setting %1. Setting doesn't exist."). - arg(id).toUtf8()); + qDebug(QString("Error changing setting %1. Setting doesn't exist.").arg(id).toUtf8()); return false; } else @@ -99,11 +97,10 @@ bool SettingsObject::set(const QString &id, QVariant value) void SettingsObject::reset(const QString &id) const { Setting *setting = getSetting(id); - if(setting) + if (setting) setting->reset(); } - QList<Setting *> SettingsObject::getSettings() { return m_settings.values(); @@ -114,29 +111,26 @@ bool SettingsObject::contains(const QString &id) return m_settings.contains(id); } - void SettingsObject::connectSignals(const Setting &setting) { connect(&setting, SIGNAL(settingChanged(const Setting &, QVariant)), SLOT(changeSetting(const Setting &, QVariant))); connect(&setting, SIGNAL(settingChanged(const Setting &, QVariant)), SIGNAL(settingChanged(const Setting &, QVariant))); - - connect(&setting, SIGNAL(settingReset(Setting)), - SLOT(resetSetting(const Setting &))); - connect(&setting, SIGNAL(settingReset(Setting)), - SIGNAL(settingReset(const Setting &))); + + connect(&setting, SIGNAL(settingReset(Setting)), SLOT(resetSetting(const Setting &))); + connect(&setting, SIGNAL(settingReset(Setting)), SIGNAL(settingReset(const Setting &))); } void SettingsObject::disconnectSignals(const Setting &setting) { - setting.disconnect(SIGNAL(settingChanged(const Setting &, QVariant)), - this, SLOT(changeSetting(const Setting &, QVariant))); - setting.disconnect(SIGNAL(settingChanged(const Setting &, QVariant)), - this, SIGNAL(settingChanged(const Setting &, QVariant))); - - setting.disconnect(SIGNAL(settingReset(const Setting &, QVariant)), - this, SLOT(resetSetting(const Setting &, QVariant))); - setting.disconnect(SIGNAL(settingReset(const Setting &, QVariant)), - this, SIGNAL(settingReset(const Setting &, QVariant))); + setting.disconnect(SIGNAL(settingChanged(const Setting &, QVariant)), this, + SLOT(changeSetting(const Setting &, QVariant))); + setting.disconnect(SIGNAL(settingChanged(const Setting &, QVariant)), this, + SIGNAL(settingChanged(const Setting &, QVariant))); + + setting.disconnect(SIGNAL(settingReset(const Setting &, QVariant)), this, + SLOT(resetSetting(const Setting &, QVariant))); + setting.disconnect(SIGNAL(settingReset(const Setting &, QVariant)), this, + SIGNAL(settingReset(const Setting &, QVariant))); } diff --git a/depends/settings/src/stubkeyring.cpp b/depends/settings/src/stubkeyring.cpp index cf814d2f..53fca025 100644 --- a/depends/settings/src/stubkeyring.cpp +++ b/depends/settings/src/stubkeyring.cpp @@ -27,7 +27,7 @@ QString scramble(QString in_) { QByteArray in = in_.toUtf8(); QByteArray out; - for (int i = 0; i<in.length(); i++) + for (int i = 0; i < in.length(); i++) out.append(in.at(i) ^ scrambler); return QString::fromUtf8(out); } @@ -81,7 +81,7 @@ QStringList StubKeyring::getStoredAccounts(QString service) QStringList out; QStringList in(m_settings.allKeys()); QStringListIterator it(in); - while(it.hasNext()) + while (it.hasNext()) { QString c = it.next(); if (c.startsWith(service)) @@ -90,15 +90,16 @@ QStringList StubKeyring::getStoredAccounts(QString service) return out; } -void StubKeyring::removeStoredAccount ( QString service, QString username ) +void StubKeyring::removeStoredAccount(QString service, QString username) { QString key = generateKey(service, username); m_settings.remove(key); } -//FIXME: this needs tweaking/changes for user account level storage -StubKeyring::StubKeyring() : -// m_settings(QSettings::UserScope, "Orochimarufan", "Keyring") - m_settings("keyring.cfg", QSettings::IniFormat) +// FIXME: this needs tweaking/changes for user account level storage +StubKeyring::StubKeyring() + : + // m_settings(QSettings::UserScope, "Orochimarufan", "Keyring") + m_settings("keyring.cfg", QSettings::IniFormat) { } diff --git a/depends/settings/src/stubkeyring.h b/depends/settings/src/stubkeyring.h index 45791c85..f25cefde 100644 --- a/depends/settings/src/stubkeyring.h +++ b/depends/settings/src/stubkeyring.h @@ -15,8 +15,7 @@ * limitations under the License. */ -#ifndef STUBKEYRING_H -#define STUBKEYRING_H +#pragma once #include "include/keyring.h" @@ -30,12 +29,14 @@ public: virtual bool hasPassword(QString service, QString username); virtual QStringList getStoredAccounts(QString service); virtual void removeStoredAccount(QString service, QString username); + private: friend class Keyring; explicit StubKeyring(); - virtual bool isValid() { return true; } + virtual bool isValid() + { + return true; + } QSettings m_settings; }; - -#endif // STUBKEYRING_H diff --git a/depends/util/CMakeLists.txt b/depends/util/CMakeLists.txt index 35c4db17..5c87c644 100644 --- a/depends/util/CMakeLists.txt +++ b/depends/util/CMakeLists.txt @@ -22,21 +22,18 @@ find_package(Qt5Core REQUIRED) include_directories(${Qt5Base_INCLUDE_DIRS}) # include_directories(${Qt5Network_INCLUDE_DIRS}) -SET(LIBUTIL_HEADERS +SET(LIBUTIL_SOURCES include/libutil_config.h -include/apputils.h - include/pathutils.h +src/pathutils.cpp + include/osutils.h -include/userutils.h -include/cmdutils.h -) -SET(LIBUTIL_SOURCES -src/pathutils.cpp -src/osutils.cpp +include/userutils.h src/userutils.cpp + +include/cmdutils.h src/cmdutils.cpp ) @@ -50,7 +47,7 @@ add_definitions(-DLIBUTIL_LIBRARY) set(CMAKE_POSITION_INDEPENDENT_CODE ON) -add_library(libUtil STATIC ${LIBUTIL_SOURCES} ${LIBUTIL_HEADERS}) +add_library(libUtil STATIC ${LIBUTIL_SOURCES}) # qt5_use_modules(libUtil Core Network) qt5_use_modules(libUtil Core) target_link_libraries(libUtil) diff --git a/depends/util/include/cmdutils.h b/depends/util/include/cmdutils.h index bab5a9fa..4705f3ca 100644 --- a/depends/util/include/cmdutils.h +++ b/depends/util/include/cmdutils.h @@ -15,8 +15,7 @@ * limitations under the License. */ -#ifndef CMDUTILS_H -#define CMDUTILS_H +#pragma once #include <exception> #include <stdexcept> @@ -33,8 +32,10 @@ * @brief commandline parsing and processing utilities */ -namespace Util { -namespace Commandline { +namespace Util +{ +namespace Commandline +{ /** * @brief split a string into argv items like a shell would do @@ -52,13 +53,13 @@ namespace FlagStyle { enum Enum { - GNU, /**< --option and -o (GNU Style) */ - Unix, /**< -option and -o (Unix Style) */ + GNU, /**< --option and -o (GNU Style) */ + Unix, /**< -option and -o (Unix Style) */ Windows, /**< /option and /o (Windows Style) */ #ifdef Q_OS_WIN32 Default = Windows #else - Default = GNU + Default = GNU #endif }; } @@ -66,17 +67,17 @@ enum Enum /** * @brief The ArgumentStyle enum */ -namespace ArgumentStyle +namespace ArgumentStyle { enum Enum { - Space, /**< --option=value */ - Equals, /**< --option value */ + Space, /**< --option=value */ + Equals, /**< --option value */ SpaceAndEquals, /**< --option[= ]value */ #ifdef Q_OS_WIN32 Default = Equals #else - Default = SpaceAndEquals + Default = SpaceAndEquals #endif }; } @@ -101,47 +102,47 @@ public: * @param flagStyle the FlagStyle to use in this Parser * @param argStyle the ArgumentStyle to use in this Parser */ - Parser(FlagStyle::Enum flagStyle = FlagStyle::Default, + Parser(FlagStyle::Enum flagStyle = FlagStyle::Default, ArgumentStyle::Enum argStyle = ArgumentStyle::Default); - + /** * @brief set the flag style * @param style */ void setFlagStyle(FlagStyle::Enum style); - + /** * @brief get the flag style * @return */ FlagStyle::Enum flagStyle(); - + /** * @brief set the argument style * @param style */ void setArgumentStyle(ArgumentStyle::Enum style); - + /** * @brief get the argument style * @return */ ArgumentStyle::Enum argumentStyle(); - + /** * @brief define a boolean switch * @param name the parameter name * @param def the default value */ void addSwitch(QString name, bool def = false); - + /** * @brief define an option that takes an additional argument * @param name the parameter name * @param def the default value */ void addOption(QString name, QVariant def = QVariant()); - + /** * @brief define a positional argument * @param name the parameter name @@ -149,7 +150,7 @@ public: * @param def the default value */ void addArgument(QString name, bool required = true, QVariant def = QVariant()); - + /** * @brief adds a flag to an existing parameter * @param name the (existing) parameter name @@ -158,7 +159,7 @@ public: * Note: any one parameter can only have one flag */ void addShortOpt(QString name, QChar flag); - + /** * @brief adds documentation to a Parameter * @param name the parameter name @@ -168,7 +169,7 @@ public: * on options , metavar replaces the value placeholder */ void addDocumentation(QString name, QString doc, QString metavar = QString()); - + /** * @brief generate a help message * @param progName the program name to use in the help message @@ -177,7 +178,7 @@ public: * @return a help message */ QString compileHelp(QString progName, int helpIndent = 22, bool flagsInUsage = true); - + /** * @brief generate a short usage message * @param progName the program name to use in the usage message @@ -185,21 +186,21 @@ public: * @return a usage message */ QString compileUsage(QString progName, bool useFlags = true); - + /** * @brief parse * @param argv a QStringList containing the program ARGV * @return a QHash mapping argument names to their values */ QHash<QString, QVariant> parse(QStringList argv); - + /** * @brief clear all definitions */ void clear(); - + ~Parser(); - + private: FlagStyle::Enum m_flagStyle; ArgumentStyle::Enum m_argStyle; @@ -209,16 +210,18 @@ private: otSwitch, otOption }; - + // Important: the common part MUST BE COMMON ON ALL THREE structs - struct CommonDef { + struct CommonDef + { QString name; QString doc; QString metavar; QVariant def; }; - - struct OptionDef { + + struct OptionDef + { // common QString name; QString doc; @@ -228,8 +231,9 @@ private: OptionType type; QChar flag; }; - - struct PositionalDef { + + struct PositionalDef + { // common QString name; QString doc; @@ -238,17 +242,14 @@ private: // positional bool required; }; - + QHash<QString, OptionDef *> m_options; QHash<QChar, OptionDef *> m_flags; QHash<QString, CommonDef *> m_params; QList<PositionalDef *> m_positionals; QList<OptionDef *> m_optionList; - + void getPrefix(QString &opt, QString &flag); }; - } } - -#endif // CMDUTILS_H diff --git a/depends/util/include/libutil_config.h b/depends/util/include/libutil_config.h index 914337ed..56b33b74 100644 --- a/depends/util/include/libutil_config.h +++ b/depends/util/include/libutil_config.h @@ -3,7 +3,7 @@ * 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 @@ -18,12 +18,11 @@ #include <QtCore/QtGlobal> #ifdef LIBUTIL_STATIC - #define LIBUTIL_EXPORT +#define LIBUTIL_EXPORT +#else +#ifdef LIBUTIL_LIBRARY +#define LIBUTIL_EXPORT Q_DECL_EXPORT #else - #ifdef LIBUTIL_LIBRARY - #define LIBUTIL_EXPORT Q_DECL_EXPORT - #else - #define LIBUTIL_EXPORT Q_DECL_IMPORT - #endif +#define LIBUTIL_EXPORT Q_DECL_IMPORT +#endif #endif - diff --git a/depends/util/include/osutils.h b/depends/util/include/osutils.h index c5d4bb61..d615d31f 100644 --- a/depends/util/include/osutils.h +++ b/depends/util/include/osutils.h @@ -3,7 +3,7 @@ * 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 @@ -13,17 +13,14 @@ * limitations under the License. */ -#ifndef OSUTILS_H -#define OSUTILS_H +#pragma once #include <QString> #if defined _WIN32 | defined _WIN64 -#define WINDOWS 1 -#elif __APPLE__ & __MACH__ +#define WINDOWS 1 +#elif __APPLE__ &__MACH__ #define OSX 1 #elif __linux__ #define LINUX 1 #endif - -#endif // OSUTILS_H diff --git a/depends/util/include/pathutils.h b/depends/util/include/pathutils.h index c892c115..45c2a6de 100644 --- a/depends/util/include/pathutils.h +++ b/depends/util/include/pathutils.h @@ -3,7 +3,7 @@ * 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 @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef PATHUTILS_H -#define PATHUTILS_H +#pragma once #include <QString> @@ -27,10 +26,10 @@ LIBUTIL_EXPORT QString AbsolutePath(QString path); /** * Normalize path - * + * * Any paths inside the current directory will be normalized to relative paths (to current) * Other paths will be made absolute - * + * * Returns false if the path logic somehow filed (and normalizedPath in invalid) */ QString NormalizePath(QString path); @@ -54,9 +53,7 @@ LIBUTIL_EXPORT bool ensureFolderPathExists(QString filenamepath); LIBUTIL_EXPORT bool copyPath(QString src, QString dst); /// Opens the given file in the default application. -LIBUTIL_EXPORT void openFileInDefaultProgram ( QString filename ); +LIBUTIL_EXPORT void openFileInDefaultProgram(QString filename); /// Opens the given directory in the default application. -LIBUTIL_EXPORT void openDirInDefaultProgram ( QString dirpath, bool ensureExists = false ); - -#endif // PATHUTILS_H +LIBUTIL_EXPORT void openDirInDefaultProgram(QString dirpath, bool ensureExists = false); diff --git a/depends/util/include/siglist.h b/depends/util/include/siglist.h deleted file mode 100644 index 24b1a889..00000000 --- a/depends/util/include/siglist.h +++ /dev/null @@ -1,129 +0,0 @@ -/* 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(typename QList<T>::iterator pos); - virtual void erase(typename QList<T>::iterator first, typename QList<T>::iterator last); - - virtual void insert(int i, const T &t); - virtual void insert(typename QList<T>::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); - -protected: - // 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 diff --git a/depends/util/include/siglist_impl.h b/depends/util/include/siglist_impl.h deleted file mode 100644 index 5cdc632a..00000000 --- a/depends/util/include/siglist_impl.h +++ /dev/null @@ -1,156 +0,0 @@ -/* 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, QList<T>::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 = QList<T>::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(typename QList<T>::iterator pos) -{ - T value = *pos; - int index = QList<T>::indexOf(*pos); - QList<T>::erase(pos); - onItemRemoved(value, index); -} - -template <typename T> -void SigList<T>::erase(typename QList<T>::iterator first, typename QList<T>::iterator last) -{ - QList<T> removedValues; - int firstIndex = QList<T>::indexOf(*first); - - for (auto 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(typename QList<T>::iterator before, const T &t) -{ - QList<T>::insert(before, t); - onItemAdded(t, QList<T>::indexOf(t)); -} - -template <typename T> -void SigList<T>::move(int from, int to) -{ - const T &item = QList<T>::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 = QList<T>::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 = QList<T>::at(i); - const T &item2 = QList<T>::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(QList<T>::length() - 1); -} - -template <typename T> -QList<T> &SigList<T>::operator =(const QList<T> &other) -{ - QList<T>::operator =(other); - onInvalidated(); - return *this; -} diff --git a/depends/util/include/userutils.h b/depends/util/include/userutils.h index 4f2760b1..6ce08bce 100644 --- a/depends/util/include/userutils.h +++ b/depends/util/include/userutils.h @@ -1,5 +1,4 @@ -#ifndef USERUTILS_H -#define USERUTILS_H +#pragma once #include <QString> @@ -13,7 +12,6 @@ LIBUTIL_EXPORT QString getDesktopDir(); // Create a shortcut at *location*, pointing to *dest* called with the arguments *args* // call it *name* and assign it the icon *icon* // return true if operation succeeded -LIBUTIL_EXPORT bool createShortCut(QString location, QString dest, QStringList args, QString name, QString iconLocation); +LIBUTIL_EXPORT bool createShortCut(QString location, QString dest, QStringList args, + QString name, QString iconLocation); } - -#endif // USERUTILS_H diff --git a/depends/util/src/cmdutils.cpp b/depends/util/src/cmdutils.cpp index b9cab717..43a0bcde 100644 --- a/depends/util/src/cmdutils.cpp +++ b/depends/util/src/cmdutils.cpp @@ -21,8 +21,10 @@ * @file libutil/src/cmdutils.cpp */ -namespace Util { -namespace Commandline { +namespace Util +{ +namespace Commandline +{ // commandline splitter QStringList splitArgs(QString args) @@ -31,10 +33,10 @@ QStringList splitArgs(QString args) QString current; bool escape = false; QChar inquotes; - for (int i=0; i<args.length(); i++) + for (int i = 0; i < args.length(); i++) { QChar cchar = args.at(i); - + // \ escaped if (escape) { @@ -73,7 +75,6 @@ QStringList splitArgs(QString args) return argv; } - Parser::Parser(FlagStyle::Enum flagStyle, ArgumentStyle::Enum argStyle) { m_flagStyle = flagStyle; @@ -104,13 +105,13 @@ void Parser::addSwitch(QString name, bool def) { if (m_params.contains(name)) throw "Name not unique"; - + OptionDef *param = new OptionDef; param->type = otSwitch; param->name = name; param->metavar = QString("<%1>").arg(name); param->def = def; - + m_options[name] = param; m_params[name] = (CommonDef *)param; m_optionList.append(param); @@ -120,13 +121,13 @@ void Parser::addOption(QString name, QVariant def) { if (m_params.contains(name)) throw "Name not unique"; - + OptionDef *param = new OptionDef; param->type = otOption; param->name = name; param->metavar = QString("<%1>").arg(name); param->def = def; - + m_options[name] = param; m_params[name] = (CommonDef *)param; m_optionList.append(param); @@ -136,13 +137,13 @@ void Parser::addArgument(QString name, bool required, QVariant def) { if (m_params.contains(name)) throw "Name not unique"; - + PositionalDef *param = new PositionalDef; param->name = name; param->def = def; param->required = required; param->metavar = name; - + m_positionals.append(param); m_params[name] = (CommonDef *)param; } @@ -151,7 +152,7 @@ void Parser::addDocumentation(QString name, QString doc, QString metavar) { if (!m_params.contains(name)) throw "Name does not exist"; - + CommonDef *param = m_params[name]; param->doc = doc; if (!metavar.isNull()) @@ -164,7 +165,7 @@ void Parser::addShortOpt(QString name, QChar flag) throw "Name does not exist"; if (!m_options.contains(name)) throw "Name is not an Option or Swtich"; - + OptionDef *param = m_options[name]; m_flags[flag] = param; param->flag = flag; @@ -175,14 +176,14 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) { QStringList help; help << compileUsage(progName, useFlags) << "\r\n"; - + // positionals if (!m_positionals.isEmpty()) { help << "\r\n"; help << "Positional arguments:\r\n"; QListIterator<PositionalDef *> it2(m_positionals); - while(it2.hasNext()) + while (it2.hasNext()) { PositionalDef *param = it2.next(); help << " " << param->metavar; @@ -190,17 +191,17 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) help << param->doc << "\r\n"; } } - + // Options if (!m_optionList.isEmpty()) { help << "\r\n"; QString optPrefix, flagPrefix; getPrefix(optPrefix, flagPrefix); - + help << "Options & Switches:\r\n"; QListIterator<OptionDef *> it(m_optionList); - while(it.hasNext()) + while (it.hasNext()) { OptionDef *option = it.next(); help << " "; @@ -213,7 +214,8 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) help << optPrefix << option->name; if (option->type == otOption) { - QString arg = QString("%1%2").arg(((m_argStyle == ArgumentStyle::Equals) ? "=" : " "), option->metavar); + QString arg = QString("%1%2").arg( + ((m_argStyle == ArgumentStyle::Equals) ? "=" : " "), option->metavar); nameLength += arg.length(); help << arg; } @@ -221,7 +223,7 @@ QString Parser::compileHelp(QString progName, int helpIndent, bool useFlags) help << option->doc << "\r\n"; } } - + return help.join(""); } @@ -229,13 +231,13 @@ QString Parser::compileUsage(QString progName, bool useFlags) { QStringList usage; usage << "Usage: " << progName; - + QString optPrefix, flagPrefix; getPrefix(optPrefix, flagPrefix); - + // options QListIterator<OptionDef *> it(m_optionList); - while(it.hasNext()) + while (it.hasNext()) { OptionDef *option = it.next(); usage << " ["; @@ -244,20 +246,20 @@ QString Parser::compileUsage(QString progName, bool useFlags) else usage << optPrefix << option->name; if (option->type == otOption) - usage << ((m_argStyle == ArgumentStyle::Equals) ? "=" : " ") << option->metavar; + usage << ((m_argStyle == ArgumentStyle::Equals) ? "=" : " ") << option->metavar; usage << "]"; } - + // arguments QListIterator<PositionalDef *> it2(m_positionals); - while(it2.hasNext()) + while (it2.hasNext()) { PositionalDef *param = it2.next(); usage << " " << (param->required ? "<" : "["); usage << param->metavar; usage << (param->required ? ">" : "]"); } - + return usage.join(""); } @@ -265,59 +267,63 @@ QString Parser::compileUsage(QString progName, bool useFlags) QHash<QString, QVariant> Parser::parse(QStringList argv) { QHash<QString, QVariant> map; - + QStringListIterator it(argv); QString programName = it.next(); - + QString optionPrefix; QString flagPrefix; QListIterator<PositionalDef *> positionals(m_positionals); QStringList expecting; - + getPrefix(optionPrefix, flagPrefix); - + while (it.hasNext()) { QString arg = it.next(); - + if (!expecting.isEmpty()) - // we were expecting an argument + // we were expecting an argument { QString name = expecting.first(); - + if (map.contains(name)) - throw ParsingError(QString("Option %2%1 was given multiple times").arg(name, optionPrefix)); - + throw ParsingError( + QString("Option %2%1 was given multiple times").arg(name, optionPrefix)); + map[name] = QVariant(arg); - + expecting.removeFirst(); continue; } - + if (arg.startsWith(optionPrefix)) - // we have an option + // we have an option { - //qDebug("Found option %s", qPrintable(arg)); - + // qDebug("Found option %s", qPrintable(arg)); + QString name = arg.mid(optionPrefix.length()); QString equals; - - if ((m_argStyle == ArgumentStyle::Equals || m_argStyle == ArgumentStyle::SpaceAndEquals) && name.contains("=")) + + if ((m_argStyle == ArgumentStyle::Equals || + m_argStyle == ArgumentStyle::SpaceAndEquals) && + name.contains("=")) { int i = name.indexOf("="); - equals = name.mid(i+1); + equals = name.mid(i + 1); name = name.left(i); } - + if (m_options.contains(name)) { if (map.contains(name)) - throw ParsingError(QString("Option %2%1 was given multiple times").arg(name, optionPrefix)); - + throw ParsingError(QString("Option %2%1 was given multiple times") + .arg(name, optionPrefix)); + OptionDef *option = m_options[name]; if (option->type == otSwitch) map[name] = true; - else //if (option->type == otOption) + else // if (option->type == otOption) { if (m_argStyle == ArgumentStyle::Space) expecting.append(name); @@ -326,85 +332,94 @@ QHash<QString, QVariant> Parser::parse(QStringList argv) else if (m_argStyle == ArgumentStyle::SpaceAndEquals) expecting.append(name); else - throw ParsingError(QString("Option %2%1 reqires an argument.").arg(name, optionPrefix)); + throw ParsingError(QString("Option %2%1 reqires an argument.") + .arg(name, optionPrefix)); } - + continue; } - + throw ParsingError(QString("Unknown Option %2%1").arg(name, optionPrefix)); } - + if (arg.startsWith(flagPrefix)) - // we have (a) flag(s) + // we have (a) flag(s) { - //qDebug("Found flags %s", qPrintable(arg)); - + // qDebug("Found flags %s", qPrintable(arg)); + QString flags = arg.mid(flagPrefix.length()); QString equals; - - if ((m_argStyle == ArgumentStyle::Equals || m_argStyle == ArgumentStyle::SpaceAndEquals) && flags.contains("=")) + + if ((m_argStyle == ArgumentStyle::Equals || + m_argStyle == ArgumentStyle::SpaceAndEquals) && + flags.contains("=")) { int i = flags.indexOf("="); - equals = flags.mid(i+1); + equals = flags.mid(i + 1); flags = flags.left(i); } - + for (int i = 0; i < flags.length(); i++) { QChar flag = flags.at(i); - + if (!m_flags.contains(flag)) throw ParsingError(QString("Unknown flag %2%1").arg(flag, flagPrefix)); - + OptionDef *option = m_flags[flag]; - + if (map.contains(option->name)) - throw ParsingError(QString("Option %2%1 was given multiple times").arg(option->name, optionPrefix)); - + throw ParsingError(QString("Option %2%1 was given multiple times") + .arg(option->name, optionPrefix)); + if (option->type == otSwitch) map[option->name] = true; - else //if (option->type == otOption) + else // if (option->type == otOption) { if (m_argStyle == ArgumentStyle::Space) expecting.append(option->name); else if (!equals.isNull()) - if (i == flags.length()-1) + if (i == flags.length() - 1) map[option->name] = equals; else - throw ParsingError(QString("Flag %4%2 of Argument-requiring Option %1 not last flag in %4%3").arg(option->name, flag, flags, flagPrefix)); + throw ParsingError(QString("Flag %4%2 of Argument-requiring Option " + "%1 not last flag in %4%3") + .arg(option->name, flag, flags, flagPrefix)); else if (m_argStyle == ArgumentStyle::SpaceAndEquals) expecting.append(option->name); else - throw ParsingError(QString("Option %1 reqires an argument. (flag %3%2)").arg(option->name, flag, flagPrefix)); + throw ParsingError(QString("Option %1 reqires an argument. (flag %3%2)") + .arg(option->name, flag, flagPrefix)); } } - + continue; } - + // must be a positional argument if (!positionals.hasNext()) throw ParsingError(QString("Don't know what to do with '%1'").arg(arg)); - + PositionalDef *param = positionals.next(); - + map[param->name] = arg; } - + // check if we're missing something if (!expecting.isEmpty()) - throw ParsingError(QString("Was still expecting arguments for %2%1").arg(expecting.join(QString(", ")+optionPrefix), optionPrefix)); - + throw ParsingError(QString("Was still expecting arguments for %2%1").arg( + expecting.join(QString(", ") + optionPrefix), optionPrefix)); + while (positionals.hasNext()) { PositionalDef *param = positionals.next(); if (param->required) - throw ParsingError(QString("Missing required positional argument '%1'").arg(param->name)); + throw ParsingError( + QString("Missing required positional argument '%1'").arg(param->name)); else map[param->name] = param->def; } - + // fill out gaps QListIterator<OptionDef *> iter(m_optionList); while (iter.hasNext()) @@ -413,27 +428,27 @@ QHash<QString, QVariant> Parser::parse(QStringList argv) if (!map.contains(option->name)) map[option->name] = option->def; } - + return map; } -//clear defs +// clear defs void Parser::clear() { m_flags.clear(); m_params.clear(); m_options.clear(); - + QMutableListIterator<OptionDef *> it(m_optionList); - while(it.hasNext()) + while (it.hasNext()) { OptionDef *option = it.next(); it.remove(); delete option; } - + QMutableListIterator<PositionalDef *> it2(m_positionals); - while(it2.hasNext()) + while (it2.hasNext()) { PositionalDef *arg = it2.next(); it2.remove(); @@ -441,31 +456,30 @@ void Parser::clear() } } -//Destructor +// Destructor Parser::~Parser() { clear(); } -//getPrefix +// getPrefix void Parser::getPrefix(QString &opt, QString &flag) { if (m_flagStyle == FlagStyle::Windows) opt = flag = "/"; else if (m_flagStyle == FlagStyle::Unix) opt = flag = "-"; - //else if (m_flagStyle == FlagStyle::GNU) - else { + // else if (m_flagStyle == FlagStyle::GNU) + else + { opt = "--"; flag = "-"; } } // ParsingError -ParsingError::ParsingError(const QString &what) -:std::runtime_error(what.toStdString()) +ParsingError::ParsingError(const QString &what) : std::runtime_error(what.toStdString()) { } - } } diff --git a/depends/util/src/pathutils.cpp b/depends/util/src/pathutils.cpp index ad8d7566..485d03e8 100644 --- a/depends/util/src/pathutils.cpp +++ b/depends/util/src/pathutils.cpp @@ -3,7 +3,7 @@ * 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 @@ -41,7 +41,7 @@ QString AbsolutePath(QString path) /** * Normalize path - * + * * Any paths inside the current directory will be normalized to relative paths (to current) * Other paths will be made absolute */ @@ -85,7 +85,7 @@ QString DirNameFromString(QString string, QString inDir) { num++; dirName = RemoveInvalidFilenameChars(dirName, '-') + QString::number(num); - + // If it's over 9000 if (num > 9000) return ""; @@ -95,59 +95,56 @@ QString DirNameFromString(QString string, QString inDir) bool ensureFilePathExists(QString filenamepath) { - QFileInfo a ( filenamepath ); + QFileInfo a(filenamepath); QDir dir; QString ensuredPath = a.path(); - bool success = dir.mkpath ( ensuredPath ); + bool success = dir.mkpath(ensuredPath); return success; } bool ensureFolderPathExists(QString foldernamepath) { - QFileInfo a ( foldernamepath ); + QFileInfo a(foldernamepath); QDir dir; QString ensuredPath = a.filePath(); - bool success = dir.mkpath ( ensuredPath ); + bool success = dir.mkpath(ensuredPath); return success; } - bool copyPath(QString src, QString dst) { QDir dir(src); if (!dir.exists()) return false; - if(!ensureFolderPathExists(dst)) + if (!ensureFolderPathExists(dst)) return false; - foreach (QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) + foreach(QString d, dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot)) { QString inner_src = src + QDir::separator() + d; QString inner_dst = dst + QDir::separator() + d; copyPath(inner_src, inner_dst); } - foreach (QString f, dir.entryList(QDir::Files)) + foreach(QString f, dir.entryList(QDir::Files)) { QFile::copy(src + QDir::separator() + f, dst + QDir::separator() + f); } return true; } -void openDirInDefaultProgram ( QString path, bool ensureExists ) +void openDirInDefaultProgram(QString path, bool ensureExists) { QDir parentPath; - QDir dir( path ); - if(!dir.exists()) + QDir dir(path); + if (!dir.exists()) { parentPath.mkpath(dir.absolutePath()); } - QDesktopServices::openUrl ( "file:///" + dir.absolutePath() ); + QDesktopServices::openUrl("file:///" + dir.absolutePath()); } -void openFileInDefaultProgram ( QString filename ) +void openFileInDefaultProgram(QString filename) { - QDesktopServices::openUrl ( "file:///" + QFileInfo ( filename ).absolutePath() ); + QDesktopServices::openUrl("file:///" + QFileInfo(filename).absolutePath()); } - - diff --git a/depends/util/src/userutils.cpp b/depends/util/src/userutils.cpp index b70841ed..060a58e9 100644 --- a/depends/util/src/userutils.cpp +++ b/depends/util/src/userutils.cpp @@ -23,37 +23,37 @@ bool called_coinit = false; HRESULT CreateLink(LPCSTR linkPath, LPCSTR targetPath, LPCSTR args) { HRESULT hres; - + if (!called_coinit) { hres = CoInitialize(NULL); called_coinit = true; - + if (!SUCCEEDED(hres)) { qWarning("Failed to initialize COM. Error 0x%08X", hres); return hres; } } - - - IShellLink* link; - hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID*)&link); - + + IShellLink *link; + hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, + (LPVOID *)&link); + if (SUCCEEDED(hres)) { - IPersistFile* persistFile; - + IPersistFile *persistFile; + link->SetPath(targetPath); link->SetArguments(args); - - hres = link->QueryInterface(IID_IPersistFile, (LPVOID*)&persistFile); + + hres = link->QueryInterface(IID_IPersistFile, (LPVOID *)&persistFile); if (SUCCEEDED(hres)) { WCHAR wstr[MAX_PATH]; - + MultiByteToWideChar(CP_ACP, 0, linkPath, -1, wstr, MAX_PATH); - + hres = persistFile->Save(wstr, TRUE); persistFile->Release(); } @@ -70,51 +70,55 @@ QString Util::getDesktopDir() } // Cross-platform Shortcut creation -bool Util::createShortCut(QString location, QString dest, QStringList args, QString name, QString icon) +bool Util::createShortCut(QString location, QString dest, QStringList args, QString name, + QString icon) { #if LINUX location = PathCombine(location, name + ".desktop"); qDebug("location: %s", qPrintable(location)); - + QFile f(location); f.open(QIODevice::WriteOnly | QIODevice::Text); QTextStream stream(&f); - + QString argstring; if (!args.empty()) argstring = " '" + args.join("' '") + "'"; - - stream << "[Desktop Entry]" << "\n"; - stream << "Type=Application" << "\n"; + + stream << "[Desktop Entry]" + << "\n"; + stream << "Type=Application" + << "\n"; stream << "TryExec=" << dest.toLocal8Bit() << "\n"; stream << "Exec=" << dest.toLocal8Bit() << argstring.toLocal8Bit() << "\n"; stream << "Name=" << name.toLocal8Bit() << "\n"; stream << "Icon=" << icon.toLocal8Bit() << "\n"; - + stream.flush(); f.close(); - - f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | QFileDevice::ExeOther); - + + f.setPermissions(f.permissions() | QFileDevice::ExeOwner | QFileDevice::ExeGroup | + QFileDevice::ExeOther); + return true; #elif WINDOWS // TODO: Fix -// QFile file(PathCombine(location, name + ".lnk")); -// WCHAR *file_w; -// WCHAR *dest_w; -// WCHAR *args_w; -// file.fileName().toWCharArray(file_w); -// dest.toWCharArray(dest_w); - -// QString argStr; -// for (int i = 0; i < args.count(); i++) -// { -// argStr.append(args[i]); -// argStr.append(" "); -// } -// argStr.toWCharArray(args_w); - -// return SUCCEEDED(CreateLink(file_w, dest_w, args_w)); + // QFile file(PathCombine(location, name + ".lnk")); + // WCHAR *file_w; + // WCHAR *dest_w; + // WCHAR *args_w; + // file.fileName().toWCharArray(file_w); + // dest.toWCharArray(dest_w); + + // QString argStr; + // for (int i = 0; i < args.count(); i++) + // { + // argStr.append(args[i]); + // argStr.append(" "); + // } + // argStr.toWCharArray(args_w); + + // return SUCCEEDED(CreateLink(file_w, dest_w, args_w)); return false; #else qWarning("Desktop Shortcuts not supported on your platform!"); diff --git a/depends/xz-embedded/include/xz.h b/depends/xz-embedded/include/xz.h index 49a96f7b..eef8ef69 100644 --- a/depends/xz-embedded/include/xz.h +++ b/depends/xz-embedded/include/xz.h @@ -12,11 +12,11 @@ #define XZ_H #ifdef __KERNEL__ -# include <linux/stddef.h> -# include <linux/types.h> +#include <linux/stddef.h> +#include <linux/types.h> #else -# include <stddef.h> -# include <stdint.h> +#include <stddef.h> +#include <stdint.h> #endif #ifdef __cplusplus @@ -37,10 +37,9 @@ extern "C" { #define XZ_DEC_SPARC */ - /* In Linux, this is used to make extern functions static when needed. */ #ifndef XZ_EXTERN -# define XZ_EXTERN extern +#define XZ_EXTERN extern #endif /** @@ -68,7 +67,8 @@ extern "C" { * with support for all operation modes, but the preboot code may * be built with fewer features to minimize code size. */ -enum xz_mode { +enum xz_mode +{ XZ_SINGLE, XZ_PREALLOC, XZ_DYNALLOC @@ -124,7 +124,8 @@ enum xz_mode { * (relatively) clear that the compressed input is truncated, XZ_DATA_ERROR * is used instead of XZ_BUF_ERROR. */ -enum xz_ret { +enum xz_ret +{ XZ_OK, XZ_STREAM_END, XZ_UNSUPPORTED_CHECK, @@ -152,7 +153,8 @@ enum xz_ret { * Only the contents of the output buffer from out[out_pos] onward, and * the variables in_pos and out_pos are modified by the XZ code. */ -struct xz_buf { +struct xz_buf +{ const uint8_t *in; size_t in_pos; size_t in_size; @@ -259,11 +261,11 @@ XZ_EXTERN void xz_dec_end(struct xz_dec *s); * care about the functions below. */ #ifndef XZ_INTERNAL_CRC32 -# ifdef __KERNEL__ -# define XZ_INTERNAL_CRC32 0 -# else -# define XZ_INTERNAL_CRC32 1 -# endif +#ifdef __KERNEL__ +#define XZ_INTERNAL_CRC32 0 +#else +#define XZ_INTERNAL_CRC32 1 +#endif #endif /* @@ -271,15 +273,15 @@ XZ_EXTERN void xz_dec_end(struct xz_dec *s); * implementation is needed too. */ #ifndef XZ_USE_CRC64 -# undef XZ_INTERNAL_CRC64 -# define XZ_INTERNAL_CRC64 0 +#undef XZ_INTERNAL_CRC64 +#define XZ_INTERNAL_CRC64 0 #endif #ifndef XZ_INTERNAL_CRC64 -# ifdef __KERNEL__ -# error Using CRC64 in the kernel has not been implemented. -# else -# define XZ_INTERNAL_CRC64 1 -# endif +#ifdef __KERNEL__ +#error Using CRC64 in the kernel has not been implemented. +#else +#define XZ_INTERNAL_CRC64 1 +#endif #endif #if XZ_INTERNAL_CRC32 diff --git a/depends/xz-embedded/src/xz_config.h b/depends/xz-embedded/src/xz_config.h index eb9dac1a..40805b75 100644 --- a/depends/xz-embedded/src/xz_config.h +++ b/depends/xz-embedded/src/xz_config.h @@ -27,11 +27,11 @@ */ #ifdef _MSC_VER typedef unsigned char bool; -# define true 1 -# define false 0 -# define inline __inline +#define true 1 +#define false 0 +#define inline __inline #else -# include <stdbool.h> +#include <stdbool.h> #endif #include <stdlib.h> @@ -48,7 +48,7 @@ typedef unsigned char bool; #define memzero(buf, size) memset(buf, 0, size) #ifndef min -# define min(x, y) ((x) < (y) ? (x) : (y)) +#define min(x, y) ((x) < (y) ? (x) : (y)) #endif #define min_t(type, x, y) min(x, y) @@ -63,32 +63,27 @@ typedef unsigned char bool; * so if you want to change it, you need to #undef it first. */ #ifndef __always_inline -# ifdef __GNUC__ -# define __always_inline \ - inline __attribute__((__always_inline__)) -# else -# define __always_inline inline -# endif +#ifdef __GNUC__ +#define __always_inline inline __attribute__((__always_inline__)) +#else +#define __always_inline inline +#endif #endif /* Inline functions to access unaligned unsigned 32-bit integers */ #ifndef get_unaligned_le32 static inline uint32_t get_unaligned_le32(const uint8_t *buf) { - return (uint32_t)buf[0] - | ((uint32_t)buf[1] << 8) - | ((uint32_t)buf[2] << 16) - | ((uint32_t)buf[3] << 24); + return (uint32_t)buf[0] | ((uint32_t)buf[1] << 8) | ((uint32_t)buf[2] << 16) | + ((uint32_t)buf[3] << 24); } #endif #ifndef get_unaligned_be32 static inline uint32_t get_unaligned_be32(const uint8_t *buf) { - return (uint32_t)(buf[0] << 24) - | ((uint32_t)buf[1] << 16) - | ((uint32_t)buf[2] << 8) - | (uint32_t)buf[3]; + return (uint32_t)(buf[0] << 24) | ((uint32_t)buf[1] << 16) | ((uint32_t)buf[2] << 8) | + (uint32_t)buf[3]; } #endif @@ -118,7 +113,7 @@ static inline void put_unaligned_be32(uint32_t val, uint8_t *buf) * could save a few bytes in code size. */ #ifndef get_le32 -# define get_le32 get_unaligned_le32 +#define get_le32 get_unaligned_le32 #endif #endif diff --git a/depends/xz-embedded/src/xz_crc32.c b/depends/xz-embedded/src/xz_crc32.c index 34532d14..c412662b 100644 --- a/depends/xz-embedded/src/xz_crc32.c +++ b/depends/xz-embedded/src/xz_crc32.c @@ -22,7 +22,7 @@ * See <linux/decompress/mm.h> for details. */ #ifndef STATIC_RW_DATA -# define STATIC_RW_DATA static +#define STATIC_RW_DATA static #endif STATIC_RW_DATA uint32_t xz_crc32_table[256]; @@ -35,7 +35,8 @@ XZ_EXTERN void xz_crc32_init(void) uint32_t j; uint32_t r; - for (i = 0; i < 256; ++i) { + for (i = 0; i < 256; ++i) + { r = i; for (j = 0; j < 8; ++j) r = (r >> 1) ^ (poly & ~((r & 1) - 1)); @@ -50,7 +51,8 @@ XZ_EXTERN uint32_t xz_crc32(const uint8_t *buf, size_t size, uint32_t crc) { crc = ~crc; - while (size != 0) { + while (size != 0) + { crc = xz_crc32_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); --size; } diff --git a/depends/xz-embedded/src/xz_crc64.c b/depends/xz-embedded/src/xz_crc64.c index ca1caee8..4794b9d3 100644 --- a/depends/xz-embedded/src/xz_crc64.c +++ b/depends/xz-embedded/src/xz_crc64.c @@ -13,7 +13,7 @@ #include "xz_private.h" #ifndef STATIC_RW_DATA -# define STATIC_RW_DATA static +#define STATIC_RW_DATA static #endif STATIC_RW_DATA uint64_t xz_crc64_table[256]; @@ -26,7 +26,8 @@ XZ_EXTERN void xz_crc64_init(void) uint32_t j; uint64_t r; - for (i = 0; i < 256; ++i) { + for (i = 0; i < 256; ++i) + { r = i; for (j = 0; j < 8; ++j) r = (r >> 1) ^ (poly & ~((r & 1) - 1)); @@ -41,7 +42,8 @@ XZ_EXTERN uint64_t xz_crc64(const uint8_t *buf, size_t size, uint64_t crc) { crc = ~crc; - while (size != 0) { + while (size != 0) + { crc = xz_crc64_table[*buf++ ^ (crc & 0xFF)] ^ (crc >> 8); --size; } diff --git a/depends/xz-embedded/src/xz_dec_bcj.c b/depends/xz-embedded/src/xz_dec_bcj.c index a768e6d2..9ffda3bd 100644 --- a/depends/xz-embedded/src/xz_dec_bcj.c +++ b/depends/xz-embedded/src/xz_dec_bcj.c @@ -16,15 +16,17 @@ */ #ifdef XZ_DEC_BCJ -struct xz_dec_bcj { +struct xz_dec_bcj +{ /* Type of the BCJ filter being used */ - enum { - BCJ_X86 = 4, /* x86 or x86-64 */ - BCJ_POWERPC = 5, /* Big endian only */ - BCJ_IA64 = 6, /* Big or little endian */ - BCJ_ARM = 7, /* Little endian only */ - BCJ_ARMTHUMB = 8, /* Little endian only */ - BCJ_SPARC = 9 /* Big or little endian */ + enum + { + BCJ_X86 = 4, /* x86 or x86-64 */ + BCJ_POWERPC = 5, /* Big endian only */ + BCJ_IA64 = 6, /* Big or little endian */ + BCJ_ARM = 7, /* Little endian only */ + BCJ_ARMTHUMB = 8, /* Little endian only */ + BCJ_SPARC = 9 /* Big or little endian */ } type; /* @@ -52,7 +54,8 @@ struct xz_dec_bcj { size_t out_pos; size_t out_size; - struct { + struct + { /* Amount of already filtered data in the beginning of buf */ size_t filtered; @@ -87,13 +90,13 @@ static inline int bcj_x86_test_msbyte(uint8_t b) static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size) { - static const bool mask_to_allowed_status[8] - = { true, true, true, false, true, false, false, false }; + static const bool mask_to_allowed_status[8] = {true, true, true, false, + true, false, false, false}; - static const uint8_t mask_to_bit_num[8] = { 0, 1, 2, 2, 3, 3, 3, 3 }; + static const uint8_t mask_to_bit_num[8] = {0, 1, 2, 2, 3, 3, 3, 3}; size_t i; - size_t prev_pos = (size_t)-1; + size_t prev_pos = (size_t) - 1; uint32_t prev_mask = s->x86_prev_mask; uint32_t src; uint32_t dest; @@ -104,19 +107,24 @@ static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size) return 0; size -= 4; - for (i = 0; i < size; ++i) { + for (i = 0; i < size; ++i) + { if ((buf[i] & 0xFE) != 0xE8) continue; prev_pos = i - prev_pos; - if (prev_pos > 3) { + if (prev_pos > 3) + { prev_mask = 0; - } else { + } + else + { prev_mask = (prev_mask << (prev_pos - 1)) & 7; - if (prev_mask != 0) { + if (prev_mask != 0) + { b = buf[i + 4 - mask_to_bit_num[prev_mask]]; - if (!mask_to_allowed_status[prev_mask] - || bcj_x86_test_msbyte(b)) { + if (!mask_to_allowed_status[prev_mask] || bcj_x86_test_msbyte(b)) + { prev_pos = i; prev_mask = (prev_mask << 1) | 1; continue; @@ -126,9 +134,11 @@ static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size) prev_pos = i; - if (bcj_x86_test_msbyte(buf[i + 4])) { + if (bcj_x86_test_msbyte(buf[i + 4])) + { src = get_unaligned_le32(buf + i + 1); - while (true) { + while (true) + { dest = src - (s->pos + (uint32_t)i + 5); if (prev_mask == 0) break; @@ -145,7 +155,9 @@ static size_t bcj_x86(struct xz_dec_bcj *s, uint8_t *buf, size_t size) dest |= (uint32_t)0 - (dest & 0x01000000); put_unaligned_le32(dest, buf + i + 1); i += 4; - } else { + } + else + { prev_mask = (prev_mask << 1) | 1; } } @@ -162,9 +174,11 @@ static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size) size_t i; uint32_t instr; - for (i = 0; i + 4 <= size; i += 4) { + for (i = 0; i + 4 <= size; i += 4) + { instr = get_unaligned_be32(buf + i); - if ((instr & 0xFC000003) == 0x48000001) { + if ((instr & 0xFC000003) == 0x48000001) + { instr &= 0x03FFFFFC; instr -= s->pos + (uint32_t)i; instr &= 0x03FFFFFC; @@ -180,12 +194,8 @@ static size_t bcj_powerpc(struct xz_dec_bcj *s, uint8_t *buf, size_t size) #ifdef XZ_DEC_IA64 static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size) { - static const uint8_t branch_table[32] = { - 0, 0, 0, 0, 0, 0, 0, 0, - 0, 0, 0, 0, 0, 0, 0, 0, - 4, 4, 6, 6, 0, 0, 7, 7, - 4, 4, 0, 0, 4, 4, 0, 0 - }; + static const uint8_t branch_table[32] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 4, 4, 6, 6, 0, 0, 7, 7, 4, 4, 0, 0, 4, 4, 0, 0}; /* * The local variables take a little bit stack space, but it's less @@ -219,9 +229,11 @@ static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size) /* Instruction normalized with bit_res for easier manipulation */ uint64_t norm; - for (i = 0; i + 16 <= size; i += 16) { + for (i = 0; i + 16 <= size; i += 16) + { mask = branch_table[buf[i] & 0x1F]; - for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) { + for (slot = 0, bit_pos = 5; slot < 3; ++slot, bit_pos += 41) + { if (((mask >> slot) & 1) == 0) continue; @@ -229,13 +241,12 @@ static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size) bit_res = bit_pos & 7; instr = 0; for (j = 0; j < 6; ++j) - instr |= (uint64_t)(buf[i + j + byte_pos]) - << (8 * j); + instr |= (uint64_t)(buf[i + j + byte_pos]) << (8 * j); norm = instr >> bit_res; - if (((norm >> 37) & 0x0F) == 0x05 - && ((norm >> 9) & 0x07) == 0) { + if (((norm >> 37) & 0x0F) == 0x05 && ((norm >> 9) & 0x07) == 0) + { addr = (norm >> 13) & 0x0FFFFF; addr |= ((uint32_t)(norm >> 36) & 1) << 20; addr <<= 4; @@ -244,15 +255,13 @@ static size_t bcj_ia64(struct xz_dec_bcj *s, uint8_t *buf, size_t size) norm &= ~((uint64_t)0x8FFFFF << 13); norm |= (uint64_t)(addr & 0x0FFFFF) << 13; - norm |= (uint64_t)(addr & 0x100000) - << (36 - 20); + norm |= (uint64_t)(addr & 0x100000) << (36 - 20); instr &= (1 << bit_res) - 1; instr |= norm << bit_res; for (j = 0; j < 6; j++) - buf[i + j + byte_pos] - = (uint8_t)(instr >> (8 * j)); + buf[i + j + byte_pos] = (uint8_t)(instr >> (8 * j)); } } } @@ -267,10 +276,12 @@ static size_t bcj_arm(struct xz_dec_bcj *s, uint8_t *buf, size_t size) size_t i; uint32_t addr; - for (i = 0; i + 4 <= size; i += 4) { - if (buf[i + 3] == 0xEB) { - addr = (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8) - | ((uint32_t)buf[i + 2] << 16); + for (i = 0; i + 4 <= size; i += 4) + { + if (buf[i + 3] == 0xEB) + { + addr = + (uint32_t)buf[i] | ((uint32_t)buf[i + 1] << 8) | ((uint32_t)buf[i + 2] << 16); addr <<= 2; addr -= s->pos + (uint32_t)i + 8; addr >>= 2; @@ -290,13 +301,12 @@ static size_t bcj_armthumb(struct xz_dec_bcj *s, uint8_t *buf, size_t size) size_t i; uint32_t addr; - for (i = 0; i + 4 <= size; i += 2) { - if ((buf[i + 1] & 0xF8) == 0xF0 - && (buf[i + 3] & 0xF8) == 0xF8) { - addr = (((uint32_t)buf[i + 1] & 0x07) << 19) - | ((uint32_t)buf[i] << 11) - | (((uint32_t)buf[i + 3] & 0x07) << 8) - | (uint32_t)buf[i + 2]; + for (i = 0; i + 4 <= size; i += 2) + { + if ((buf[i + 1] & 0xF8) == 0xF0 && (buf[i + 3] & 0xF8) == 0xF8) + { + addr = (((uint32_t)buf[i + 1] & 0x07) << 19) | ((uint32_t)buf[i] << 11) | + (((uint32_t)buf[i + 3] & 0x07) << 8) | (uint32_t)buf[i + 2]; addr <<= 1; addr -= s->pos + (uint32_t)i + 4; addr >>= 1; @@ -318,14 +328,16 @@ static size_t bcj_sparc(struct xz_dec_bcj *s, uint8_t *buf, size_t size) size_t i; uint32_t instr; - for (i = 0; i + 4 <= size; i += 4) { + for (i = 0; i + 4 <= size; i += 4) + { instr = get_unaligned_be32(buf + i); - if ((instr >> 22) == 0x100 || (instr >> 22) == 0x1FF) { + if ((instr >> 22) == 0x100 || (instr >> 22) == 0x1FF) + { instr <<= 2; instr -= s->pos + (uint32_t)i; instr >>= 2; - instr = ((uint32_t)0x40000000 - (instr & 0x400000)) - | 0x40000000 | (instr & 0x3FFFFF); + instr = + ((uint32_t)0x40000000 - (instr & 0x400000)) | 0x40000000 | (instr & 0x3FFFFF); put_unaligned_be32(instr, buf + i); } } @@ -342,15 +354,15 @@ static size_t bcj_sparc(struct xz_dec_bcj *s, uint8_t *buf, size_t size) * pointers, which could be problematic in the kernel boot code, which must * avoid pointers to static data (at least on x86). */ -static void bcj_apply(struct xz_dec_bcj *s, - uint8_t *buf, size_t *pos, size_t size) +static void bcj_apply(struct xz_dec_bcj *s, uint8_t *buf, size_t *pos, size_t size) { size_t filtered; buf += *pos; size -= *pos; - switch (s->type) { + switch (s->type) + { #ifdef XZ_DEC_X86 case BCJ_X86: filtered = bcj_x86(s, buf, size); @@ -414,9 +426,8 @@ static void bcj_flush(struct xz_dec_bcj *s, struct xz_buf *b) * data in chunks of 1-16 bytes. To hide this issue, this function does * some buffering. */ -XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, - struct xz_dec_lzma2 *lzma2, - struct xz_buf *b) +XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, struct xz_dec_lzma2 *lzma2, + struct xz_buf *b) { size_t out_start; @@ -425,7 +436,8 @@ XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, * immediatelly if we couldn't flush everything, or if the next * filter in the chain had already returned XZ_STREAM_END. */ - if (s->temp.filtered > 0) { + if (s->temp.filtered > 0) + { bcj_flush(s, b); if (s->temp.filtered > 0) return XZ_OK; @@ -446,14 +458,14 @@ XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, * case where the output buffer is full and the next filter has no * more output coming but hasn't returned XZ_STREAM_END yet. */ - if (s->temp.size < b->out_size - b->out_pos || s->temp.size == 0) { + if (s->temp.size < b->out_size - b->out_pos || s->temp.size == 0) + { out_start = b->out_pos; memcpy(b->out + b->out_pos, s->temp.buf, s->temp.size); b->out_pos += s->temp.size; s->ret = xz_dec_lzma2_run(lzma2, b); - if (s->ret != XZ_STREAM_END - && (s->ret != XZ_OK || s->single_call)) + if (s->ret != XZ_STREAM_END && (s->ret != XZ_OK || s->single_call)) return s->ret; bcj_apply(s, b->out, &out_start, b->out_pos); @@ -487,7 +499,8 @@ XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, * A mix of filtered and unfiltered data may be left in temp; it will * be taken care on the next call to this function. */ - if (b->out_pos < b->out_size) { + if (b->out_pos < b->out_size) + { /* Make b->out{,_pos,_size} temporarily point to s->temp. */ s->out = b->out; s->out_pos = b->out_pos; @@ -535,7 +548,8 @@ XZ_EXTERN struct xz_dec_bcj *xz_dec_bcj_create(bool single_call) XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id) { - switch (id) { + switch (id) + { #ifdef XZ_DEC_X86 case BCJ_X86: #endif diff --git a/depends/xz-embedded/src/xz_dec_lzma2.c b/depends/xz-embedded/src/xz_dec_lzma2.c index a6cdc969..3d7b9a2e 100644 --- a/depends/xz-embedded/src/xz_dec_lzma2.c +++ b/depends/xz-embedded/src/xz_dec_lzma2.c @@ -41,7 +41,8 @@ * in which the dictionary variables address the actual output * buffer directly. */ -struct dictionary { +struct dictionary +{ /* Beginning of the history buffer */ uint8_t *buf; @@ -92,7 +93,8 @@ struct dictionary { }; /* Range decoder */ -struct rc_dec { +struct rc_dec +{ uint32_t range; uint32_t code; @@ -112,7 +114,8 @@ struct rc_dec { }; /* Probabilities for a length decoder. */ -struct lzma_len_dec { +struct lzma_len_dec +{ /* Probability of match length being at least 10 */ uint16_t choice; @@ -129,7 +132,8 @@ struct lzma_len_dec { uint16_t high[LEN_HIGH_SYMBOLS]; }; -struct lzma_dec { +struct lzma_dec +{ /* Distances of latest four matches */ uint32_t rep0; uint32_t rep1; @@ -153,7 +157,7 @@ struct lzma_dec { */ uint32_t lc; uint32_t literal_pos_mask; /* (1 << lp) - 1 */ - uint32_t pos_mask; /* (1 << pb) - 1 */ + uint32_t pos_mask; /* (1 << pb) - 1 */ /* If 1, it's a match. Otherwise it's a single 8-bit literal. */ uint16_t is_match[STATES][POS_STATES_MAX]; @@ -211,9 +215,11 @@ struct lzma_dec { uint16_t literal[LITERAL_CODERS_MAX][LITERAL_CODER_SIZE]; }; -struct lzma2_dec { +struct lzma2_dec +{ /* Position in xz_dec_lzma2_run(). */ - enum lzma2_seq { + enum lzma2_seq + { SEQ_CONTROL, SEQ_UNCOMPRESSED_1, SEQ_UNCOMPRESSED_2, @@ -250,7 +256,8 @@ struct lzma2_dec { bool need_props; }; -struct xz_dec_lzma2 { +struct xz_dec_lzma2 +{ /* * The order below is important on x86 to reduce code size and * it shouldn't hurt on other platforms. Everything up to and @@ -269,7 +276,8 @@ struct xz_dec_lzma2 { * Temporary buffer which holds small number of input bytes between * decoder calls. See lzma2_lzma() for details. */ - struct { + struct + { uint32_t size; uint8_t buf[3 * LZMA_IN_REQUIRED]; } temp; @@ -285,7 +293,8 @@ struct xz_dec_lzma2 { */ static void dict_reset(struct dictionary *dict, struct xz_buf *b) { - if (DEC_IS_SINGLE(dict->mode)) { + if (DEC_IS_SINGLE(dict->mode)) + { dict->buf = b->out + b->out_pos; dict->end = b->out_size - b->out_pos; } @@ -358,7 +367,8 @@ static bool dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist) if (dist >= dict->pos) back += dict->end; - do { + do + { dict->buf[dict->pos++] = dict->buf[back++]; if (back == dict->end) back = 0; @@ -371,15 +381,13 @@ static bool dict_repeat(struct dictionary *dict, uint32_t *len, uint32_t dist) } /* Copy uncompressed data as is from input to dictionary and output buffers. */ -static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b, - uint32_t *left) +static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b, uint32_t *left) { size_t copy_size; - while (*left > 0 && b->in_pos < b->in_size - && b->out_pos < b->out_size) { - copy_size = min(b->in_size - b->in_pos, - b->out_size - b->out_pos); + while (*left > 0 && b->in_pos < b->in_size && b->out_pos < b->out_size) + { + copy_size = min(b->in_size - b->in_pos, b->out_size - b->out_pos); if (copy_size > dict->end - dict->pos) copy_size = dict->end - dict->pos; if (copy_size > *left) @@ -393,12 +401,12 @@ static void dict_uncompressed(struct dictionary *dict, struct xz_buf *b, if (dict->full < dict->pos) dict->full = dict->pos; - if (DEC_IS_MULTI(dict->mode)) { + if (DEC_IS_MULTI(dict->mode)) + { if (dict->pos == dict->end) dict->pos = 0; - memcpy(b->out + b->out_pos, b->in + b->in_pos, - copy_size); + memcpy(b->out + b->out_pos, b->in + b->in_pos, copy_size); } dict->start = dict->pos; @@ -417,12 +425,12 @@ static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b) { size_t copy_size = dict->pos - dict->start; - if (DEC_IS_MULTI(dict->mode)) { + if (DEC_IS_MULTI(dict->mode)) + { if (dict->pos == dict->end) dict->pos = 0; - memcpy(b->out + b->out_pos, dict->buf + dict->start, - copy_size); + memcpy(b->out + b->out_pos, dict->buf + dict->start, copy_size); } dict->start = dict->pos; @@ -437,7 +445,7 @@ static uint32_t dict_flush(struct dictionary *dict, struct xz_buf *b) /* Reset the range decoder. */ static void rc_reset(struct rc_dec *rc) { - rc->range = (uint32_t)-1; + rc->range = (uint32_t) - 1; rc->code = 0; rc->init_bytes_left = RC_INIT_BYTES; } @@ -448,7 +456,8 @@ static void rc_reset(struct rc_dec *rc) */ static bool rc_read_init(struct rc_dec *rc, struct xz_buf *b) { - while (rc->init_bytes_left > 0) { + while (rc->init_bytes_left > 0) + { if (b->in_pos == b->in_size) return false; @@ -477,7 +486,8 @@ static inline bool rc_is_finished(const struct rc_dec *rc) /* Read the next input byte if needed. */ static __always_inline void rc_normalize(struct rc_dec *rc) { - if (rc->range < RC_TOP_VALUE) { + if (rc->range < RC_TOP_VALUE) + { rc->range <<= RC_SHIFT_BITS; rc->code = (rc->code << RC_SHIFT_BITS) + rc->in[rc->in_pos++]; } @@ -501,11 +511,14 @@ static __always_inline int rc_bit(struct rc_dec *rc, uint16_t *prob) rc_normalize(rc); bound = (rc->range >> RC_BIT_MODEL_TOTAL_BITS) * *prob; - if (rc->code < bound) { + if (rc->code < bound) + { rc->range = bound; *prob += (RC_BIT_MODEL_TOTAL - *prob) >> RC_MOVE_BITS; bit = 0; - } else { + } + else + { rc->range -= bound; rc->code -= bound; *prob -= *prob >> RC_MOVE_BITS; @@ -516,12 +529,12 @@ static __always_inline int rc_bit(struct rc_dec *rc, uint16_t *prob) } /* Decode a bittree starting from the most significant bit. */ -static __always_inline uint32_t rc_bittree(struct rc_dec *rc, - uint16_t *probs, uint32_t limit) +static __always_inline uint32_t rc_bittree(struct rc_dec *rc, uint16_t *probs, uint32_t limit) { uint32_t symbol = 1; - do { + do + { if (rc_bit(rc, &probs[symbol])) symbol = (symbol << 1) + 1; else @@ -532,18 +545,21 @@ static __always_inline uint32_t rc_bittree(struct rc_dec *rc, } /* Decode a bittree starting from the least significant bit. */ -static __always_inline void rc_bittree_reverse(struct rc_dec *rc, - uint16_t *probs, - uint32_t *dest, uint32_t limit) +static __always_inline void rc_bittree_reverse(struct rc_dec *rc, uint16_t *probs, + uint32_t *dest, uint32_t limit) { uint32_t symbol = 1; uint32_t i = 0; - do { - if (rc_bit(rc, &probs[symbol])) { + do + { + if (rc_bit(rc, &probs[symbol])) + { symbol = (symbol << 1) + 1; *dest += 1 << i; - } else { + } + else + { symbol <<= 1; } } while (++i < limit); @@ -554,7 +570,8 @@ static inline void rc_direct(struct rc_dec *rc, uint32_t *dest, uint32_t limit) { uint32_t mask; - do { + do + { rc_normalize(rc); rc->range >>= 1; rc->code -= rc->range; @@ -589,22 +606,29 @@ static void lzma_literal(struct xz_dec_lzma2 *s) probs = lzma_literal_probs(s); - if (lzma_state_is_literal(s->lzma.state)) { + if (lzma_state_is_literal(s->lzma.state)) + { symbol = rc_bittree(&s->rc, probs, 0x100); - } else { + } + else + { symbol = 1; match_byte = dict_get(&s->dict, s->lzma.rep0) << 1; offset = 0x100; - do { + do + { match_bit = match_byte & offset; match_byte <<= 1; i = offset + match_bit + symbol; - if (rc_bit(&s->rc, &probs[i])) { + if (rc_bit(&s->rc, &probs[i])) + { symbol = (symbol << 1) + 1; offset &= match_bit; - } else { + } + else + { symbol <<= 1; offset &= ~match_bit; } @@ -616,26 +640,30 @@ static void lzma_literal(struct xz_dec_lzma2 *s) } /* Decode the length of the match into s->lzma.len. */ -static void lzma_len(struct xz_dec_lzma2 *s, struct lzma_len_dec *l, - uint32_t pos_state) +static void lzma_len(struct xz_dec_lzma2 *s, struct lzma_len_dec *l, uint32_t pos_state) { uint16_t *probs; uint32_t limit; - if (!rc_bit(&s->rc, &l->choice)) { + if (!rc_bit(&s->rc, &l->choice)) + { probs = l->low[pos_state]; limit = LEN_LOW_SYMBOLS; s->lzma.len = MATCH_LEN_MIN; - } else { - if (!rc_bit(&s->rc, &l->choice2)) { + } + else + { + if (!rc_bit(&s->rc, &l->choice2)) + { probs = l->mid[pos_state]; limit = LEN_MID_SYMBOLS; s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS; - } else { + } + else + { probs = l->high; limit = LEN_HIGH_SYMBOLS; - s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS - + LEN_MID_SYMBOLS; + s->lzma.len = MATCH_LEN_MIN + LEN_LOW_SYMBOLS + LEN_MID_SYMBOLS; } } @@ -660,23 +688,26 @@ static void lzma_match(struct xz_dec_lzma2 *s, uint32_t pos_state) probs = s->lzma.dist_slot[lzma_get_dist_state(s->lzma.len)]; dist_slot = rc_bittree(&s->rc, probs, DIST_SLOTS) - DIST_SLOTS; - if (dist_slot < DIST_MODEL_START) { + if (dist_slot < DIST_MODEL_START) + { s->lzma.rep0 = dist_slot; - } else { + } + else + { limit = (dist_slot >> 1) - 1; s->lzma.rep0 = 2 + (dist_slot & 1); - if (dist_slot < DIST_MODEL_END) { + if (dist_slot < DIST_MODEL_END) + { s->lzma.rep0 <<= limit; - probs = s->lzma.dist_special + s->lzma.rep0 - - dist_slot - 1; - rc_bittree_reverse(&s->rc, probs, - &s->lzma.rep0, limit); - } else { + probs = s->lzma.dist_special + s->lzma.rep0 - dist_slot - 1; + rc_bittree_reverse(&s->rc, probs, &s->lzma.rep0, limit); + } + else + { rc_direct(&s->rc, &s->lzma.rep0, limit - ALIGN_BITS); s->lzma.rep0 <<= ALIGN_BITS; - rc_bittree_reverse(&s->rc, s->lzma.dist_align, - &s->lzma.rep0, ALIGN_BITS); + rc_bittree_reverse(&s->rc, s->lzma.dist_align, &s->lzma.rep0, ALIGN_BITS); } } } @@ -689,20 +720,29 @@ static void lzma_rep_match(struct xz_dec_lzma2 *s, uint32_t pos_state) { uint32_t tmp; - if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) { - if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[ - s->lzma.state][pos_state])) { + if (!rc_bit(&s->rc, &s->lzma.is_rep0[s->lzma.state])) + { + if (!rc_bit(&s->rc, &s->lzma.is_rep0_long[s->lzma.state][pos_state])) + { lzma_state_short_rep(&s->lzma.state); s->lzma.len = 1; return; } - } else { - if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) { + } + else + { + if (!rc_bit(&s->rc, &s->lzma.is_rep1[s->lzma.state])) + { tmp = s->lzma.rep1; - } else { - if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) { + } + else + { + if (!rc_bit(&s->rc, &s->lzma.is_rep2[s->lzma.state])) + { tmp = s->lzma.rep2; - } else { + } + else + { tmp = s->lzma.rep3; s->lzma.rep3 = s->lzma.rep2; } @@ -734,13 +774,16 @@ static bool lzma_main(struct xz_dec_lzma2 *s) * Decode more LZMA symbols. One iteration may consume up to * LZMA_IN_REQUIRED - 1 bytes. */ - while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) { + while (dict_has_space(&s->dict) && !rc_limit_exceeded(&s->rc)) + { pos_state = s->dict.pos & s->lzma.pos_mask; - if (!rc_bit(&s->rc, &s->lzma.is_match[ - s->lzma.state][pos_state])) { + if (!rc_bit(&s->rc, &s->lzma.is_match[s->lzma.state][pos_state])) + { lzma_literal(s); - } else { + } + else + { if (rc_bit(&s->rc, &s->lzma.is_rep[s->lzma.state])) lzma_rep_match(s, pos_state); else @@ -802,7 +845,8 @@ static bool lzma_props(struct xz_dec_lzma2 *s, uint8_t props) return false; s->lzma.pos_mask = 0; - while (props >= 9 * 5) { + while (props >= 9 * 5) + { props -= 9 * 5; ++s->lzma.pos_mask; } @@ -810,7 +854,8 @@ static bool lzma_props(struct xz_dec_lzma2 *s, uint8_t props) s->lzma.pos_mask = (1 << s->lzma.pos_mask) - 1; s->lzma.literal_pos_mask = 0; - while (props >= 9) { + while (props >= 9) + { props -= 9; ++s->lzma.literal_pos_mask; } @@ -849,7 +894,8 @@ static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) uint32_t tmp; in_avail = b->in_size - b->in_pos; - if (s->temp.size > 0 || s->lzma2.compressed == 0) { + if (s->temp.size > 0 || s->lzma2.compressed == 0) + { tmp = 2 * LZMA_IN_REQUIRED - s->temp.size; if (tmp > s->lzma2.compressed - s->temp.size) tmp = s->lzma2.compressed - s->temp.size; @@ -858,16 +904,19 @@ static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) memcpy(s->temp.buf + s->temp.size, b->in + b->in_pos, tmp); - if (s->temp.size + tmp == s->lzma2.compressed) { - memzero(s->temp.buf + s->temp.size + tmp, - sizeof(s->temp.buf) - - s->temp.size - tmp); + if (s->temp.size + tmp == s->lzma2.compressed) + { + memzero(s->temp.buf + s->temp.size + tmp, sizeof(s->temp.buf) - s->temp.size - tmp); s->rc.in_limit = s->temp.size + tmp; - } else if (s->temp.size + tmp < LZMA_IN_REQUIRED) { + } + else if (s->temp.size + tmp < LZMA_IN_REQUIRED) + { s->temp.size += tmp; b->in_pos += tmp; return true; - } else { + } + else + { s->rc.in_limit = s->temp.size + tmp - LZMA_IN_REQUIRED; } @@ -879,10 +928,10 @@ static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) s->lzma2.compressed -= s->rc.in_pos; - if (s->rc.in_pos < s->temp.size) { + if (s->rc.in_pos < s->temp.size) + { s->temp.size -= s->rc.in_pos; - memmove(s->temp.buf, s->temp.buf + s->rc.in_pos, - s->temp.size); + memmove(s->temp.buf, s->temp.buf + s->rc.in_pos, s->temp.size); return true; } @@ -891,7 +940,8 @@ static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) } in_avail = b->in_size - b->in_pos; - if (in_avail >= LZMA_IN_REQUIRED) { + if (in_avail >= LZMA_IN_REQUIRED) + { s->rc.in = b->in; s->rc.in_pos = b->in_pos; @@ -912,7 +962,8 @@ static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) } in_avail = b->in_size - b->in_pos; - if (in_avail < LZMA_IN_REQUIRED) { + if (in_avail < LZMA_IN_REQUIRED) + { if (in_avail > s->lzma2.compressed) in_avail = s->lzma2.compressed; @@ -928,13 +979,14 @@ static bool lzma2_lzma(struct xz_dec_lzma2 *s, struct xz_buf *b) * Take care of the LZMA2 control layer, and forward the job of actual LZMA * decoding or copying of uncompressed chunks to other functions. */ -XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, - struct xz_buf *b) +XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, struct xz_buf *b) { uint32_t tmp; - while (b->in_pos < b->in_size || s->lzma2.sequence == SEQ_LZMA_RUN) { - switch (s->lzma2.sequence) { + while (b->in_pos < b->in_size || s->lzma2.sequence == SEQ_LZMA_RUN) + { + switch (s->lzma2.sequence) + { case SEQ_CONTROL: /* * LZMA2 control byte @@ -972,38 +1024,45 @@ XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, if (tmp == 0x00) return XZ_STREAM_END; - if (tmp >= 0xE0 || tmp == 0x01) { + if (tmp >= 0xE0 || tmp == 0x01) + { s->lzma2.need_props = true; s->lzma2.need_dict_reset = false; dict_reset(&s->dict, b); - } else if (s->lzma2.need_dict_reset) { + } + else if (s->lzma2.need_dict_reset) + { return XZ_DATA_ERROR; } - if (tmp >= 0x80) { + if (tmp >= 0x80) + { s->lzma2.uncompressed = (tmp & 0x1F) << 16; s->lzma2.sequence = SEQ_UNCOMPRESSED_1; - if (tmp >= 0xC0) { + if (tmp >= 0xC0) + { /* * When there are new properties, * state reset is done at * SEQ_PROPERTIES. */ s->lzma2.need_props = false; - s->lzma2.next_sequence - = SEQ_PROPERTIES; - - } else if (s->lzma2.need_props) { + s->lzma2.next_sequence = SEQ_PROPERTIES; + } + else if (s->lzma2.need_props) + { return XZ_DATA_ERROR; - - } else { - s->lzma2.next_sequence - = SEQ_LZMA_PREPARE; + } + else + { + s->lzma2.next_sequence = SEQ_LZMA_PREPARE; if (tmp >= 0xA0) lzma_reset(s); } - } else { + } + else + { if (tmp > 0x02) return XZ_DATA_ERROR; @@ -1014,26 +1073,22 @@ XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, break; case SEQ_UNCOMPRESSED_1: - s->lzma2.uncompressed - += (uint32_t)b->in[b->in_pos++] << 8; + s->lzma2.uncompressed += (uint32_t)b->in[b->in_pos++] << 8; s->lzma2.sequence = SEQ_UNCOMPRESSED_2; break; case SEQ_UNCOMPRESSED_2: - s->lzma2.uncompressed - += (uint32_t)b->in[b->in_pos++] + 1; + s->lzma2.uncompressed += (uint32_t)b->in[b->in_pos++] + 1; s->lzma2.sequence = SEQ_COMPRESSED_0; break; case SEQ_COMPRESSED_0: - s->lzma2.compressed - = (uint32_t)b->in[b->in_pos++] << 8; + s->lzma2.compressed = (uint32_t)b->in[b->in_pos++] << 8; s->lzma2.sequence = SEQ_COMPRESSED_1; break; case SEQ_COMPRESSED_1: - s->lzma2.compressed - += (uint32_t)b->in[b->in_pos++] + 1; + s->lzma2.compressed += (uint32_t)b->in[b->in_pos++] + 1; s->lzma2.sequence = s->lzma2.next_sequence; break; @@ -1063,26 +1118,24 @@ XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, * the output buffer yet, we may run this loop * multiple times without changing s->lzma2.sequence. */ - dict_limit(&s->dict, min_t(size_t, - b->out_size - b->out_pos, - s->lzma2.uncompressed)); + dict_limit(&s->dict, + min_t(size_t, b->out_size - b->out_pos, s->lzma2.uncompressed)); if (!lzma2_lzma(s, b)) return XZ_DATA_ERROR; s->lzma2.uncompressed -= dict_flush(&s->dict, b); - if (s->lzma2.uncompressed == 0) { - if (s->lzma2.compressed > 0 || s->lzma.len > 0 - || !rc_is_finished(&s->rc)) + if (s->lzma2.uncompressed == 0) + { + if (s->lzma2.compressed > 0 || s->lzma.len > 0 || !rc_is_finished(&s->rc)) return XZ_DATA_ERROR; rc_reset(&s->rc); s->lzma2.sequence = SEQ_CONTROL; - - } else if (b->out_pos == b->out_size - || (b->in_pos == b->in_size - && s->temp.size - < s->lzma2.compressed)) { + } + else if (b->out_pos == b->out_size || + (b->in_pos == b->in_size && s->temp.size < s->lzma2.compressed)) + { return XZ_OK; } @@ -1101,8 +1154,7 @@ XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, return XZ_OK; } -XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, - uint32_t dict_max) +XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, uint32_t dict_max) { struct xz_dec_lzma2 *s = kmalloc(sizeof(*s), GFP_KERNEL); if (s == NULL) @@ -1111,13 +1163,17 @@ XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, s->dict.mode = mode; s->dict.size_max = dict_max; - if (DEC_IS_PREALLOC(mode)) { + if (DEC_IS_PREALLOC(mode)) + { s->dict.buf = vmalloc(dict_max); - if (s->dict.buf == NULL) { + if (s->dict.buf == NULL) + { kfree(s); return NULL; } - } else if (DEC_IS_DYNALLOC(mode)) { + } + else if (DEC_IS_DYNALLOC(mode)) + { s->dict.buf = NULL; s->dict.allocated = 0; } @@ -1134,17 +1190,21 @@ XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, uint8_t props) s->dict.size = 2 + (props & 1); s->dict.size <<= (props >> 1) + 11; - if (DEC_IS_MULTI(s->dict.mode)) { + if (DEC_IS_MULTI(s->dict.mode)) + { if (s->dict.size > s->dict.size_max) return XZ_MEMLIMIT_ERROR; s->dict.end = s->dict.size; - if (DEC_IS_DYNALLOC(s->dict.mode)) { - if (s->dict.allocated < s->dict.size) { + if (DEC_IS_DYNALLOC(s->dict.mode)) + { + if (s->dict.allocated < s->dict.size) + { vfree(s->dict.buf); s->dict.buf = vmalloc(s->dict.size); - if (s->dict.buf == NULL) { + if (s->dict.buf == NULL) + { s->dict.allocated = 0; return XZ_MEM_ERROR; } diff --git a/depends/xz-embedded/src/xz_dec_stream.c b/depends/xz-embedded/src/xz_dec_stream.c index d6525506..6e935ded 100644 --- a/depends/xz-embedded/src/xz_dec_stream.c +++ b/depends/xz-embedded/src/xz_dec_stream.c @@ -11,21 +11,24 @@ #include "xz_stream.h" #ifdef XZ_USE_CRC64 -# define IS_CRC64(check_type) ((check_type) == XZ_CHECK_CRC64) +#define IS_CRC64(check_type) ((check_type) == XZ_CHECK_CRC64) #else -# define IS_CRC64(check_type) false +#define IS_CRC64(check_type) false #endif /* Hash used to validate the Index field */ -struct xz_dec_hash { +struct xz_dec_hash +{ vli_type unpadded; vli_type uncompressed; uint32_t crc32; }; -struct xz_dec { +struct xz_dec +{ /* Position in dec_main() */ - enum { + enum + { SEQ_STREAM_HEADER, SEQ_BLOCK_START, SEQ_BLOCK_HEADER, @@ -69,7 +72,8 @@ struct xz_dec { bool allow_buf_error; /* Information stored in Block Header */ - struct { + struct + { /* * Value stored in the Compressed Size field, or * VLI_UNKNOWN if Compressed Size is not present. @@ -87,7 +91,8 @@ struct xz_dec { } block_header; /* Information collected when decoding Blocks */ - struct { + struct + { /* Observed compressed size of the current Block */ vli_type compressed; @@ -105,9 +110,11 @@ struct xz_dec { } block; /* Variables needed when verifying the Index field */ - struct { + struct + { /* Position in dec_index() */ - enum { + enum + { SEQ_INDEX_COUNT, SEQ_INDEX_UNPADDED, SEQ_INDEX_UNCOMPRESSED @@ -133,7 +140,8 @@ struct xz_dec { * to a multiple of four bytes; the size_t variables before it * should guarantee this. */ - struct { + struct + { size_t pos; size_t size; uint8_t buf[1024]; @@ -149,14 +157,8 @@ struct xz_dec { #ifdef XZ_DEC_ANY_CHECK /* Sizes of the Check field with different Check IDs */ -static const uint8_t check_sizes[16] = { - 0, - 4, 4, 4, - 8, 8, 8, - 16, 16, 16, - 32, 32, 32, - 64, 64, 64 -}; +static const uint8_t check_sizes[16] = {0, 4, 4, 4, 8, 8, 8, 16, + 16, 16, 32, 32, 32, 64, 64, 64}; #endif /* @@ -167,14 +169,14 @@ static const uint8_t check_sizes[16] = { */ static bool fill_temp(struct xz_dec *s, struct xz_buf *b) { - size_t copy_size = min_t(size_t, - b->in_size - b->in_pos, s->temp.size - s->temp.pos); + size_t copy_size = min_t(size_t, b->in_size - b->in_pos, s->temp.size - s->temp.pos); memcpy(s->temp.buf + s->temp.pos, b->in + b->in_pos, copy_size); b->in_pos += copy_size; s->temp.pos += copy_size; - if (s->temp.pos == s->temp.size) { + if (s->temp.pos == s->temp.size) + { s->temp.pos = 0; return true; } @@ -183,21 +185,22 @@ static bool fill_temp(struct xz_dec *s, struct xz_buf *b) } /* Decode a variable-length integer (little-endian base-128 encoding) */ -static enum xz_ret dec_vli(struct xz_dec *s, const uint8_t *in, - size_t *in_pos, size_t in_size) +static enum xz_ret dec_vli(struct xz_dec *s, const uint8_t *in, size_t *in_pos, size_t in_size) { uint8_t byte; if (s->pos == 0) s->vli = 0; - while (*in_pos < in_size) { + while (*in_pos < in_size) + { byte = in[*in_pos]; ++*in_pos; s->vli |= (vli_type)(byte & 0x7F) << s->pos; - if ((byte & 0x80) == 0) { + if ((byte & 0x80) == 0) + { /* Don't allow non-minimal encodings. */ if (byte == 0 && s->pos != 0) return XZ_DATA_ERROR; @@ -247,33 +250,28 @@ static enum xz_ret dec_block(struct xz_dec *s, struct xz_buf *b) * There is no need to separately check for VLI_UNKNOWN, since * the observed sizes are always smaller than VLI_UNKNOWN. */ - if (s->block.compressed > s->block_header.compressed - || s->block.uncompressed - > s->block_header.uncompressed) + if (s->block.compressed > s->block_header.compressed || + s->block.uncompressed > s->block_header.uncompressed) return XZ_DATA_ERROR; if (s->check_type == XZ_CHECK_CRC32) - s->crc = xz_crc32(b->out + s->out_start, - b->out_pos - s->out_start, s->crc); + s->crc = xz_crc32(b->out + s->out_start, b->out_pos - s->out_start, s->crc); #ifdef XZ_USE_CRC64 else if (s->check_type == XZ_CHECK_CRC64) - s->crc = xz_crc64(b->out + s->out_start, - b->out_pos - s->out_start, s->crc); + s->crc = xz_crc64(b->out + s->out_start, b->out_pos - s->out_start, s->crc); #endif - if (ret == XZ_STREAM_END) { - if (s->block_header.compressed != VLI_UNKNOWN - && s->block_header.compressed - != s->block.compressed) + if (ret == XZ_STREAM_END) + { + if (s->block_header.compressed != VLI_UNKNOWN && + s->block_header.compressed != s->block.compressed) return XZ_DATA_ERROR; - if (s->block_header.uncompressed != VLI_UNKNOWN - && s->block_header.uncompressed - != s->block.uncompressed) + if (s->block_header.uncompressed != VLI_UNKNOWN && + s->block_header.uncompressed != s->block.uncompressed) return XZ_DATA_ERROR; - s->block.hash.unpadded += s->block_header.size - + s->block.compressed; + s->block.hash.unpadded += s->block_header.size + s->block.compressed; #ifdef XZ_DEC_ANY_CHECK s->block.hash.unpadded += check_sizes[s->check_type]; @@ -285,9 +283,8 @@ static enum xz_ret dec_block(struct xz_dec *s, struct xz_buf *b) #endif s->block.hash.uncompressed += s->block.uncompressed; - s->block.hash.crc32 = xz_crc32( - (const uint8_t *)&s->block.hash, - sizeof(s->block.hash), s->block.hash.crc32); + s->block.hash.crc32 = xz_crc32((const uint8_t *)&s->block.hash, sizeof(s->block.hash), + s->block.hash.crc32); ++s->block.count; } @@ -315,14 +312,17 @@ static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b) { enum xz_ret ret; - do { + do + { ret = dec_vli(s, b->in, &b->in_pos, b->in_size); - if (ret != XZ_STREAM_END) { + if (ret != XZ_STREAM_END) + { index_update(s, b); return ret; } - switch (s->index.sequence) { + switch (s->index.sequence) + { case SEQ_INDEX_COUNT: s->index.count = s->vli; @@ -344,10 +344,8 @@ static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b) case SEQ_INDEX_UNCOMPRESSED: s->index.hash.uncompressed += s->vli; - s->index.hash.crc32 = xz_crc32( - (const uint8_t *)&s->index.hash, - sizeof(s->index.hash), - s->index.hash.crc32); + s->index.hash.crc32 = xz_crc32((const uint8_t *)&s->index.hash, + sizeof(s->index.hash), s->index.hash.crc32); --s->index.count; s->index.sequence = SEQ_INDEX_UNPADDED; break; @@ -362,10 +360,10 @@ static enum xz_ret dec_index(struct xz_dec *s, struct xz_buf *b) * of s->crc. s->pos must be zero when starting to validate the first byte. * The "bits" argument allows using the same code for both CRC32 and CRC64. */ -static enum xz_ret crc_validate(struct xz_dec *s, struct xz_buf *b, - uint32_t bits) +static enum xz_ret crc_validate(struct xz_dec *s, struct xz_buf *b, uint32_t bits) { - do { + do + { if (b->in_pos == b->in_size) return XZ_OK; @@ -389,7 +387,8 @@ static enum xz_ret crc_validate(struct xz_dec *s, struct xz_buf *b, */ static bool check_skip(struct xz_dec *s, struct xz_buf *b) { - while (s->pos < check_sizes[s->check_type]) { + while (s->pos < check_sizes[s->check_type]) + { if (b->in_pos == b->in_size) return false; @@ -409,8 +408,8 @@ static enum xz_ret dec_stream_header(struct xz_dec *s) if (!memeq(s->temp.buf, HEADER_MAGIC, HEADER_MAGIC_SIZE)) return XZ_FORMAT_ERROR; - if (xz_crc32(s->temp.buf + HEADER_MAGIC_SIZE, 2, 0) - != get_le32(s->temp.buf + HEADER_MAGIC_SIZE + 2)) + if (xz_crc32(s->temp.buf + HEADER_MAGIC_SIZE, 2, 0) != + get_le32(s->temp.buf + HEADER_MAGIC_SIZE + 2)) return XZ_DATA_ERROR; if (s->temp.buf[HEADER_MAGIC_SIZE] != 0) @@ -476,49 +475,53 @@ static enum xz_ret dec_block_header(struct xz_dec *s) * eight bytes so this is safe. */ s->temp.size -= 4; - if (xz_crc32(s->temp.buf, s->temp.size, 0) - != get_le32(s->temp.buf + s->temp.size)) + if (xz_crc32(s->temp.buf, s->temp.size, 0) != get_le32(s->temp.buf + s->temp.size)) return XZ_DATA_ERROR; s->temp.pos = 2; - /* - * Catch unsupported Block Flags. We support only one or two filters - * in the chain, so we catch that with the same test. - */ +/* + * Catch unsupported Block Flags. We support only one or two filters + * in the chain, so we catch that with the same test. + */ #ifdef XZ_DEC_BCJ if (s->temp.buf[1] & 0x3E) #else - if (s->temp.buf[1] & 0x3F) + if (s->temp.buf[1] & 0x3F) #endif - return XZ_OPTIONS_ERROR; + return XZ_OPTIONS_ERROR; /* Compressed Size */ - if (s->temp.buf[1] & 0x40) { - if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size) - != XZ_STREAM_END) + if (s->temp.buf[1] & 0x40) + { + if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size) != XZ_STREAM_END) return XZ_DATA_ERROR; s->block_header.compressed = s->vli; - } else { + } + else + { s->block_header.compressed = VLI_UNKNOWN; } /* Uncompressed Size */ - if (s->temp.buf[1] & 0x80) { - if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size) - != XZ_STREAM_END) + if (s->temp.buf[1] & 0x80) + { + if (dec_vli(s, s->temp.buf, &s->temp.pos, s->temp.size) != XZ_STREAM_END) return XZ_DATA_ERROR; s->block_header.uncompressed = s->vli; - } else { + } + else + { s->block_header.uncompressed = VLI_UNKNOWN; } #ifdef XZ_DEC_BCJ /* If there are two filters, the first one must be a BCJ filter. */ s->bcj_active = s->temp.buf[1] & 0x01; - if (s->bcj_active) { + if (s->bcj_active) + { if (s->temp.size - s->temp.pos < 2) return XZ_OPTIONS_ERROR; @@ -577,8 +580,10 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) */ s->in_start = b->in_pos; - while (true) { - switch (s->sequence) { + while (true) + { + switch (s->sequence) + { case SEQ_STREAM_HEADER: /* * Stream Header is copied to s->temp, and then @@ -610,7 +615,8 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) return XZ_OK; /* See if this is the beginning of the Index field. */ - if (b->in[b->in_pos] == 0) { + if (b->in[b->in_pos] == 0) + { s->in_start = b->in_pos++; s->sequence = SEQ_INDEX; break; @@ -620,8 +626,7 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) * Calculate the size of the Block Header and * prepare to decode it. */ - s->block_header.size - = ((uint32_t)b->in[b->in_pos] + 1) * 4; + s->block_header.size = ((uint32_t)b->in[b->in_pos] + 1) * 4; s->temp.size = s->block_header.size; s->temp.pos = 0; @@ -652,7 +657,8 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) * anymore, so we use it here to test the size * of the Block Padding field. */ - while (s->block.compressed & 3) { + while (s->block.compressed & 3) + { if (b->in_pos == b->in_size) return XZ_OK; @@ -665,18 +671,21 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) s->sequence = SEQ_BLOCK_CHECK; case SEQ_BLOCK_CHECK: - if (s->check_type == XZ_CHECK_CRC32) { + if (s->check_type == XZ_CHECK_CRC32) + { ret = crc_validate(s, b, 32); if (ret != XZ_STREAM_END) return ret; } - else if (IS_CRC64(s->check_type)) { + else if (IS_CRC64(s->check_type)) + { ret = crc_validate(s, b, 64); if (ret != XZ_STREAM_END) return ret; } #ifdef XZ_DEC_ANY_CHECK - else if (!check_skip(s, b)) { + else if (!check_skip(s, b)) + { return XZ_OK; } #endif @@ -692,9 +701,10 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) s->sequence = SEQ_INDEX_PADDING; case SEQ_INDEX_PADDING: - while ((s->index.size + (b->in_pos - s->in_start)) - & 3) { - if (b->in_pos == b->in_size) { + while ((s->index.size + (b->in_pos - s->in_start)) & 3) + { + if (b->in_pos == b->in_size) + { index_update(s, b); return XZ_OK; } @@ -707,8 +717,7 @@ static enum xz_ret dec_main(struct xz_dec *s, struct xz_buf *b) index_update(s, b); /* Compare the hashes to validate the Index field. */ - if (!memeq(&s->block.hash, &s->index.hash, - sizeof(s->block.hash))) + if (!memeq(&s->block.hash, &s->index.hash, sizeof(s->block.hash))) return XZ_DATA_ERROR; s->sequence = SEQ_INDEX_CRC32; @@ -770,23 +779,26 @@ XZ_EXTERN enum xz_ret xz_dec_run(struct xz_dec *s, struct xz_buf *b) out_start = b->out_pos; ret = dec_main(s, b); - if (DEC_IS_SINGLE(s->mode)) { + if (DEC_IS_SINGLE(s->mode)) + { if (ret == XZ_OK) - ret = b->in_pos == b->in_size - ? XZ_DATA_ERROR : XZ_BUF_ERROR; + ret = b->in_pos == b->in_size ? XZ_DATA_ERROR : XZ_BUF_ERROR; - if (ret != XZ_STREAM_END) { + if (ret != XZ_STREAM_END) + { b->in_pos = in_start; b->out_pos = out_start; } - - } else if (ret == XZ_OK && in_start == b->in_pos - && out_start == b->out_pos) { + } + else if (ret == XZ_OK && in_start == b->in_pos && out_start == b->out_pos) + { if (s->allow_buf_error) ret = XZ_BUF_ERROR; s->allow_buf_error = true; - } else { + } + else + { s->allow_buf_error = false; } @@ -837,7 +849,8 @@ XZ_EXTERN void xz_dec_reset(struct xz_dec *s) XZ_EXTERN void xz_dec_end(struct xz_dec *s) { - if (s != NULL) { + if (s != NULL) + { xz_dec_lzma2_end(s->lzma2); #ifdef XZ_DEC_BCJ xz_dec_bcj_end(s->bcj); diff --git a/depends/xz-embedded/src/xz_lzma2.h b/depends/xz-embedded/src/xz_lzma2.h index 071d67be..3976033a 100644 --- a/depends/xz-embedded/src/xz_lzma2.h +++ b/depends/xz-embedded/src/xz_lzma2.h @@ -39,7 +39,8 @@ * The symbol names are in from STATE_oldest_older_previous. REP means * either short or long repeated match, and NONLIT means any non-literal. */ -enum lzma_state { +enum lzma_state +{ STATE_LIT_LIT, STATE_MATCH_LIT_LIT, STATE_REP_LIT_LIT, @@ -146,8 +147,7 @@ static inline bool lzma_state_is_literal(enum lzma_state state) */ static inline uint32_t lzma_get_dist_state(uint32_t len) { - return len < DIST_STATES + MATCH_LEN_MIN - ? len - MATCH_LEN_MIN : DIST_STATES - 1; + return len < DIST_STATES + MATCH_LEN_MIN ? len - MATCH_LEN_MIN : DIST_STATES - 1; } /* @@ -192,7 +192,7 @@ static inline uint32_t lzma_get_dist_state(uint32_t len) #define ALIGN_MASK (ALIGN_SIZE - 1) /* Total number of all probability variables */ -#define PROBS_TOTAL (1846 + LITERAL_CODERS_MAX * LITERAL_CODER_SIZE) +#define PROBS_TOTAL (1846 + LITERAL_CODERS_MAX *LITERAL_CODER_SIZE) /* * LZMA remembers the four most recent match distances. Reusing these diff --git a/depends/xz-embedded/src/xz_private.h b/depends/xz-embedded/src/xz_private.h index 482b90f3..55a3af1c 100644 --- a/depends/xz-embedded/src/xz_private.h +++ b/depends/xz-embedded/src/xz_private.h @@ -11,51 +11,50 @@ #define XZ_PRIVATE_H #ifdef __KERNEL__ -# include <linux/xz.h> -# include <linux/kernel.h> -# include <asm/unaligned.h> - /* XZ_PREBOOT may be defined only via decompress_unxz.c. */ -# ifndef XZ_PREBOOT -# include <linux/slab.h> -# include <linux/vmalloc.h> -# include <linux/string.h> -# ifdef CONFIG_XZ_DEC_X86 -# define XZ_DEC_X86 -# endif -# ifdef CONFIG_XZ_DEC_POWERPC -# define XZ_DEC_POWERPC -# endif -# ifdef CONFIG_XZ_DEC_IA64 -# define XZ_DEC_IA64 -# endif -# ifdef CONFIG_XZ_DEC_ARM -# define XZ_DEC_ARM -# endif -# ifdef CONFIG_XZ_DEC_ARMTHUMB -# define XZ_DEC_ARMTHUMB -# endif -# ifdef CONFIG_XZ_DEC_SPARC -# define XZ_DEC_SPARC -# endif -# define memeq(a, b, size) (memcmp(a, b, size) == 0) -# define memzero(buf, size) memset(buf, 0, size) -# endif -# define get_le32(p) le32_to_cpup((const uint32_t *)(p)) +#include <linux/xz.h> +#include <linux/kernel.h> +#include <asm/unaligned.h> +/* XZ_PREBOOT may be defined only via decompress_unxz.c. */ +#ifndef XZ_PREBOOT +#include <linux/slab.h> +#include <linux/vmalloc.h> +#include <linux/string.h> +#ifdef CONFIG_XZ_DEC_X86 +#define XZ_DEC_X86 +#endif +#ifdef CONFIG_XZ_DEC_POWERPC +#define XZ_DEC_POWERPC +#endif +#ifdef CONFIG_XZ_DEC_IA64 +#define XZ_DEC_IA64 +#endif +#ifdef CONFIG_XZ_DEC_ARM +#define XZ_DEC_ARM +#endif +#ifdef CONFIG_XZ_DEC_ARMTHUMB +#define XZ_DEC_ARMTHUMB +#endif +#ifdef CONFIG_XZ_DEC_SPARC +#define XZ_DEC_SPARC +#endif +#define memeq(a, b, size) (memcmp(a, b, size) == 0) +#define memzero(buf, size) memset(buf, 0, size) +#endif +#define get_le32(p) le32_to_cpup((const uint32_t *)(p)) #else - /* - * For userspace builds, use a separate header to define the required - * macros and functions. This makes it easier to adapt the code into - * different environments and avoids clutter in the Linux kernel tree. - */ -# include "xz_config.h" +/* + * For userspace builds, use a separate header to define the required + * macros and functions. This makes it easier to adapt the code into + * different environments and avoids clutter in the Linux kernel tree. + */ +#include "xz_config.h" #endif /* If no specific decoding mode is requested, enable support for all modes. */ -#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) \ - && !defined(XZ_DEC_DYNALLOC) -# define XZ_DEC_SINGLE -# define XZ_DEC_PREALLOC -# define XZ_DEC_DYNALLOC +#if !defined(XZ_DEC_SINGLE) && !defined(XZ_DEC_PREALLOC) && !defined(XZ_DEC_DYNALLOC) +#define XZ_DEC_SINGLE +#define XZ_DEC_PREALLOC +#define XZ_DEC_DYNALLOC #endif /* @@ -64,29 +63,29 @@ * false at compile time and thus allow the compiler to omit unneeded code. */ #ifdef XZ_DEC_SINGLE -# define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE) +#define DEC_IS_SINGLE(mode) ((mode) == XZ_SINGLE) #else -# define DEC_IS_SINGLE(mode) (false) +#define DEC_IS_SINGLE(mode) (false) #endif #ifdef XZ_DEC_PREALLOC -# define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC) +#define DEC_IS_PREALLOC(mode) ((mode) == XZ_PREALLOC) #else -# define DEC_IS_PREALLOC(mode) (false) +#define DEC_IS_PREALLOC(mode) (false) #endif #ifdef XZ_DEC_DYNALLOC -# define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC) +#define DEC_IS_DYNALLOC(mode) ((mode) == XZ_DYNALLOC) #else -# define DEC_IS_DYNALLOC(mode) (false) +#define DEC_IS_DYNALLOC(mode) (false) #endif #if !defined(XZ_DEC_SINGLE) -# define DEC_IS_MULTI(mode) (true) +#define DEC_IS_MULTI(mode) (true) #elif defined(XZ_DEC_PREALLOC) || defined(XZ_DEC_DYNALLOC) -# define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE) +#define DEC_IS_MULTI(mode) ((mode) != XZ_SINGLE) #else -# define DEC_IS_MULTI(mode) (false) +#define DEC_IS_MULTI(mode) (false) #endif /* @@ -94,20 +93,18 @@ * XZ_DEC_BCJ is used to enable generic support for BCJ decoders. */ #ifndef XZ_DEC_BCJ -# if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) \ - || defined(XZ_DEC_IA64) || defined(XZ_DEC_ARM) \ - || defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) \ - || defined(XZ_DEC_SPARC) -# define XZ_DEC_BCJ -# endif +#if defined(XZ_DEC_X86) || defined(XZ_DEC_POWERPC) || defined(XZ_DEC_IA64) || \ + defined(XZ_DEC_ARM) || defined(XZ_DEC_ARM) || defined(XZ_DEC_ARMTHUMB) || \ + defined(XZ_DEC_SPARC) +#define XZ_DEC_BCJ +#endif #endif /* * Allocate memory for LZMA2 decoder. xz_dec_lzma2_reset() must be used * before calling xz_dec_lzma2_run(). */ -XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, - uint32_t dict_max); +XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, uint32_t dict_max); /* * Decode the LZMA2 properties (one byte) and reset the decoder. Return @@ -115,12 +112,10 @@ XZ_EXTERN struct xz_dec_lzma2 *xz_dec_lzma2_create(enum xz_mode mode, * big enough, and XZ_OPTIONS_ERROR if props indicates something that this * decoder doesn't support. */ -XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, - uint8_t props); +XZ_EXTERN enum xz_ret xz_dec_lzma2_reset(struct xz_dec_lzma2 *s, uint8_t props); /* Decode raw LZMA2 stream from b->in to b->out. */ -XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, - struct xz_buf *b); +XZ_EXTERN enum xz_ret xz_dec_lzma2_run(struct xz_dec_lzma2 *s, struct xz_buf *b); /* Free the memory allocated for the LZMA2 decoder. */ XZ_EXTERN void xz_dec_lzma2_end(struct xz_dec_lzma2 *s); @@ -145,9 +140,8 @@ XZ_EXTERN enum xz_ret xz_dec_bcj_reset(struct xz_dec_bcj *s, uint8_t id); * a BCJ filter in the chain. If the chain has only LZMA2, xz_dec_lzma2_run() * must be called directly. */ -XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, - struct xz_dec_lzma2 *lzma2, - struct xz_buf *b); +XZ_EXTERN enum xz_ret xz_dec_bcj_run(struct xz_dec_bcj *s, struct xz_dec_lzma2 *lzma2, + struct xz_buf *b); /* Free the memory allocated for the BCJ filters. */ #define xz_dec_bcj_end(s) kfree(s) diff --git a/depends/xz-embedded/src/xz_stream.h b/depends/xz-embedded/src/xz_stream.h index 66cb5a70..c0e191e6 100644 --- a/depends/xz-embedded/src/xz_stream.h +++ b/depends/xz-embedded/src/xz_stream.h @@ -11,10 +11,9 @@ #define XZ_STREAM_H #if defined(__KERNEL__) && !XZ_INTERNAL_CRC32 -# include <linux/crc32.h> -# undef crc32 -# define xz_crc32(buf, size, crc) \ - (~crc32_le(~(uint32_t)(crc), buf, size)) +#include <linux/crc32.h> +#undef crc32 +#define xz_crc32(buf, size, crc) (~crc32_le(~(uint32_t)(crc), buf, size)) #endif /* @@ -42,14 +41,15 @@ */ typedef uint64_t vli_type; -#define VLI_MAX ((vli_type)-1 / 2) -#define VLI_UNKNOWN ((vli_type)-1) +#define VLI_MAX ((vli_type) - 1 / 2) +#define VLI_UNKNOWN ((vli_type) - 1) /* Maximum encoded size of a VLI */ #define VLI_BYTES_MAX (sizeof(vli_type) * 8 / 7) /* Integrity Check types */ -enum xz_check { +enum xz_check +{ XZ_CHECK_NONE = 0, XZ_CHECK_CRC32 = 1, XZ_CHECK_CRC64 = 4, diff --git a/depends/xz-embedded/xzminidec.c b/depends/xz-embedded/xzminidec.c index ba074131..bb62c3ac 100644 --- a/depends/xz-embedded/xzminidec.c +++ b/depends/xz-embedded/xzminidec.c @@ -29,10 +29,11 @@ int main(int argc, char **argv) enum xz_ret ret; const char *msg; - if (argc >= 2 && strcmp(argv[1], "--help") == 0) { + if (argc >= 2 && strcmp(argv[1], "--help") == 0) + { fputs("Uncompress a .xz file from stdin to stdout.\n" - "Arguments other than `--help' are ignored.\n", - stdout); + "Arguments other than `--help' are ignored.\n", + stdout); return 0; } @@ -46,7 +47,8 @@ int main(int argc, char **argv) * is allocated once the headers have been parsed. */ s = xz_dec_init(XZ_DYNALLOC, 1 << 26); - if (s == NULL) { + if (s == NULL) + { msg = "Memory allocation failed\n"; goto error; } @@ -58,16 +60,20 @@ int main(int argc, char **argv) b.out_pos = 0; b.out_size = BUFSIZ; - while (true) { - if (b.in_pos == b.in_size) { + while (true) + { + if (b.in_pos == b.in_size) + { b.in_size = fread(in, 1, sizeof(in), stdin); b.in_pos = 0; } ret = xz_dec_run(s, &b); - if (b.out_pos == sizeof(out)) { - if (fwrite(out, 1, b.out_pos, stdout) != b.out_pos) { + if (b.out_pos == sizeof(out)) + { + if (fwrite(out, 1, b.out_pos, stdout) != b.out_pos) + { msg = "Write error\n"; goto error; } @@ -79,22 +85,25 @@ int main(int argc, char **argv) continue; #ifdef XZ_DEC_ANY_CHECK - if (ret == XZ_UNSUPPORTED_CHECK) { + if (ret == XZ_UNSUPPORTED_CHECK) + { fputs(argv[0], stderr); fputs(": ", stderr); fputs("Unsupported check; not verifying " - "file integrity\n", stderr); + "file integrity\n", + stderr); continue; } #endif - if (fwrite(out, 1, b.out_pos, stdout) != b.out_pos - || fclose(stdout)) { + if (fwrite(out, 1, b.out_pos, stdout) != b.out_pos || fclose(stdout)) + { msg = "Write error\n"; goto error; } - switch (ret) { + switch (ret) + { case XZ_STREAM_END: xz_dec_end(s); return 0; diff --git a/gui/consolewindow.cpp b/gui/ConsoleWindow.cpp index 49e12339..ec25b9cf 100644 --- a/gui/consolewindow.cpp +++ b/gui/ConsoleWindow.cpp @@ -1,11 +1,26 @@ -#include "consolewindow.h" -#include "ui_consolewindow.h" +/* 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 "ConsoleWindow.h" +#include "ui_ConsoleWindow.h" #include <QScrollBar> #include <QMessageBox> -#include <gui/platform.h> -#include <gui/CustomMessageBox.h> +#include <gui/Platform.h> +#include <gui/dialogs/CustomMessageBox.h> ConsoleWindow::ConsoleWindow(MinecraftProcess *mcproc, QWidget *parent) : QDialog(parent), diff --git a/gui/consolewindow.h b/gui/ConsoleWindow.h index e8790c92..0ed35554 100644 --- a/gui/consolewindow.h +++ b/gui/ConsoleWindow.h @@ -1,10 +1,25 @@ -#ifndef CONSOLEWINDOW_H -#define CONSOLEWINDOW_H +/* 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. + */ + +#pragma once #include <QDialog> #include "logic/MinecraftProcess.h" -namespace Ui { +namespace Ui +{ class ConsoleWindow; } @@ -23,14 +38,15 @@ public: */ void setMayClose(bool mayclose); -public slots: +public +slots: /** * @brief write a string * @param data the string * @param mode the WriteMode * lines have to be put through this as a whole! */ - void write(QString data, MessageLevel::Enum level=MessageLevel::MultiMC); + void write(QString data, MessageLevel::Enum level = MessageLevel::MultiMC); /** * @brief write a colored paragraph @@ -39,14 +55,15 @@ public slots: * this will only insert a single paragraph. * \n are ignored. a real \n is always appended. */ - void writeColor(QString data, const char *color=nullptr); + void writeColor(QString data, const char *color = nullptr); /** * @brief clear the text widget */ void clear(); -private slots: +private +slots: void on_closeButton_clicked(); void on_btnKillMinecraft_clicked(); void onEnded(BaseInstance *instance); @@ -60,4 +77,3 @@ private: bool m_mayclose; }; -#endif // CONSOLEWINDOW_H diff --git a/gui/consolewindow.ui b/gui/ConsoleWindow.ui index 8dc80015..8dc80015 100644 --- a/gui/consolewindow.ui +++ b/gui/ConsoleWindow.ui diff --git a/gui/CustomMessageBox.cpp b/gui/CustomMessageBox.cpp deleted file mode 100644 index e55ebbbb..00000000 --- a/gui/CustomMessageBox.cpp +++ /dev/null @@ -1,19 +0,0 @@ -#include "CustomMessageBox.h" - -namespace CustomMessageBox -{ - QMessageBox *selectable(QWidget *parent, const QString &title, const QString &text, - QMessageBox::Icon icon, QMessageBox::StandardButtons buttons, - QMessageBox::StandardButton defaultButton) - { - QMessageBox *messageBox = new QMessageBox(parent); - messageBox->setWindowTitle(title); - messageBox->setText(text); - messageBox->setStandardButtons(buttons); - messageBox->setDefaultButton(defaultButton); - messageBox->setTextInteractionFlags(Qt::TextSelectableByMouse); - messageBox->setIcon(icon); - - return messageBox; - } -} diff --git a/gui/CustomMessageBox.h b/gui/CustomMessageBox.h deleted file mode 100644 index 145651ec..00000000 --- a/gui/CustomMessageBox.h +++ /dev/null @@ -1,11 +0,0 @@ -#pragma once - -#include <QMessageBox> - -namespace CustomMessageBox -{ - QMessageBox *selectable(QWidget *parent, const QString &title, const QString &text, - QMessageBox::Icon icon = QMessageBox::NoIcon, - QMessageBox::StandardButtons buttons = QMessageBox::Ok, - QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); -} diff --git a/gui/EditNotesDialog.cpp b/gui/EditNotesDialog.cpp deleted file mode 100644 index 535ca804..00000000 --- a/gui/EditNotesDialog.cpp +++ /dev/null @@ -1,29 +0,0 @@ -#include "EditNotesDialog.h" -#include "ui_EditNotesDialog.h" -#include "gui/platform.h" - -#include <QIcon> -#include <QApplication> - -EditNotesDialog::EditNotesDialog( QString notes, QString name, QWidget* parent ) : - m_instance_notes(notes), - m_instance_name(name), - QDialog(parent), - ui(new Ui::EditNotesDialog) -{ - MultiMCPlatform::fixWM_CLASS(this); - ui->setupUi(this); - ui->noteEditor->setText(notes); - setWindowTitle(tr("Edit notes of %1").arg(m_instance_name)); - //connect(ui->closeButton, SIGNAL(clicked()), SLOT(close())); -} - -EditNotesDialog::~EditNotesDialog() -{ - delete ui; -} - -QString EditNotesDialog::getText() -{ - return ui->noteEditor->toPlainText(); -} diff --git a/gui/EditNotesDialog.h b/gui/EditNotesDialog.h deleted file mode 100644 index 582e019f..00000000 --- a/gui/EditNotesDialog.h +++ /dev/null @@ -1,20 +0,0 @@ -#pragma once -#include <QDialog> - -namespace Ui { -class EditNotesDialog; -} - -class EditNotesDialog : public QDialog -{ - Q_OBJECT - -public: - explicit EditNotesDialog(QString notes, QString name, QWidget *parent = 0); - ~EditNotesDialog(); - QString getText(); -private: - Ui::EditNotesDialog *ui; - QString m_instance_name; - QString m_instance_notes; -}; diff --git a/gui/IconPickerDialog.cpp b/gui/IconPickerDialog.cpp deleted file mode 100644 index ebacf87c..00000000 --- a/gui/IconPickerDialog.cpp +++ /dev/null @@ -1,147 +0,0 @@ -#include <MultiMC.h> -#include "IconPickerDialog.h" -#include "instancedelegate.h" -#include "ui_IconPickerDialog.h" -#include "logic/lists/IconList.h" -#include "gui/platform.h" -#include <QKeyEvent> -#include <QPushButton> -#include <QFileDialog> - -IconPickerDialog::IconPickerDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::IconPickerDialog) -{ - MultiMCPlatform::fixWM_CLASS(this); - ui->setupUi(this); - setWindowModality(Qt::WindowModal); - - auto contentsWidget = ui->iconView; - contentsWidget->setViewMode(QListView::IconMode); - contentsWidget->setFlow(QListView::LeftToRight); - contentsWidget->setIconSize(QSize(48, 48)); - contentsWidget->setMovement(QListView::Static); - contentsWidget->setResizeMode(QListView::Adjust); - contentsWidget->setSelectionMode(QAbstractItemView::SingleSelection); - contentsWidget->setSpacing(5); - contentsWidget->setWordWrap(false); - contentsWidget->setWrapping(true); - contentsWidget->setUniformItemSizes(true); - contentsWidget->setTextElideMode(Qt::ElideRight); - contentsWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); - contentsWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); - contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - contentsWidget->setItemDelegate(new ListViewDelegate()); - - //contentsWidget->setAcceptDrops(true); - contentsWidget->setDropIndicatorShown(true); - contentsWidget->viewport()->setAcceptDrops(true); - contentsWidget->setDragDropMode(QAbstractItemView::DropOnly); - contentsWidget->setDefaultDropAction(Qt::CopyAction); - - contentsWidget->installEventFilter(this); - - contentsWidget->setModel(MMC->icons().get()); - - auto buttonAdd = ui->buttonBox->addButton(tr("Add Icon"),QDialogButtonBox::ResetRole); - auto buttonRemove = ui->buttonBox->addButton(tr("Remove Icon"),QDialogButtonBox::ResetRole); - - - connect(buttonAdd,SIGNAL(clicked(bool)),SLOT(addNewIcon())); - connect(buttonRemove,SIGNAL(clicked(bool)),SLOT(removeSelectedIcon())); - - connect - ( - contentsWidget, - SIGNAL(doubleClicked(QModelIndex)), - SLOT(activated(QModelIndex)) - ); - - connect - ( - contentsWidget->selectionModel(), - SIGNAL(selectionChanged(QItemSelection,QItemSelection)), - SLOT(selectionChanged(QItemSelection,QItemSelection)) - ); -} -bool IconPickerDialog::eventFilter ( QObject* obj, QEvent* evt) -{ - if(obj != ui->iconView) - return QDialog::eventFilter(obj ,evt); - if (evt->type() != QEvent::KeyPress) - { - return QDialog::eventFilter(obj ,evt); - } - QKeyEvent *keyEvent = static_cast<QKeyEvent*>(evt); - switch(keyEvent->key()) - { - case Qt::Key_Delete: - removeSelectedIcon(); - return true; - case Qt::Key_Plus: - addNewIcon(); - return true; - default: - break; - } - return QDialog::eventFilter(obj ,evt); -} - -void IconPickerDialog::addNewIcon() -{ - //: The title of the select icons open file dialog - QString selectIcons = tr("Select Icons"); - //: The type of icon files - QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(), tr("Icons") + "(*.png *.jpg *.jpeg)"); - MMC->icons()->installIcons(fileNames); -} - -void IconPickerDialog::removeSelectedIcon() -{ - MMC->icons()->deleteIcon(selectedIconKey); -} - - -void IconPickerDialog::activated ( QModelIndex index ) -{ - selectedIconKey = index.data(Qt::UserRole).toString(); - accept(); -} - - -void IconPickerDialog::selectionChanged ( QItemSelection selected, QItemSelection deselected ) -{ - if(selected.empty()) - return; - - QString key = selected.first().indexes().first().data(Qt::UserRole).toString(); - if(!key.isEmpty()) - selectedIconKey = key; -} - -int IconPickerDialog::exec ( QString selection ) -{ - auto list = MMC->icons(); - auto contentsWidget = ui->iconView; - selectedIconKey = selection; - - - int index_nr = list->getIconIndex(selection); - auto model_index = list->index(index_nr); - contentsWidget->selectionModel()->select(model_index, QItemSelectionModel::Current | QItemSelectionModel::Select); - - QMetaObject::invokeMethod(this, "delayed_scroll", Qt::QueuedConnection, Q_ARG(QModelIndex,model_index)); - return QDialog::exec(); -} - -void IconPickerDialog::delayed_scroll ( QModelIndex model_index ) -{ - auto contentsWidget = ui->iconView; - contentsWidget->scrollTo(model_index); -} - - -IconPickerDialog::~IconPickerDialog() -{ - delete ui; -} diff --git a/gui/IconPickerDialog.h b/gui/IconPickerDialog.h deleted file mode 100644 index 96fc61ff..00000000 --- a/gui/IconPickerDialog.h +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once -#include <QDialog> -#include <QItemSelection> - -namespace Ui { -class IconPickerDialog; -} - -class IconPickerDialog : public QDialog -{ - Q_OBJECT - -public: - explicit IconPickerDialog(QWidget *parent = 0); - ~IconPickerDialog(); - int exec(QString selection); - QString selectedIconKey; -protected: - virtual bool eventFilter ( QObject* , QEvent* ); -private: - Ui::IconPickerDialog *ui; - -private slots: - void selectionChanged ( QItemSelection,QItemSelection ); - void activated ( QModelIndex ); - void delayed_scroll ( QModelIndex ); - void addNewIcon(); - void removeSelectedIcon(); -}; diff --git a/gui/LabeledToolButton.h b/gui/LabeledToolButton.h deleted file mode 100644 index 24ef798a..00000000 --- a/gui/LabeledToolButton.h +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include <QPushButton> -#include <QToolButton> - -class QLabel; - -class LabeledToolButton : public QToolButton -{ - Q_OBJECT - - QLabel * m_label; - -public: - LabeledToolButton(QWidget * parent = 0); - - QString text() const; - void setText(const QString & text); - virtual QSize sizeHint() const; -protected: - void resizeEvent(QResizeEvent * event); -}; diff --git a/gui/mainwindow.cpp b/gui/MainWindow.cpp index 20a2b84b..39e6dff2 100644 --- a/gui/mainwindow.cpp +++ b/gui/MainWindow.cpp @@ -16,10 +16,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -#include <MultiMC.h> +#include "MultiMC.h" -#include "mainwindow.h" -#include "ui_mainwindow.h" +#include "MainWindow.h" +#include "ui_MainWindow.h" #include "keyring.h" #include <QMenu> @@ -40,17 +40,25 @@ #include "categorizedview.h" #include "categorydrawer.h" -#include "gui/settingsdialog.h" -#include "gui/newinstancedialog.h" -#include "gui/logindialog.h" -#include "gui/ProgressDialog.h" -#include "gui/aboutdialog.h" -#include "gui/versionselectdialog.h" -#include "gui/lwjglselectdialog.h" -#include "gui/consolewindow.h" -#include "gui/instancesettings.h" -#include "gui/platform.h" -#include "gui/CustomMessageBox.h" +#include "gui/Platform.h" + +#include "gui/widgets/InstanceDelegate.h" +#include "gui/widgets/LabeledToolButton.h" + +#include "gui/dialogs/SettingsDialog.h" +#include "gui/dialogs/NewInstanceDialog.h" +#include "gui/dialogs/LoginDialog.h" +#include "gui/dialogs/ProgressDialog.h" +#include "gui/dialogs/AboutDialog.h" +#include "gui/dialogs/VersionSelectDialog.h" +#include "gui/dialogs/CustomMessageBox.h" +#include "gui/dialogs/LwjglSelectDialog.h" +#include "gui/dialogs/InstanceSettings.h" +#include "gui/dialogs/IconPickerDialog.h" +#include "gui/dialogs/EditNotesDialog.h" +#include "gui/dialogs/CopyInstanceDialog.h" + +#include "gui/ConsoleWindow.h" #include "logic/lists/InstanceList.h" #include "logic/lists/MinecraftVersionList.h" @@ -70,12 +78,6 @@ #include "logic/LegacyInstance.h" -#include "instancedelegate.h" -#include "IconPickerDialog.h" -#include "LabeledToolButton.h" -#include "EditNotesDialog.h" -#include "CopyInstanceDialog.h" - MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { MultiMCPlatform::fixWM_CLASS(this); diff --git a/gui/mainwindow.h b/gui/MainWindow.h index 36562563..97aa0d9f 100644 --- a/gui/mainwindow.h +++ b/gui/MainWindow.h @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef MAINWINDOW_H -#define MAINWINDOW_H +#pragma once #include <QMainWindow> @@ -166,5 +165,3 @@ private: QLabel *m_statusLeft; QLabel *m_statusRight; }; - -#endif // MAINWINDOW_H diff --git a/gui/mainwindow.ui b/gui/MainWindow.ui index 6f70fc98..6f70fc98 100644 --- a/gui/mainwindow.ui +++ b/gui/MainWindow.ui diff --git a/gui/ModEditDialogCommon.cpp b/gui/ModEditDialogCommon.cpp deleted file mode 100644 index 873cd8ea..00000000 --- a/gui/ModEditDialogCommon.cpp +++ /dev/null @@ -1,41 +0,0 @@ -#include "ModEditDialogCommon.h" -#include "CustomMessageBox.h" -#include <QDesktopServices> -#include <QMessageBox> -#include <QString> -#include <QUrl> -bool lastfirst(QModelIndexList &list, int &first, int &last) -{ - if (!list.size()) - return false; - first = last = list[0].row(); - for (auto item : list) - { - int row = item.row(); - if (row < first) - first = row; - if (row > last) - last = row; - } - return true; -} - -void showWebsiteForMod(QWidget *parentDlg, Mod &m) -{ - QString url = m.homeurl(); - if (url.size()) - { - // catch the cases where the protocol is missing - if(!url.startsWith("http")) - { - url = "http://" + url; - } - QDesktopServices::openUrl(url); - } - else - { - CustomMessageBox::selectable(parentDlg, parentDlg->tr("How sad!"), - parentDlg->tr("The mod author didn't provide a website link for this mod."), - QMessageBox::Warning); - } -} diff --git a/gui/ModEditDialogCommon.h b/gui/ModEditDialogCommon.h deleted file mode 100644 index bc8e223f..00000000 --- a/gui/ModEditDialogCommon.h +++ /dev/null @@ -1,7 +0,0 @@ -#pragma once -#include <QAbstractItemModel> -#include <logic/Mod.h> - -bool lastfirst (QModelIndexList & list, int & first, int & last); - -void showWebsiteForMod(QWidget * parentDlg, Mod& m);
\ No newline at end of file diff --git a/gui/ModListView.h b/gui/ModListView.h deleted file mode 100644 index 69a26755..00000000 --- a/gui/ModListView.h +++ /dev/null @@ -1,13 +0,0 @@ -#pragma once -#include <QTreeView> - -class Mod; - -class ModListView: public QTreeView -{ - Q_OBJECT -public: - explicit ModListView ( QWidget* parent = 0 ); - virtual void setModel ( QAbstractItemModel* model ); - -}; diff --git a/gui/platform.h b/gui/Platform.h index 5cf9ed80..5cde9505 100644 --- a/gui/platform.h +++ b/gui/Platform.h @@ -15,11 +15,10 @@ * limitations under the License. */ -#ifndef PLATFORM_H -#define PLATFORM_H +#pragma once /** - * @file platform.h + * @file Platform.h * This file contains platform-specific functions, tweaks and fixes. */ @@ -31,5 +30,3 @@ public: // X11 WM_CLASS static void fixWM_CLASS(QWidget *widget); }; - -#endif // PLATFORM_H diff --git a/gui/platform_other.cpp b/gui/Platform_Other.cpp index a41abe36..e02bd921 100644 --- a/gui/platform_other.cpp +++ b/gui/Platform_Other.cpp @@ -15,7 +15,7 @@ * limitations under the License. */ -#include <gui/platform.h> +#include <gui/Platform.h> /** * Stub for non-X11 platforms * @brief MultiMCPlatform::fixWM_CLASS diff --git a/gui/platform_x11.cpp b/gui/Platform_X11.cpp index 0401e8bf..bcd26f53 100644 --- a/gui/platform_x11.cpp +++ b/gui/Platform_X11.cpp @@ -15,7 +15,7 @@ * limitations under the License. */ -#include <gui/platform.h> +#include <gui/Platform.h> #include <QtX11Extras/QX11Info> #include <xcb/xcb.h> diff --git a/gui/aboutdialog.cpp b/gui/aboutdialog.cpp deleted file mode 100644 index 7105446c..00000000 --- a/gui/aboutdialog.cpp +++ /dev/null @@ -1,24 +0,0 @@ -#include "aboutdialog.h" -#include "ui_aboutdialog.h" -#include <QIcon> -#include <MultiMC.h> -#include "gui/platform.h" - -AboutDialog::AboutDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::AboutDialog) -{ - MultiMCPlatform::fixWM_CLASS(this); - ui->setupUi(this); - - ui->icon->setPixmap(QIcon(":/icons/multimc/scalable/apps/multimc.svg").pixmap(64)); - ui->title->setText("MultiMC " + MMC->version().toString()); - connect(ui->closeButton, SIGNAL(clicked()), SLOT(close())); - - MMC->connect(ui->aboutQt, SIGNAL(clicked()), SLOT(aboutQt())); -} - -AboutDialog::~AboutDialog() -{ - delete ui; -} diff --git a/gui/aboutdialog.h b/gui/aboutdialog.h deleted file mode 100644 index d462de28..00000000 --- a/gui/aboutdialog.h +++ /dev/null @@ -1,22 +0,0 @@ -#ifndef ABOUTDIALOG_H -#define ABOUTDIALOG_H - -#include <QDialog> - -namespace Ui { -class AboutDialog; -} - -class AboutDialog : public QDialog -{ - Q_OBJECT - -public: - explicit AboutDialog(QWidget *parent = 0); - ~AboutDialog(); - -private: - Ui::AboutDialog *ui; -}; - -#endif // ABOUTDIALOG_H diff --git a/gui/dialogs/AboutDialog.cpp b/gui/dialogs/AboutDialog.cpp new file mode 100644 index 00000000..58d61dd0 --- /dev/null +++ b/gui/dialogs/AboutDialog.cpp @@ -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 "AboutDialog.h" +#include "ui_AboutDialog.h" +#include <QIcon> +#include "MultiMC.h" +#include "gui/Platform.h" + +AboutDialog::AboutDialog(QWidget *parent) : QDialog(parent), ui(new Ui::AboutDialog) +{ + MultiMCPlatform::fixWM_CLASS(this); + ui->setupUi(this); + + ui->icon->setPixmap(QIcon(":/icons/multimc/scalable/apps/multimc.svg").pixmap(64)); + ui->title->setText("MultiMC " + MMC->version().toString()); + connect(ui->closeButton, SIGNAL(clicked()), SLOT(close())); + + MMC->connect(ui->aboutQt, SIGNAL(clicked()), SLOT(aboutQt())); +} + +AboutDialog::~AboutDialog() +{ + delete ui; +} diff --git a/gui/dialogs/AboutDialog.h b/gui/dialogs/AboutDialog.h new file mode 100644 index 00000000..9d747bac --- /dev/null +++ b/gui/dialogs/AboutDialog.h @@ -0,0 +1,35 @@ +/* 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. + */ + +#pragma once + +#include <QDialog> + +namespace Ui +{ +class AboutDialog; +} + +class AboutDialog : public QDialog +{ + Q_OBJECT + +public: + explicit AboutDialog(QWidget *parent = 0); + ~AboutDialog(); + +private: + Ui::AboutDialog *ui; +}; diff --git a/gui/aboutdialog.ui b/gui/dialogs/AboutDialog.ui index c075f895..0a189d9c 100644 --- a/gui/aboutdialog.ui +++ b/gui/dialogs/AboutDialog.ui @@ -59,7 +59,7 @@ <string/> </property> <property name="pixmap"> - <pixmap resource="../multimc.qrc">:/icons/multimc/scalable/apps/multimc.svg</pixmap> + <pixmap resource="../../multimc.qrc">:/icons/multimc/scalable/apps/multimc.svg</pixmap> </property> </widget> </item> @@ -101,7 +101,7 @@ <x>0</x> <y>0</y> <width>432</width> - <height>197</height> + <height>179</height> </rect> </property> <attribute name="label"> @@ -159,8 +159,8 @@ <rect> <x>0</x> <y>0</y> - <width>432</width> - <height>197</height> + <width>98</width> + <height>120</height> </rect> </property> <attribute name="label"> @@ -176,13 +176,13 @@ <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Andrew Okin &lt;</span><a href="mailto:forkk@forkk.net"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">forkk@forkk.net</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Petr Mrázek &lt;</span><a href="mailto:peterix@gmail.com"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">peterix@gmail.com</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Orochimarufan &lt;</span><a href="mailto:orochimarufan.x3@gmail.com"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">orochimarufan.x3@gmail.com</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">TakSuyu &lt;</span><a href="mailto:taksuyu@gmail.com"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">taksuyu@gmail.com</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Sky (Drayshak) &lt;</span><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">multimc@bunnies.cc</span><span style=" font-family:'Ubuntu'; font-size:11pt;">&gt;</span></p> -<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:11pt;">Kilobyte &lt;</span><a href="mailto:stiepen22@gmx.de"><span style=" font-family:'Ubuntu'; font-size:11pt; text-decoration: underline; color:#0000ff;">stiepen22@gmx.de</span></a><span style=" font-family:'Ubuntu'; font-size:11pt;">&gt;</span></p></body></html></string> +</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:400; font-style:normal;"> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Andrew Okin &lt;</span><a href="mailto:forkk@forkk.net"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">forkk@forkk.net</span></a><span style=" font-family:'Ubuntu';">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Petr Mrázek &lt;</span><a href="mailto:peterix@gmail.com"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">peterix@gmail.com</span></a><span style=" font-family:'Ubuntu';">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Orochimarufan &lt;</span><a href="mailto:orochimarufan.x3@gmail.com"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">orochimarufan.x3@gmail.com</span></a><span style=" font-family:'Ubuntu';">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">TakSuyu &lt;</span><a href="mailto:taksuyu@gmail.com"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">taksuyu@gmail.com</span></a><span style=" font-family:'Ubuntu';">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Sky (Drayshak) &lt;</span><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">multimc@bunnies.cc</span><span style=" font-family:'Ubuntu';">&gt;</span></p> +<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu';">Kilobyte &lt;</span><a href="mailto:stiepen22@gmx.de"><span style=" font-family:'Ubuntu'; text-decoration: underline; color:#0000ff;">stiepen22@gmx.de</span></a><span style=" font-family:'Ubuntu';">&gt;</span></p></body></html></string> </property> </widget> </item> @@ -203,8 +203,8 @@ p, li { white-space: pre-wrap; } <rect> <x>0</x> <y>0</y> - <width>432</width> - <height>197</height> + <width>98</width> + <height>88</height> </rect> </property> <attribute name="label"> @@ -226,7 +226,7 @@ p, li { white-space: pre-wrap; } <string><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0//EN" "http://www.w3.org/TR/REC-html40/strict.dtd"> <html><head><meta name="qrichtext" content="1" /><style type="text/css"> p, li { white-space: pre-wrap; } -</style></head><body style=" font-family:'MS Shell Dlg 2'; font-size:8.25pt; font-weight:400; font-style:normal;"> +</style></head><body style=" font-family:'Bitstream Vera Sans'; font-size:11pt; font-weight:400; font-style:normal;"> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Copyright 2012 MultiMC Contributors</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">Licensed under the Apache License, Version 2.0 (the &quot;License&quot;);</span></p> <p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"><span style=" font-family:'Ubuntu'; font-size:10pt;">you may not use this file except in compliance with the License.</span></p> @@ -309,7 +309,8 @@ p, li { white-space: pre-wrap; } </layout> </widget> <resources> - <include location="../multimc.qrc"/> + <include location="../../multimc.qrc"/> + <include location="../../multimc.qrc"/> </resources> <connections/> </ui> diff --git a/gui/CopyInstanceDialog.cpp b/gui/dialogs/CopyInstanceDialog.cpp index 1e0b9e6c..4d588a1e 100644 --- a/gui/CopyInstanceDialog.cpp +++ b/gui/dialogs/CopyInstanceDialog.cpp @@ -13,24 +13,24 @@ * limitations under the License. */ -#include <MultiMC.h> +#include <QLayout> +#include <QPushButton> + +#include "MultiMC.h" #include "CopyInstanceDialog.h" #include "ui_CopyInstanceDialog.h" +#include "gui/Platform.h" +#include "gui/dialogs/VersionSelectDialog.h" +#include "gui/dialogs/ProgressDialog.h" +#include "gui/dialogs/IconPickerDialog.h" + #include "logic/InstanceFactory.h" #include "logic/BaseVersion.h" #include "logic/lists/IconList.h" #include "logic/lists/MinecraftVersionList.h" #include "logic/tasks/Task.h" -#include <logic/BaseInstance.h> - -#include "gui/platform.h" -#include "versionselectdialog.h" -#include "ProgressDialog.h" -#include "IconPickerDialog.h" - -#include <QLayout> -#include <QPushButton> +#include "logic/BaseInstance.h" CopyInstanceDialog::CopyInstanceDialog(BaseInstance *original, QWidget *parent) : m_original(original), QDialog(parent), ui(new Ui::CopyInstanceDialog) diff --git a/gui/CopyInstanceDialog.h b/gui/dialogs/CopyInstanceDialog.h index 7ab366e2..7ab366e2 100644 --- a/gui/CopyInstanceDialog.h +++ b/gui/dialogs/CopyInstanceDialog.h diff --git a/gui/CopyInstanceDialog.ui b/gui/dialogs/CopyInstanceDialog.ui index 1327ce0b..dd7ce641 100644 --- a/gui/CopyInstanceDialog.ui +++ b/gui/dialogs/CopyInstanceDialog.ui @@ -17,7 +17,7 @@ <string>Copy Instance</string> </property> <property name="windowIcon"> - <iconset resource="../multimc.qrc"> + <iconset resource="../../multimc.qrc"> <normaloff>:/icons/toolbar/copy</normaloff>:/icons/toolbar/copy</iconset> </property> <property name="modal"> @@ -42,7 +42,7 @@ <item> <widget class="QToolButton" name="iconButton"> <property name="icon"> - <iconset resource="../multimc.qrc"> + <iconset resource="../../multimc.qrc"> <normaloff>:/icons/instances/infinity</normaloff>:/icons/instances/infinity</iconset> </property> <property name="iconSize"> @@ -95,7 +95,7 @@ </layout> </widget> <resources> - <include location="../multimc.qrc"/> + <include location="../../multimc.qrc"/> </resources> <connections> <connection> diff --git a/gui/dialogs/CustomMessageBox.cpp b/gui/dialogs/CustomMessageBox.cpp new file mode 100644 index 00000000..1d2ab58a --- /dev/null +++ b/gui/dialogs/CustomMessageBox.cpp @@ -0,0 +1,34 @@ +/* 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 "CustomMessageBox.h" + +namespace CustomMessageBox +{ +QMessageBox *selectable(QWidget *parent, const QString &title, const QString &text, + QMessageBox::Icon icon, QMessageBox::StandardButtons buttons, + QMessageBox::StandardButton defaultButton) +{ + QMessageBox *messageBox = new QMessageBox(parent); + messageBox->setWindowTitle(title); + messageBox->setText(text); + messageBox->setStandardButtons(buttons); + messageBox->setDefaultButton(defaultButton); + messageBox->setTextInteractionFlags(Qt::TextSelectableByMouse); + messageBox->setIcon(icon); + + return messageBox; +} +} diff --git a/gui/dialogs/CustomMessageBox.h b/gui/dialogs/CustomMessageBox.h new file mode 100644 index 00000000..b08b9f57 --- /dev/null +++ b/gui/dialogs/CustomMessageBox.h @@ -0,0 +1,26 @@ +/* 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. + */ + +#pragma once + +#include <QMessageBox> + +namespace CustomMessageBox +{ +QMessageBox *selectable(QWidget *parent, const QString &title, const QString &text, + QMessageBox::Icon icon = QMessageBox::NoIcon, + QMessageBox::StandardButtons buttons = QMessageBox::Ok, + QMessageBox::StandardButton defaultButton = QMessageBox::NoButton); +} diff --git a/gui/dialogs/EditNotesDialog.cpp b/gui/dialogs/EditNotesDialog.cpp new file mode 100644 index 00000000..cd52e694 --- /dev/null +++ b/gui/dialogs/EditNotesDialog.cpp @@ -0,0 +1,42 @@ +/* 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 "EditNotesDialog.h" +#include "ui_EditNotesDialog.h" +#include "gui/Platform.h" + +#include <QIcon> +#include <QApplication> + +EditNotesDialog::EditNotesDialog(QString notes, QString name, QWidget *parent) + : m_instance_notes(notes), m_instance_name(name), QDialog(parent), + ui(new Ui::EditNotesDialog) +{ + MultiMCPlatform::fixWM_CLASS(this); + ui->setupUi(this); + ui->noteEditor->setText(notes); + setWindowTitle(tr("Edit notes of %1").arg(m_instance_name)); + // connect(ui->closeButton, SIGNAL(clicked()), SLOT(close())); +} + +EditNotesDialog::~EditNotesDialog() +{ + delete ui; +} + +QString EditNotesDialog::getText() +{ + return ui->noteEditor->toPlainText(); +} diff --git a/gui/dialogs/EditNotesDialog.h b/gui/dialogs/EditNotesDialog.h new file mode 100644 index 00000000..b74558c4 --- /dev/null +++ b/gui/dialogs/EditNotesDialog.h @@ -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. + */ + +#pragma once + +#include <QDialog> + +namespace Ui +{ +class EditNotesDialog; +} + +class EditNotesDialog : public QDialog +{ + Q_OBJECT + +public: + explicit EditNotesDialog(QString notes, QString name, QWidget *parent = 0); + ~EditNotesDialog(); + QString getText(); + +private: + Ui::EditNotesDialog *ui; + QString m_instance_name; + QString m_instance_notes; +}; diff --git a/gui/EditNotesDialog.ui b/gui/dialogs/EditNotesDialog.ui index 487dfb84..487dfb84 100644 --- a/gui/EditNotesDialog.ui +++ b/gui/dialogs/EditNotesDialog.ui diff --git a/gui/dialogs/IconPickerDialog.cpp b/gui/dialogs/IconPickerDialog.cpp new file mode 100644 index 00000000..99d6dc9a --- /dev/null +++ b/gui/dialogs/IconPickerDialog.cpp @@ -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 <QKeyEvent> +#include <QPushButton> +#include <QFileDialog> + +#include "MultiMC.h" + +#include "IconPickerDialog.h" +#include "ui_IconPickerDialog.h" + +#include "gui/Platform.h" +#include "gui/widgets/InstanceDelegate.h" + +#include "logic/lists/IconList.h" + +IconPickerDialog::IconPickerDialog(QWidget *parent) + : QDialog(parent), ui(new Ui::IconPickerDialog) +{ + MultiMCPlatform::fixWM_CLASS(this); + ui->setupUi(this); + setWindowModality(Qt::WindowModal); + + auto contentsWidget = ui->iconView; + contentsWidget->setViewMode(QListView::IconMode); + contentsWidget->setFlow(QListView::LeftToRight); + contentsWidget->setIconSize(QSize(48, 48)); + contentsWidget->setMovement(QListView::Static); + contentsWidget->setResizeMode(QListView::Adjust); + contentsWidget->setSelectionMode(QAbstractItemView::SingleSelection); + contentsWidget->setSpacing(5); + contentsWidget->setWordWrap(false); + contentsWidget->setWrapping(true); + contentsWidget->setUniformItemSizes(true); + contentsWidget->setTextElideMode(Qt::ElideRight); + contentsWidget->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel); + contentsWidget->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); + contentsWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); + contentsWidget->setItemDelegate(new ListViewDelegate()); + + // contentsWidget->setAcceptDrops(true); + contentsWidget->setDropIndicatorShown(true); + contentsWidget->viewport()->setAcceptDrops(true); + contentsWidget->setDragDropMode(QAbstractItemView::DropOnly); + contentsWidget->setDefaultDropAction(Qt::CopyAction); + + contentsWidget->installEventFilter(this); + + contentsWidget->setModel(MMC->icons().get()); + + auto buttonAdd = ui->buttonBox->addButton(tr("Add Icon"), QDialogButtonBox::ResetRole); + auto buttonRemove = + ui->buttonBox->addButton(tr("Remove Icon"), QDialogButtonBox::ResetRole); + + connect(buttonAdd, SIGNAL(clicked(bool)), SLOT(addNewIcon())); + connect(buttonRemove, SIGNAL(clicked(bool)), SLOT(removeSelectedIcon())); + + connect(contentsWidget, SIGNAL(doubleClicked(QModelIndex)), SLOT(activated(QModelIndex))); + + connect(contentsWidget->selectionModel(), + SIGNAL(selectionChanged(QItemSelection, QItemSelection)), + SLOT(selectionChanged(QItemSelection, QItemSelection))); +} +bool IconPickerDialog::eventFilter(QObject *obj, QEvent *evt) +{ + if (obj != ui->iconView) + return QDialog::eventFilter(obj, evt); + if (evt->type() != QEvent::KeyPress) + { + return QDialog::eventFilter(obj, evt); + } + QKeyEvent *keyEvent = static_cast<QKeyEvent *>(evt); + switch (keyEvent->key()) + { + case Qt::Key_Delete: + removeSelectedIcon(); + return true; + case Qt::Key_Plus: + addNewIcon(); + return true; + default: + break; + } + return QDialog::eventFilter(obj, evt); +} + +void IconPickerDialog::addNewIcon() +{ + //: The title of the select icons open file dialog + QString selectIcons = tr("Select Icons"); + //: The type of icon files + QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(), + tr("Icons") + "(*.png *.jpg *.jpeg)"); + MMC->icons()->installIcons(fileNames); +} + +void IconPickerDialog::removeSelectedIcon() +{ + MMC->icons()->deleteIcon(selectedIconKey); +} + +void IconPickerDialog::activated(QModelIndex index) +{ + selectedIconKey = index.data(Qt::UserRole).toString(); + accept(); +} + +void IconPickerDialog::selectionChanged(QItemSelection selected, QItemSelection deselected) +{ + if (selected.empty()) + return; + + QString key = selected.first().indexes().first().data(Qt::UserRole).toString(); + if (!key.isEmpty()) + selectedIconKey = key; +} + +int IconPickerDialog::exec(QString selection) +{ + auto list = MMC->icons(); + auto contentsWidget = ui->iconView; + selectedIconKey = selection; + + int index_nr = list->getIconIndex(selection); + auto model_index = list->index(index_nr); + contentsWidget->selectionModel()->select( + model_index, QItemSelectionModel::Current | QItemSelectionModel::Select); + + QMetaObject::invokeMethod(this, "delayed_scroll", Qt::QueuedConnection, + Q_ARG(QModelIndex, model_index)); + return QDialog::exec(); +} + +void IconPickerDialog::delayed_scroll(QModelIndex model_index) +{ + auto contentsWidget = ui->iconView; + contentsWidget->scrollTo(model_index); +} + +IconPickerDialog::~IconPickerDialog() +{ + delete ui; +} diff --git a/gui/dialogs/IconPickerDialog.h b/gui/dialogs/IconPickerDialog.h new file mode 100644 index 00000000..f00c2388 --- /dev/null +++ b/gui/dialogs/IconPickerDialog.h @@ -0,0 +1,48 @@ +/* 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. + */ + +#pragma once +#include <QDialog> +#include <QItemSelection> + +namespace Ui +{ +class IconPickerDialog; +} + +class IconPickerDialog : public QDialog +{ + Q_OBJECT + +public: + explicit IconPickerDialog(QWidget *parent = 0); + ~IconPickerDialog(); + int exec(QString selection); + QString selectedIconKey; + +protected: + virtual bool eventFilter(QObject *, QEvent *); + +private: + Ui::IconPickerDialog *ui; + +private +slots: + void selectionChanged(QItemSelection, QItemSelection); + void activated(QModelIndex); + void delayed_scroll(QModelIndex); + void addNewIcon(); + void removeSelectedIcon(); +}; diff --git a/gui/IconPickerDialog.ui b/gui/dialogs/IconPickerDialog.ui index c548edfb..c548edfb 100644 --- a/gui/IconPickerDialog.ui +++ b/gui/dialogs/IconPickerDialog.ui diff --git a/gui/instancesettings.cpp b/gui/dialogs/InstanceSettings.cpp index 73eb6627..57dd6a81 100644 --- a/gui/instancesettings.cpp +++ b/gui/dialogs/InstanceSettings.cpp @@ -17,16 +17,14 @@ * limitations under the License. */ -#include "instancesettings.h" -#include "ui_instancesettings.h" -#include "gui/platform.h" - -InstanceSettings::InstanceSettings( SettingsObject * obj, QWidget *parent) : - m_obj(obj), - QDialog(parent), - ui(new Ui::InstanceSettings) +#include "InstanceSettings.h" +#include "ui_InstanceSettings.h" +#include "gui/Platform.h" + +InstanceSettings::InstanceSettings(SettingsObject *obj, QWidget *parent) + : m_obj(obj), QDialog(parent), ui(new Ui::InstanceSettings) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); loadSettings(); } @@ -36,7 +34,7 @@ InstanceSettings::~InstanceSettings() delete ui; } -void InstanceSettings::showEvent ( QShowEvent* ev ) +void InstanceSettings::showEvent(QShowEvent *ev) { QDialog::showEvent(ev); adjustSize(); @@ -58,13 +56,12 @@ void InstanceSettings::on_buttonBox_rejected() reject(); } - void InstanceSettings::applySettings() { // Console bool console = ui->consoleSettingsBox->isChecked(); m_obj->set("OverrideConsole", console); - if(console) + if (console) { m_obj->set("ShowConsole", ui->showConsoleCheck->isChecked()); m_obj->set("AutoCloseConsole", ui->autoCloseConsoleCheck->isChecked()); @@ -78,7 +75,7 @@ void InstanceSettings::applySettings() // Window Size bool window = ui->windowSizeGroupBox->isChecked(); m_obj->set("OverrideWindow", window); - if(window) + if (window) { m_obj->set("LaunchMaximized", ui->maximizedCheckBox->isChecked()); m_obj->set("MinecraftWinWidth", ui->windowWidthSpinBox->value()); @@ -90,12 +87,11 @@ void InstanceSettings::applySettings() m_obj->reset("MinecraftWinWidth"); m_obj->reset("MinecraftWinHeight"); } - // Auto Login bool login = ui->accountSettingsGroupBox->isChecked(); m_obj->set("OverrideLogin", login); - if(login) + if (login) { m_obj->set("AutoLogin", ui->autoLoginChecBox->isChecked()); } @@ -103,12 +99,11 @@ void InstanceSettings::applySettings() { m_obj->reset("AutoLogin"); } - // Memory bool memory = ui->memoryGroupBox->isChecked(); m_obj->set("OverrideMemory", memory); - if(memory) + if (memory) { m_obj->set("MinMemAlloc", ui->minMemSpinBox->value()); m_obj->set("MaxMemAlloc", ui->maxMemSpinBox->value()); @@ -120,12 +115,11 @@ void InstanceSettings::applySettings() m_obj->reset("MaxMemAlloc"); m_obj->reset("PermGen"); } - // Java Settings - bool java = ui->javaSettingsGroupBox->isChecked(); + bool java = ui->javaSettingsGroupBox->isChecked(); m_obj->set("OverrideJava", java); - if(java) + if (java) { m_obj->set("JavaPath", ui->javaPathTextBox->text()); m_obj->set("JvmArgs", ui->jvmArgsTextBox->text()); @@ -135,12 +129,11 @@ void InstanceSettings::applySettings() m_obj->reset("JavaPath"); m_obj->reset("JvmArgs"); } - // Custom Commands bool custcmd = ui->customCommandsGroupBox->isChecked(); m_obj->set("OverrideCommands", custcmd); - if(custcmd) + if (custcmd) { m_obj->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text()); m_obj->set("PostExitCommand", ui->postExitCmdTextBox->text()); @@ -150,7 +143,6 @@ void InstanceSettings::applySettings() m_obj->reset("PreLaunchCommand"); m_obj->reset("PostExitCommand"); } - } void InstanceSettings::loadSettings() @@ -165,7 +157,6 @@ void InstanceSettings::loadSettings() ui->maximizedCheckBox->setChecked(m_obj->get("LaunchMaximized").toBool()); ui->windowWidthSpinBox->setValue(m_obj->get("MinecraftWinWidth").toInt()); ui->windowHeightSpinBox->setValue(m_obj->get("MinecraftWinHeight").toInt()); - // Auto Login ui->accountSettingsGroupBox->setChecked(m_obj->get("OverrideLogin").toBool()); diff --git a/gui/dialogs/InstanceSettings.h b/gui/dialogs/InstanceSettings.h new file mode 100644 index 00000000..452e7a58 --- /dev/null +++ b/gui/dialogs/InstanceSettings.h @@ -0,0 +1,50 @@ +/* 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. + */ + +#pragma once + +#include <QDialog> +#include "settingsobject.h" + +namespace Ui +{ +class InstanceSettings; +} + +class InstanceSettings : public QDialog +{ + Q_OBJECT + +public: + explicit InstanceSettings(SettingsObject *s, QWidget *parent = 0); + ~InstanceSettings(); + + void updateCheckboxStuff(); + + void applySettings(); + void loadSettings(); + +protected: + virtual void showEvent(QShowEvent *); +private +slots: + void on_customCommandsGroupBox_toggled(bool arg1); + void on_buttonBox_accepted(); + void on_buttonBox_rejected(); + +private: + Ui::InstanceSettings *ui; + SettingsObject *m_obj; +}; diff --git a/gui/instancesettings.ui b/gui/dialogs/InstanceSettings.ui index b536e9ff..b536e9ff 100644 --- a/gui/instancesettings.ui +++ b/gui/dialogs/InstanceSettings.ui diff --git a/gui/LegacyModEditDialog.cpp b/gui/dialogs/LegacyModEditDialog.cpp index a7021bf9..25a1c616 100644 --- a/gui/LegacyModEditDialog.cpp +++ b/gui/dialogs/LegacyModEditDialog.cpp @@ -16,12 +16,12 @@ #include "MultiMC.h" #include "LegacyModEditDialog.h" #include "ModEditDialogCommon.h" -#include "versionselectdialog.h" +#include "VersionSelectDialog.h" #include "ProgressDialog.h" #include "ui_LegacyModEditDialog.h" #include "logic/ModList.h" #include "logic/lists/ForgeVersionList.h" -#include "gui/platform.h" +#include "gui/Platform.h" #include <pathutils.h> #include <QFileDialog> @@ -33,7 +33,7 @@ LegacyModEditDialog::LegacyModEditDialog(LegacyInstance *inst, QWidget *parent) : m_inst(inst), QDialog(parent), ui(new Ui::LegacyModEditDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); // Jar mods @@ -358,7 +358,7 @@ void LegacyModEditDialog::on_buttonBox_rejected() void LegacyModEditDialog::jarCurrent(QModelIndex current, QModelIndex previous) { - if(!current.isValid()) + if (!current.isValid()) { ui->jarMIFrame->clear(); return; @@ -370,7 +370,7 @@ void LegacyModEditDialog::jarCurrent(QModelIndex current, QModelIndex previous) void LegacyModEditDialog::coreCurrent(QModelIndex current, QModelIndex previous) { - if(!current.isValid()) + if (!current.isValid()) { ui->coreMIFrame->clear(); return; @@ -382,7 +382,7 @@ void LegacyModEditDialog::coreCurrent(QModelIndex current, QModelIndex previous) void LegacyModEditDialog::loaderCurrent(QModelIndex current, QModelIndex previous) { - if(!current.isValid()) + if (!current.isValid()) { ui->loaderMIFrame->clear(); return; diff --git a/gui/LegacyModEditDialog.h b/gui/dialogs/LegacyModEditDialog.h index d5582aef..d5582aef 100644 --- a/gui/LegacyModEditDialog.h +++ b/gui/dialogs/LegacyModEditDialog.h diff --git a/gui/LegacyModEditDialog.ui b/gui/dialogs/LegacyModEditDialog.ui index bb0d9ef2..47db0079 100644 --- a/gui/LegacyModEditDialog.ui +++ b/gui/dialogs/LegacyModEditDialog.ui @@ -307,12 +307,12 @@ <customwidget> <class>ModListView</class> <extends>QTreeView</extends> - <header>gui/ModListView.h</header> + <header>gui/widgets/ModListView.h</header> </customwidget> <customwidget> <class>MCModInfoFrame</class> <extends>QFrame</extends> - <header>gui/MCModInfoFrame.h</header> + <header>gui/widgets/MCModInfoFrame.h</header> <container>1</container> </customwidget> </customwidgets> diff --git a/gui/logindialog.cpp b/gui/dialogs/LoginDialog.cpp index aeaaaa9e..19c6437d 100644 --- a/gui/logindialog.cpp +++ b/gui/dialogs/LoginDialog.cpp @@ -3,7 +3,7 @@ * 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 @@ -13,10 +13,10 @@ * limitations under the License. */ -#include "logindialog.h" -#include "ui_logindialog.h" +#include "LoginDialog.h" +#include "ui_LoginDialog.h" #include "keyring.h" -#include "gui/platform.h" +#include "gui/Platform.h" #include "MultiMC.h" #include <QFile> @@ -24,58 +24,58 @@ #include <QJsonArray> #include <QJsonParseError> #include "logic/net/HttpMetaCache.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" -LoginDialog::LoginDialog(QWidget *parent, const QString& loginErrMsg) : - QDialog(parent), - ui(new Ui::LoginDialog) +LoginDialog::LoginDialog(QWidget *parent, const QString &loginErrMsg) + : QDialog(parent), ui(new Ui::LoginDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); - + //: Use offline mode one time offlineButton = new QPushButton(tr("Offline Once")); - + ui->loginButtonBox->addButton(offlineButton, QDialogButtonBox::ActionRole); - + blockToggles = false; isOnline_ = true; onlineForced = false; - + //: The username during login (placeholder) ui->usernameTextBox->lineEdit()->setPlaceholderText(tr("Name")); - - connect(ui->usernameTextBox, SIGNAL(currentTextChanged(QString)), this, SLOT(userTextChanged(QString))); + + connect(ui->usernameTextBox, SIGNAL(currentTextChanged(QString)), this, + SLOT(userTextChanged(QString))); connect(ui->forgetButton, SIGNAL(clicked(bool)), this, SLOT(forgetCurrentUser())); connect(offlineButton, SIGNAL(clicked(bool)), this, SLOT(launchOffline())); - + if (loginErrMsg.isEmpty()) ui->loginErrorLabel->setVisible(false); else { ui->loginErrorLabel->setVisible(true); - ui->loginErrorLabel->setText(QString("<span style=\" color:#ff0000;\">%1</span>"). - arg(loginErrMsg)); + ui->loginErrorLabel->setText( + QString("<span style=\" color:#ff0000;\">%1</span>").arg(loginErrMsg)); } - + ui->lblFace->setVisible(false); resize(minimumSizeHint()); layout()->setSizeConstraint(QLayout::SetFixedSize); - Keyring * k = Keyring::instance(); + Keyring *k = Keyring::instance(); QStringList accounts = k->getStoredAccounts("minecraft"); ui->usernameTextBox->addItems(accounts); - + // TODO: restore last selected account here, if applicable - + int index = ui->usernameTextBox->currentIndex(); - if(index != -1) + if (index != -1) { ui->passwordTextBox->setFocus(Qt::OtherFocusReason); } - - connect(ui->rememberUsernameCheckbox,SIGNAL(toggled(bool)), SLOT(usernameToggled(bool))); - connect(ui->rememberPasswordCheckbox,SIGNAL(toggled(bool)), SLOT(passwordToggled(bool))); + + connect(ui->rememberUsernameCheckbox, SIGNAL(toggled(bool)), SLOT(usernameToggled(bool))); + connect(ui->rememberPasswordCheckbox, SIGNAL(toggled(bool)), SLOT(passwordToggled(bool))); } LoginDialog::~LoginDialog() @@ -96,14 +96,14 @@ QString LoginDialog::getPassword() const void LoginDialog::forgetCurrentUser() { - Keyring * k = Keyring::instance(); + Keyring *k = Keyring::instance(); QString acct = ui->usernameTextBox->currentText(); k->removeStoredAccount("minecraft", acct); ui->passwordTextBox->clear(); int index = ui->usernameTextBox->findText(acct); - if(index != -1) + if (index != -1) ui->usernameTextBox->removeItem(index); - if(!ui->usernameTextBox->count()) + if (!ui->usernameTextBox->count()) { blockToggles = true; ui->rememberUsernameCheckbox->setChecked(false); @@ -112,19 +112,19 @@ void LoginDialog::forgetCurrentUser() } } -void LoginDialog::passwordToggled ( bool state ) +void LoginDialog::passwordToggled(bool state) { // if toggled off - if(blockToggles) + if (blockToggles) return; blockToggles = true; - if(!state) + if (!state) { QLOG_DEBUG() << "password disabled"; } else { - if(!ui->rememberUsernameCheckbox->isChecked()) + if (!ui->rememberUsernameCheckbox->isChecked()) { ui->rememberUsernameCheckbox->setChecked(true); } @@ -133,15 +133,15 @@ void LoginDialog::passwordToggled ( bool state ) blockToggles = false; } -void LoginDialog::usernameToggled ( bool state ) +void LoginDialog::usernameToggled(bool state) { // if toggled off - if(blockToggles) + if (blockToggles) return; blockToggles = true; - if(!state) + if (!state) { - if(ui->rememberPasswordCheckbox->isChecked()) + if (ui->rememberPasswordCheckbox->isChecked()) { ui->rememberPasswordCheckbox->setChecked(false); } @@ -154,26 +154,26 @@ void LoginDialog::usernameToggled ( bool state ) blockToggles = false; } - -void LoginDialog::userTextChanged ( const QString& user ) +void LoginDialog::userTextChanged(const QString &user) { blockToggles = true; - Keyring * k = Keyring::instance(); + Keyring *k = Keyring::instance(); QStringList sl = k->getStoredAccounts("minecraft"); bool gotFace = false; - if(sl.contains(user)) + if (sl.contains(user)) { ui->rememberUsernameCheckbox->setChecked(true); - QString passwd = k->getPassword("minecraft",user); + QString passwd = k->getPassword("minecraft", user); ui->rememberPasswordCheckbox->setChecked(!passwd.isEmpty()); ui->passwordTextBox->setText(passwd); QByteArray data; { - auto filename = MMC->metacache()->resolveEntry("skins", "skins.json")->getFullPath(); + auto filename = + MMC->metacache()->resolveEntry("skins", "skins.json")->getFullPath(); QFile listFile(filename); - if(!listFile.open(QIODevice::ReadOnly)) + if (!listFile.open(QIODevice::ReadOnly)) return; data = listFile.readAll(); } @@ -183,20 +183,25 @@ void LoginDialog::userTextChanged ( const QString& user ) QJsonObject root = jsonDoc.object(); QJsonObject mappings = root.value("mappings").toObject(); - if(!mappings[user].isUndefined()) + if (!mappings[user].isUndefined()) { QJsonArray usernames = mappings.value(user).toArray(); - if(!usernames.isEmpty()) + if (!usernames.isEmpty()) { QString mapped_username = usernames[0].toString(); - if(!mapped_username.isEmpty()) + if (!mapped_username.isEmpty()) { - QFile fskin(MMC->metacache()->resolveEntry("skins", mapped_username + ".png")->getFullPath()); - if(fskin.exists()) + QFile fskin(MMC->metacache() + ->resolveEntry("skins", mapped_username + ".png") + ->getFullPath()); + if (fskin.exists()) { - QPixmap skin(MMC->metacache()->resolveEntry("skins", mapped_username + ".png")->getFullPath()); - QPixmap face = skin.copy(8, 8, 8, 8).scaled(48, 48, Qt::KeepAspectRatio); + QPixmap skin(MMC->metacache() + ->resolveEntry("skins", mapped_username + ".png") + ->getFullPath()); + QPixmap face = + skin.copy(8, 8, 8, 8).scaled(48, 48, Qt::KeepAspectRatio); ui->lblFace->setPixmap(face); gotFace = true; @@ -210,21 +215,20 @@ void LoginDialog::userTextChanged ( const QString& user ) blockToggles = false; } - void LoginDialog::accept() { bool saveName = ui->rememberUsernameCheckbox->isChecked(); bool savePass = ui->rememberPasswordCheckbox->isChecked(); - Keyring * k = Keyring::instance(); - if(saveName) + Keyring *k = Keyring::instance(); + if (saveName) { - if(savePass) + if (savePass) { - k->storePassword("minecraft",getUsername(),getPassword()); + k->storePassword("minecraft", getUsername(), getPassword()); } else { - k->storePassword("minecraft",getUsername(),QString()); + k->storePassword("minecraft", getUsername(), QString()); } } else @@ -235,7 +239,7 @@ void LoginDialog::accept() QDialog::accept(); } -void LoginDialog::launchOffline() +void LoginDialog::launchOffline() { isOnline_ = false; QDialog::accept(); diff --git a/gui/logindialog.h b/gui/dialogs/LoginDialog.h index f7c0e930..73a92aab 100644 --- a/gui/logindialog.h +++ b/gui/dialogs/LoginDialog.h @@ -3,7 +3,7 @@ * 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 @@ -13,39 +13,45 @@ * limitations under the License. */ -#ifndef LOGINDIALOG_H -#define LOGINDIALOG_H +#pragma once #include <QDialog> #include <QPushButton> -namespace Ui { +namespace Ui +{ class LoginDialog; } class LoginDialog : public QDialog { Q_OBJECT - + public: - explicit LoginDialog(QWidget *parent = 0, const QString& loginErrMsg = ""); + explicit LoginDialog(QWidget *parent = 0, const QString &loginErrMsg = ""); ~LoginDialog(); - + QString getUsername() const; QString getPassword() const; - - inline bool isOnline() { return isOnline_; } - + + inline bool isOnline() + { + return isOnline_; + } + void forceOnline(); -public slots: +public +slots: virtual void accept(); - virtual void userTextChanged(const QString& user); + virtual void userTextChanged(const QString &user); virtual void forgetCurrentUser(); -private slots: - void usernameToggled ( bool ); - void passwordToggled ( bool ); +private +slots: + void usernameToggled(bool); + void passwordToggled(bool); void launchOffline(); + private: Ui::LoginDialog *ui; bool blockToggles; @@ -53,5 +59,3 @@ private: bool isOnline_; bool onlineForced; }; - -#endif // LOGINDIALOG_H diff --git a/gui/logindialog.ui b/gui/dialogs/LoginDialog.ui index 94900d72..d15679dd 100644 --- a/gui/logindialog.ui +++ b/gui/dialogs/LoginDialog.ui @@ -6,7 +6,7 @@ <rect> <x>0</x> <y>0</y> - <width>476</width> + <width>496</width> <height>168</height> </rect> </property> @@ -50,7 +50,7 @@ <string/> </property> <property name="pixmap"> - <pixmap resource="../multimc.qrc">:/icons/instances/steve</pixmap> + <pixmap resource="../../multimc.qrc">:/icons/instances/steve</pixmap> </property> <property name="scaledContents"> <bool>true</bool> @@ -146,6 +146,7 @@ </layout> </widget> <resources> + <include location="../../multimc.qrc"/> <include location="../multimc.qrc"/> </resources> <connections> diff --git a/gui/lwjglselectdialog.cpp b/gui/dialogs/LwjglSelectDialog.cpp index 09963ce0..046a4e2e 100644 --- a/gui/lwjglselectdialog.cpp +++ b/gui/dialogs/LwjglSelectDialog.cpp @@ -3,7 +3,7 @@ * 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 @@ -14,23 +14,23 @@ */ #include "MultiMC.h" -#include "lwjglselectdialog.h" -#include "ui_lwjglselectdialog.h" -#include "gui/platform.h" +#include "LwjglSelectDialog.h" +#include "ui_LwjglSelectDialog.h" +#include "gui/Platform.h" #include "logic/lists/LwjglVersionList.h" -LWJGLSelectDialog::LWJGLSelectDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::LWJGLSelectDialog) +LWJGLSelectDialog::LWJGLSelectDialog(QWidget *parent) + : QDialog(parent), ui(new Ui::LWJGLSelectDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); ui->labelStatus->setVisible(false); auto lwjgllist = MMC->lwjgllist(); ui->lwjglListView->setModel(lwjgllist.get()); - - connect(lwjgllist.get(), SIGNAL(loadingStateUpdated(bool)), SLOT(loadingStateUpdated(bool))); + + connect(lwjgllist.get(), SIGNAL(loadingStateUpdated(bool)), + SLOT(loadingStateUpdated(bool))); connect(lwjgllist.get(), SIGNAL(loadListFailed(QString)), SLOT(loadingFailed(QString))); loadingStateUpdated(lwjgllist->isLoading()); } @@ -42,9 +42,9 @@ LWJGLSelectDialog::~LWJGLSelectDialog() QString LWJGLSelectDialog::selectedVersion() const { - return MMC->lwjgllist()->data( - ui->lwjglListView->selectionModel()->currentIndex(), - Qt::DisplayRole).toString(); + return MMC->lwjgllist() + ->data(ui->lwjglListView->selectionModel()->currentIndex(), Qt::DisplayRole) + .toString(); } void LWJGLSelectDialog::on_refreshButton_clicked() diff --git a/gui/lwjglselectdialog.h b/gui/dialogs/LwjglSelectDialog.h index 1772904a..2724cbe8 100644 --- a/gui/lwjglselectdialog.h +++ b/gui/dialogs/LwjglSelectDialog.h @@ -3,7 +3,7 @@ * 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 @@ -13,8 +13,7 @@ * limitations under the License. */ -#ifndef LWJGLSELECTDIALOG_H -#define LWJGLSELECTDIALOG_H +#pragma once #include <QDialog> @@ -26,21 +25,20 @@ class LWJGLSelectDialog; class LWJGLSelectDialog : public QDialog { Q_OBJECT - + public: explicit LWJGLSelectDialog(QWidget *parent = 0); ~LWJGLSelectDialog(); - + QString selectedVersion() const; - -private slots: + +private +slots: void on_refreshButton_clicked(); - + void loadingStateUpdated(bool loading); void loadingFailed(QString error); - + private: Ui::LWJGLSelectDialog *ui; }; - -#endif // LWJGLSELECTDIALOG_H diff --git a/gui/lwjglselectdialog.ui b/gui/dialogs/LwjglSelectDialog.ui index c715cc07..c715cc07 100644 --- a/gui/lwjglselectdialog.ui +++ b/gui/dialogs/LwjglSelectDialog.ui diff --git a/gui/dialogs/ModEditDialogCommon.cpp b/gui/dialogs/ModEditDialogCommon.cpp new file mode 100644 index 00000000..9a15d92d --- /dev/null +++ b/gui/dialogs/ModEditDialogCommon.cpp @@ -0,0 +1,57 @@ +/* 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 "ModEditDialogCommon.h" +#include "CustomMessageBox.h" +#include <QDesktopServices> +#include <QMessageBox> +#include <QString> +#include <QUrl> +bool lastfirst(QModelIndexList &list, int &first, int &last) +{ + if (!list.size()) + return false; + first = last = list[0].row(); + for (auto item : list) + { + int row = item.row(); + if (row < first) + first = row; + if (row > last) + last = row; + } + return true; +} + +void showWebsiteForMod(QWidget *parentDlg, Mod &m) +{ + QString url = m.homeurl(); + if (url.size()) + { + // catch the cases where the protocol is missing + if (!url.startsWith("http")) + { + url = "http://" + url; + } + QDesktopServices::openUrl(url); + } + else + { + CustomMessageBox::selectable( + parentDlg, parentDlg->tr("How sad!"), + parentDlg->tr("The mod author didn't provide a website link for this mod."), + QMessageBox::Warning); + } +} diff --git a/depends/util/include/apputils.h b/gui/dialogs/ModEditDialogCommon.h index a64adc50..a226d5a9 100644 --- a/depends/util/include/apputils.h +++ b/gui/dialogs/ModEditDialogCommon.h @@ -3,7 +3,7 @@ * 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 @@ -13,9 +13,10 @@ * limitations under the License. */ -#ifndef APPUTILS_H -#define APPUTILS_H +#pragma once +#include <QAbstractItemModel> +#include <logic/Mod.h> -#define STR_VAL(val) # val +bool lastfirst(QModelIndexList &list, int &first, int &last); -#endif // APPUTILS_H +void showWebsiteForMod(QWidget *parentDlg, Mod &m);
\ No newline at end of file diff --git a/gui/newinstancedialog.cpp b/gui/dialogs/NewInstanceDialog.cpp index c37db2ac..5b2cd086 100644 --- a/gui/newinstancedialog.cpp +++ b/gui/dialogs/NewInstanceDialog.cpp @@ -13,9 +13,9 @@ * limitations under the License. */ -#include <MultiMC.h> -#include "newinstancedialog.h" -#include "ui_newinstancedialog.h" +#include "MultiMC.h" +#include "NewInstanceDialog.h" +#include "ui_NewInstanceDialog.h" #include "logic/InstanceFactory.h" #include "logic/BaseVersion.h" @@ -23,8 +23,8 @@ #include "logic/lists/MinecraftVersionList.h" #include "logic/tasks/Task.h" -#include "gui/platform.h" -#include "versionselectdialog.h" +#include "gui/Platform.h" +#include "VersionSelectDialog.h" #include "ProgressDialog.h" #include "IconPickerDialog.h" @@ -34,7 +34,7 @@ NewInstanceDialog::NewInstanceDialog(QWidget *parent) : QDialog(parent), ui(new Ui::NewInstanceDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); resize(minimumSizeHint()); layout()->setSizeConstraint(QLayout::SetFixedSize); diff --git a/gui/newinstancedialog.h b/gui/dialogs/NewInstanceDialog.h index 4357c28d..4357c28d 100644 --- a/gui/newinstancedialog.h +++ b/gui/dialogs/NewInstanceDialog.h diff --git a/gui/newinstancedialog.ui b/gui/dialogs/NewInstanceDialog.ui index 540176d5..b4b8723e 100644 --- a/gui/newinstancedialog.ui +++ b/gui/dialogs/NewInstanceDialog.ui @@ -17,7 +17,7 @@ <string>New Instance</string> </property> <property name="windowIcon"> - <iconset resource="../multimc.qrc"> + <iconset resource="../../multimc.qrc"> <normaloff>:/icons/toolbar/new</normaloff>:/icons/toolbar/new</iconset> </property> <property name="modal"> @@ -42,7 +42,7 @@ <item> <widget class="QToolButton" name="iconButton"> <property name="icon"> - <iconset resource="../multimc.qrc"> + <iconset resource="../../multimc.qrc"> <normaloff>:/icons/instances/infinity</normaloff>:/icons/instances/infinity</iconset> </property> <property name="iconSize"> @@ -140,7 +140,7 @@ </layout> </widget> <resources> - <include location="../multimc.qrc"/> + <include location="../../multimc.qrc"/> </resources> <connections> <connection> diff --git a/gui/OneSixModEditDialog.cpp b/gui/dialogs/OneSixModEditDialog.cpp index 42bcfeb0..dea1b86b 100644 --- a/gui/OneSixModEditDialog.cpp +++ b/gui/dialogs/OneSixModEditDialog.cpp @@ -12,19 +12,8 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #include "MultiMC.h" -#include "OneSixModEditDialog.h" -#include "ModEditDialogCommon.h" -#include "ui_OneSixModEditDialog.h" -#include "logic/ModList.h" -#include "logic/OneSixVersion.h" -#include "logic/EnabledItemFilter.h" -#include "logic/lists/ForgeVersionList.h" -#include "logic/ForgeInstaller.h" -#include "gui/versionselectdialog.h" -#include "gui/platform.h" -#include "gui/CustomMessageBox.h" -#include "ProgressDialog.h" #include <pathutils.h> #include <QFileDialog> @@ -34,10 +23,26 @@ #include <QKeyEvent> #include <QDesktopServices> +#include "OneSixModEditDialog.h" +#include "ModEditDialogCommon.h" +#include "ui_OneSixModEditDialog.h" + +#include "gui/Platform.h" +#include "gui/dialogs/CustomMessageBox.h" +#include "gui/dialogs/VersionSelectDialog.h" + +#include "gui/dialogs/ProgressDialog.h" + +#include "logic/ModList.h" +#include "logic/OneSixVersion.h" +#include "logic/EnabledItemFilter.h" +#include "logic/lists/ForgeVersionList.h" +#include "logic/ForgeInstaller.h" + OneSixModEditDialog::OneSixModEditDialog(OneSixInstance *inst, QWidget *parent) : m_inst(inst), QDialog(parent), ui(new Ui::OneSixModEditDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); // libraries! @@ -65,7 +70,7 @@ OneSixModEditDialog::OneSixModEditDialog(OneSixInstance *inst, QWidget *parent) m_mods->startWatching(); auto smodel = ui->loaderModTreeView->selectionModel(); connect(smodel, SIGNAL(currentChanged(QModelIndex, QModelIndex)), - SLOT(loaderCurrent(QModelIndex,QModelIndex))); + SLOT(loaderCurrent(QModelIndex, QModelIndex))); } // resource packs { @@ -111,10 +116,10 @@ void OneSixModEditDialog::on_customizeBtn_clicked() void OneSixModEditDialog::on_revertBtn_clicked() { - auto response = CustomMessageBox::selectable(this, tr("Revert?"), - tr("Do you want to revert the " - "version of this instance to its original configuration?"), - QMessageBox::Question, QMessageBox::Yes | QMessageBox::No)->exec(); + auto response = CustomMessageBox::selectable( + this, tr("Revert?"), tr("Do you want to revert the " + "version of this instance to its original configuration?"), + QMessageBox::Question, QMessageBox::Yes | QMessageBox::No)->exec(); if (response == QMessageBox::Yes) { if (m_inst->revertCustomVersion()) @@ -306,7 +311,7 @@ void OneSixModEditDialog::on_viewResPackBtn_clicked() void OneSixModEditDialog::loaderCurrent(QModelIndex current, QModelIndex previous) { - if(!current.isValid()) + if (!current.isValid()) { ui->frame->clear(); return; diff --git a/gui/OneSixModEditDialog.h b/gui/dialogs/OneSixModEditDialog.h index 5376e526..5376e526 100644 --- a/gui/OneSixModEditDialog.h +++ b/gui/dialogs/OneSixModEditDialog.h diff --git a/gui/OneSixModEditDialog.ui b/gui/dialogs/OneSixModEditDialog.ui index 6d70200a..8f301438 100644 --- a/gui/OneSixModEditDialog.ui +++ b/gui/dialogs/OneSixModEditDialog.ui @@ -305,12 +305,12 @@ <customwidget> <class>ModListView</class> <extends>QTreeView</extends> - <header>gui/ModListView.h</header> + <header>gui/widgets/ModListView.h</header> </customwidget> <customwidget> <class>MCModInfoFrame</class> <extends>QFrame</extends> - <header>gui/MCModInfoFrame.h</header> + <header>gui/widgets/MCModInfoFrame.h</header> <container>1</container> </customwidget> </customwidgets> diff --git a/gui/ProgressDialog.cpp b/gui/dialogs/ProgressDialog.cpp index 2e5251a0..ca433dab 100644 --- a/gui/ProgressDialog.cpp +++ b/gui/dialogs/ProgressDialog.cpp @@ -3,7 +3,7 @@ * 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 @@ -19,17 +19,15 @@ #include <QKeyEvent> #include "logic/tasks/Task.h" -#include "gui/platform.h" +#include "gui/Platform.h" -ProgressDialog::ProgressDialog(QWidget *parent) : - QDialog(parent), - ui(new Ui::ProgressDialog) +ProgressDialog::ProgressDialog(QWidget *parent) : QDialog(parent), ui(new Ui::ProgressDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); updateSize(); - - changeProgress(0,100); + + changeProgress(0, 100); } ProgressDialog::~ProgressDialog() @@ -45,27 +43,26 @@ void ProgressDialog::updateSize() int ProgressDialog::exec(ProgressProvider *task) { this->task = task; - + // Connect signals. connect(task, SIGNAL(started()), SLOT(onTaskStarted())); connect(task, SIGNAL(failed(QString)), SLOT(onTaskFailed(QString))); connect(task, SIGNAL(succeeded()), SLOT(onTaskSucceeded())); - connect(task, SIGNAL(status(QString)), SLOT(changeStatus(const QString&))); - connect(task, SIGNAL(progress(qint64,qint64)), SLOT(changeProgress(qint64,qint64))); - + connect(task, SIGNAL(status(QString)), SLOT(changeStatus(const QString &))); + connect(task, SIGNAL(progress(qint64, qint64)), SLOT(changeProgress(qint64, qint64))); + // this makes sure that the task is started after the dialog is created QMetaObject::invokeMethod(task, "start", Qt::QueuedConnection); return QDialog::exec(); } -ProgressProvider* ProgressDialog::getTask() +ProgressProvider *ProgressDialog::getTask() { return task; } void ProgressDialog::onTaskStarted() { - } void ProgressDialog::onTaskFailed(QString failure) @@ -90,14 +87,14 @@ void ProgressDialog::changeProgress(qint64 current, qint64 total) ui->taskProgressBar->setValue(current); } -void ProgressDialog::keyPressEvent(QKeyEvent* e) +void ProgressDialog::keyPressEvent(QKeyEvent *e) { if (e->key() == Qt::Key_Escape) return; QDialog::keyPressEvent(e); } -void ProgressDialog::closeEvent(QCloseEvent* e) +void ProgressDialog::closeEvent(QCloseEvent *e) { if (task && task->isRunning()) { diff --git a/gui/ProgressDialog.h b/gui/dialogs/ProgressDialog.h index ac6bb412..0029d3ec 100644 --- a/gui/ProgressDialog.h +++ b/gui/dialogs/ProgressDialog.h @@ -3,7 +3,7 @@ * 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 @@ -13,50 +13,48 @@ * limitations under the License. */ -#ifndef TASKDIALOG_H -#define TASKDIALOG_H +#pragma once #include <QDialog> class ProgressProvider; -namespace Ui { +namespace Ui +{ class ProgressDialog; } class ProgressDialog : public QDialog { Q_OBJECT - + public: explicit ProgressDialog(QWidget *parent = 0); ~ProgressDialog(); - + void updateSize(); - - int exec(ProgressProvider* task); - - ProgressProvider* getTask(); - -public slots: + + int exec(ProgressProvider *task); + + ProgressProvider *getTask(); + +public +slots: void onTaskStarted(); void onTaskFailed(QString failure); void onTaskSucceeded(); - - void changeStatus(const QString& status); + + void changeStatus(const QString &status); void changeProgress(qint64 current, qint64 total); - + signals: - - + protected: - virtual void keyPressEvent(QKeyEvent* e); - virtual void closeEvent(QCloseEvent* e); - + virtual void keyPressEvent(QKeyEvent *e); + virtual void closeEvent(QCloseEvent *e); + private: Ui::ProgressDialog *ui; - - ProgressProvider* task; -}; -#endif // TASKDIALOG_H + ProgressProvider *task; +}; diff --git a/gui/ProgressDialog.ui b/gui/dialogs/ProgressDialog.ui index a56d2a92..a56d2a92 100644 --- a/gui/ProgressDialog.ui +++ b/gui/dialogs/ProgressDialog.ui diff --git a/gui/settingsdialog.cpp b/gui/dialogs/SettingsDialog.cpp index bf331fc0..e4f22d83 100644 --- a/gui/settingsdialog.cpp +++ b/gui/dialogs/SettingsDialog.cpp @@ -13,14 +13,17 @@ * limitations under the License. */ -#include <MultiMC.h> -#include "settingsdialog.h" -#include "ui_settingsdialog.h" +#include "MultiMC.h" + +#include "gui/dialogs/SettingsDialog.h" +#include "ui_SettingsDialog.h" + +#include "gui/Platform.h" +#include "gui/dialogs/VersionSelectDialog.h" +#include "gui/dialogs/CustomMessageBox.h" + #include "logic/JavaUtils.h" #include "logic/NagUtils.h" -#include "gui/versionselectdialog.h" -#include "gui/platform.h" -#include "gui/CustomMessageBox.h" #include "logic/lists/JavaVersionList.h" #include <settingsobject.h> @@ -123,10 +126,11 @@ void SettingsDialog::applySettings(SettingsObject *s) } else if (!s->get("UseDevBuilds").toBool()) { - auto response = CustomMessageBox::selectable(this, tr("Development builds"), - tr("Development builds contain experimental features " - "and may be unstable. Are you sure you want to enable them?"), - QMessageBox::Question, QMessageBox::Yes | QMessageBox::No)->exec(); + auto response = CustomMessageBox::selectable( + this, tr("Development builds"), + tr("Development builds contain experimental features " + "and may be unstable. Are you sure you want to enable them?"), + QMessageBox::Question, QMessageBox::Yes | QMessageBox::No)->exec(); if (response == QMessageBox::Yes) { s->set("UseDevBuilds", true); @@ -168,16 +172,16 @@ void SettingsDialog::applySettings(SettingsObject *s) s->set("PreLaunchCommand", ui->preLaunchCmdTextBox->text()); s->set("PostExitCommand", ui->postExitCmdTextBox->text()); - auto sortMode = (InstSortMode) ui->sortingModeGroup->checkedId(); - switch(sortMode) + auto sortMode = (InstSortMode)ui->sortingModeGroup->checkedId(); + switch (sortMode) { - case Sort_LastLaunch: - s->set("InstSortMode", "LastLaunch"); - break; - case Sort_Name: - default: - s->set("InstSortMode", "Name"); - break; + case Sort_LastLaunch: + s->set("InstSortMode", "LastLaunch"); + break; + case Sort_Name: + default: + s->set("InstSortMode", "Name"); + break; } s->set("PostExitCommand", ui->postExitCmdTextBox->text()); @@ -213,7 +217,7 @@ void SettingsDialog::loadSettings(SettingsObject *s) QString sortMode = s->get("InstSortMode").toString(); - if(sortMode == "LastLaunch") + if (sortMode == "LastLaunch") { ui->sortLastLaunchedBtn->setChecked(true); } diff --git a/gui/settingsdialog.h b/gui/dialogs/SettingsDialog.h index a8dfb1c6..e24047c3 100644 --- a/gui/settingsdialog.h +++ b/gui/dialogs/SettingsDialog.h @@ -3,7 +3,7 @@ * 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 @@ -13,46 +13,47 @@ * limitations under the License. */ -#ifndef SETTINGSDIALOG_H -#define SETTINGSDIALOG_H +#pragma once #include <QDialog> class SettingsObject; -namespace Ui { +namespace Ui +{ class SettingsDialog; } class SettingsDialog : public QDialog { Q_OBJECT - + public: explicit SettingsDialog(QWidget *parent = 0); ~SettingsDialog(); - + void updateCheckboxStuff(); - + void applySettings(SettingsObject *s); - void loadSettings(SettingsObject* s); + void loadSettings(SettingsObject *s); protected: - virtual void showEvent ( QShowEvent* ); - -private slots: + virtual void showEvent(QShowEvent *); + +private +slots: void on_instDirBrowseBtn_clicked(); - + void on_modsDirBrowseBtn_clicked(); - + void on_lwjglDirBrowseBtn_clicked(); - + void on_compatModeCheckBox_clicked(bool checked); - + void on_maximizedCheckBox_clicked(bool checked); - + void on_buttonBox_accepted(); - + void on_pushButton_clicked(); void on_btnBrowse_clicked(); @@ -60,5 +61,3 @@ private slots: private: Ui::SettingsDialog *ui; }; - -#endif // SETTINGSDIALOG_H diff --git a/gui/settingsdialog.ui b/gui/dialogs/SettingsDialog.ui index bf173b1b..6da9420e 100644 --- a/gui/settingsdialog.ui +++ b/gui/dialogs/SettingsDialog.ui @@ -20,7 +20,7 @@ <string>Settings</string> </property> <property name="windowIcon"> - <iconset resource="../multimc.qrc"> + <iconset resource="../../multimc.qrc"> <normaloff>:/icons/toolbar/settings</normaloff>:/icons/toolbar/settings</iconset> </property> <property name="modal"> @@ -527,7 +527,7 @@ <tabstop>postExitCmdTextBox</tabstop> </tabstops> <resources> - <include location="../multimc.qrc"/> + <include location="../../multimc.qrc"/> </resources> <connections> <connection> diff --git a/gui/versionselectdialog.cpp b/gui/dialogs/VersionSelectDialog.cpp index 8fa62f75..d6efe3c0 100644 --- a/gui/versionselectdialog.cpp +++ b/gui/dialogs/VersionSelectDialog.cpp @@ -13,24 +13,25 @@ * limitations under the License. */ -#include "versionselectdialog.h" -#include "ui_versionselectdialog.h" +#include "VersionSelectDialog.h" +#include "ui_VersionSelectDialog.h" #include <QHeaderView> #include <QDebug> -#include <gui/ProgressDialog.h> -#include "gui/platform.h" +#include <gui/dialogs/ProgressDialog.h> +#include "gui/Platform.h" #include <logic/BaseVersion.h> #include <logic/lists/BaseVersionList.h> #include <logic/tasks/Task.h> -VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title, QWidget *parent, bool cancelable) +VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title, QWidget *parent, + bool cancelable) : QDialog(parent), ui(new Ui::VersionSelectDialog) { - MultiMCPlatform::fixWM_CLASS(this); + MultiMCPlatform::fixWM_CLASS(this); ui->setupUi(this); setWindowModality(Qt::WindowModal); setWindowTitle(title); @@ -44,7 +45,7 @@ VersionSelectDialog::VersionSelectDialog(BaseVersionList *vlist, QString title, ui->listView->header()->setSectionResizeMode(QHeaderView::ResizeToContents); ui->listView->header()->setSectionResizeMode(resizeOnColumn, QHeaderView::Stretch); - if(!cancelable) + if (!cancelable) { ui->buttonBox->button(QDialogButtonBox::Cancel)->setEnabled(false); } diff --git a/gui/versionselectdialog.h b/gui/dialogs/VersionSelectDialog.h index 319caeca..e36341db 100644 --- a/gui/versionselectdialog.h +++ b/gui/dialogs/VersionSelectDialog.h @@ -3,7 +3,7 @@ * 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 @@ -13,12 +13,11 @@ * limitations under the License. */ -#ifndef VERSIONSELECTDIALOG_H -#define VERSIONSELECTDIALOG_H +#pragma once #include <QDialog> - #include <QSortFilterProxyModel> + #include "logic/BaseVersion.h" class BaseVersionList; @@ -31,31 +30,32 @@ class VersionSelectDialog; class VersionSelectDialog : public QDialog { Q_OBJECT - + public: - explicit VersionSelectDialog(BaseVersionList *vlist, QString title, QWidget *parent = 0, bool cancelable = true); + explicit VersionSelectDialog(BaseVersionList *vlist, QString title, QWidget *parent = 0, + bool cancelable = true); ~VersionSelectDialog(); - + virtual int exec(); - + //! Starts a task that loads the list. void loadList(); - + BaseVersionPtr selectedVersion() const; - + void setFilter(int column, QString filter); void setResizeOn(int column); - -private slots: + +private +slots: void on_refreshButton_clicked(); + private: Ui::VersionSelectDialog *ui; - + BaseVersionList *m_vlist; - + QSortFilterProxyModel *m_proxyModel; int resizeOnColumn = 0; }; - -#endif // VERSIONSELECTDIALOG_H diff --git a/gui/versionselectdialog.ui b/gui/dialogs/VersionSelectDialog.ui index 222f29cf..222f29cf 100644 --- a/gui/versionselectdialog.ui +++ b/gui/dialogs/VersionSelectDialog.ui diff --git a/gui/instancedelegate.h b/gui/instancedelegate.h deleted file mode 100644 index 56bc34ba..00000000 --- a/gui/instancedelegate.h +++ /dev/null @@ -1,12 +0,0 @@ -#pragma once - -#include <QStyledItemDelegate> - -class ListViewDelegate : public QStyledItemDelegate -{ -public: - explicit ListViewDelegate ( QObject* parent = 0 ); -protected: - void paint ( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; - QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const; -}; diff --git a/gui/instancesettings.h b/gui/instancesettings.h deleted file mode 100644 index b6cdb92c..00000000 --- a/gui/instancesettings.h +++ /dev/null @@ -1,35 +0,0 @@ -#ifndef INSTANCESETTINGS_H -#define INSTANCESETTINGS_H - -#include <QDialog> -#include "settingsobject.h" - -namespace Ui { -class InstanceSettings; -} - -class InstanceSettings : public QDialog -{ - Q_OBJECT - -public: - explicit InstanceSettings(SettingsObject *s, QWidget *parent = 0); - ~InstanceSettings(); - - void updateCheckboxStuff(); - - void applySettings(); - void loadSettings(); -protected: - virtual void showEvent ( QShowEvent* ); -private slots: - void on_customCommandsGroupBox_toggled(bool arg1); - void on_buttonBox_accepted(); - void on_buttonBox_rejected(); - -private: - Ui::InstanceSettings *ui; - SettingsObject * m_obj; -}; - -#endif // INSTANCESETTINGS_H diff --git a/gui/newmodeditwindow.ui b/gui/newmodeditwindow.ui deleted file mode 100644 index a7587d11..00000000 --- a/gui/newmodeditwindow.ui +++ /dev/null @@ -1,159 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<ui version="4.0"> - <class>Dialog</class> - <widget class="QDialog" name="Dialog"> - <property name="geometry"> - <rect> - <x>0</x> - <y>0</y> - <width>569</width> - <height>420</height> - </rect> - </property> - <property name="windowTitle"> - <string>Dialog</string> - </property> - <layout class="QVBoxLayout" name="verticalLayout"> - <item> - <widget class="QTabWidget" name="tabWidget"> - <property name="enabled"> - <bool>true</bool> - </property> - <property name="minimumSize"> - <size> - <width>0</width> - <height>0</height> - </size> - </property> - <property name="currentIndex"> - <number>2</number> - </property> - <property name="elideMode"> - <enum>Qt::ElideNone</enum> - </property> - <property name="tabsClosable"> - <bool>false</bool> - </property> - <widget class="QWidget" name="libraryTab"> - <attribute name="title"> - <string>Library</string> - </attribute> - <layout class="QHBoxLayout" name="horizontalLayout"> - <item> - <widget class="QTreeView" name="treeView"/> - </item> - </layout> - </widget> - <widget class="QWidget" name="modTab"> - <attribute name="title"> - <string>Mods</string> - </attribute> - <layout class="QHBoxLayout" name="horizontalLayout_2"> - <item> - <widget class="QListView" name="listView"/> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_2"> - <item> - <widget class="QPushButton" name="addModButton"> - <property name="text"> - <string>&Add</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="removeModButton"> - <property name="text"> - <string>&Remove</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="viewModButton"> - <property name="text"> - <string>&View Folder</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - <widget class="QWidget" name="resourcePackTab"> - <attribute name="title"> - <string>Resource Pack</string> - </attribute> - <layout class="QHBoxLayout" name="horizontalLayout_3"> - <item> - <widget class="QListView" name="listView_2"/> - </item> - <item> - <layout class="QVBoxLayout" name="verticalLayout_3"> - <item> - <widget class="QPushButton" name="pushButton"> - <property name="text"> - <string>PushButton</string> - </property> - </widget> - </item> - <item> - <widget class="QPushButton" name="pushButton_2"> - <property name="text"> - <string>PushButton</string> - </property> - </widget> - </item> - <item> - <spacer name="verticalSpacer_2"> - <property name="orientation"> - <enum>Qt::Vertical</enum> - </property> - <property name="sizeHint" stdset="0"> - <size> - <width>20</width> - <height>40</height> - </size> - </property> - </spacer> - </item> - <item> - <widget class="QPushButton" name="pushButton_3"> - <property name="text"> - <string>PushButton</string> - </property> - </widget> - </item> - </layout> - </item> - </layout> - </widget> - </widget> - </item> - <item> - <widget class="QDialogButtonBox" name="buttonBox"> - <property name="autoFillBackground"> - <bool>false</bool> - </property> - <property name="standardButtons"> - <set>QDialogButtonBox::Close</set> - </property> - </widget> - </item> - </layout> - </widget> - <resources/> - <connections/> -</ui> diff --git a/gui/instancedelegate.cpp b/gui/widgets/InstanceDelegate.cpp index 4c7a3a3a..487fed61 100644 --- a/gui/instancedelegate.cpp +++ b/gui/widgets/InstanceDelegate.cpp @@ -1,4 +1,19 @@ -#include "instancedelegate.h" +/* 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 "InstanceDelegate.h" #include <QPainter> #include <QTextOption> #include <QTextLayout> diff --git a/gui/widgets/InstanceDelegate.h b/gui/widgets/InstanceDelegate.h new file mode 100644 index 00000000..6f924405 --- /dev/null +++ b/gui/widgets/InstanceDelegate.h @@ -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. + */ + +#pragma once + +#include <QStyledItemDelegate> + +class ListViewDelegate : public QStyledItemDelegate +{ +public: + explicit ListViewDelegate ( QObject* parent = 0 ); +protected: + void paint ( QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index ) const; + QSize sizeHint ( const QStyleOptionViewItem & option, const QModelIndex & index ) const; +}; diff --git a/gui/LabeledToolButton.cpp b/gui/widgets/LabeledToolButton.cpp index be84d1b7..fe3cac45 100644 --- a/gui/LabeledToolButton.cpp +++ b/gui/widgets/LabeledToolButton.cpp @@ -1,3 +1,18 @@ +/* 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 <QLabel> #include <QVBoxLayout> #include <QResizeEvent> @@ -5,7 +20,6 @@ #include "LabeledToolButton.h" #include <QApplication> - /* * * Tool Button with a label on it, instead of the normal text rendering diff --git a/gui/widgets/LabeledToolButton.h b/gui/widgets/LabeledToolButton.h new file mode 100644 index 00000000..b417f814 --- /dev/null +++ b/gui/widgets/LabeledToolButton.h @@ -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. + */ + +#pragma once + +#include <QPushButton> +#include <QToolButton> + +class QLabel; + +class LabeledToolButton : public QToolButton +{ + Q_OBJECT + + QLabel * m_label; + +public: + LabeledToolButton(QWidget * parent = 0); + + QString text() const; + void setText(const QString & text); + virtual QSize sizeHint() const; +protected: + void resizeEvent(QResizeEvent * event); +}; diff --git a/gui/MCModInfoFrame.cpp b/gui/widgets/MCModInfoFrame.cpp index 55ef13f1..ad167bc9 100644 --- a/gui/MCModInfoFrame.cpp +++ b/gui/widgets/MCModInfoFrame.cpp @@ -13,11 +13,13 @@ * limitations under the License. */ -#include "MCModInfoFrame.h" -#include "ui_MCModInfoFrame.h" -#include "CustomMessageBox.h" #include <QMessageBox> #include <QtGui> + +#include "MCModInfoFrame.h" +#include "ui_MCModInfoFrame.h" +#include "gui/dialogs/CustomMessageBox.h" + void MCModInfoFrame::updateWithMod(Mod &m) { if(m.type() == m.MOD_FOLDER) diff --git a/gui/MCModInfoFrame.h b/gui/widgets/MCModInfoFrame.h index 54c5d674..54c5d674 100644 --- a/gui/MCModInfoFrame.h +++ b/gui/widgets/MCModInfoFrame.h diff --git a/gui/MCModInfoFrame.ui b/gui/widgets/MCModInfoFrame.ui index 60e0a65c..60e0a65c 100644 --- a/gui/MCModInfoFrame.ui +++ b/gui/widgets/MCModInfoFrame.ui diff --git a/gui/ModListView.cpp b/gui/widgets/ModListView.cpp index 1d0e834c..838af75e 100644 --- a/gui/ModListView.cpp +++ b/gui/widgets/ModListView.cpp @@ -1,3 +1,18 @@ +/* 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 "ModListView.h" #include <QHeaderView> #include <QMouseEvent> diff --git a/depends/util/src/osutils.cpp b/gui/widgets/ModListView.h index 9a85d1e5..b26fa26b 100644 --- a/depends/util/src/osutils.cpp +++ b/gui/widgets/ModListView.h @@ -3,7 +3,7 @@ * 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 @@ -13,7 +13,15 @@ * limitations under the License. */ -#include "include/osutils.h" +#pragma once +#include <QTreeView> + +class Mod; -#include <QUrl> -#include <QFileInfo> +class ModListView: public QTreeView +{ + Q_OBJECT +public: + explicit ModListView ( QWidget* parent = 0 ); + virtual void setModel ( QAbstractItemModel* model ); +}; diff --git a/logic/BaseInstance.cpp b/logic/BaseInstance.cpp index 6a6b195b..c38f75ef 100644 --- a/logic/BaseInstance.cpp +++ b/logic/BaseInstance.cpp @@ -3,7 +3,7 @@ * 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 @@ -19,7 +19,7 @@ #include <QFileInfo> #include <QDir> -#include <MultiMC.h> +#include "MultiMC.h" #include "inisettingsobject.h" #include "setting.h" @@ -28,64 +28,74 @@ #include "pathutils.h" #include "lists/MinecraftVersionList.h" - -BaseInstance::BaseInstance( BaseInstancePrivate* d_in, - const QString& rootDir, - SettingsObject* settings_obj, - QObject* parent - ) -:inst_d(d_in), QObject(parent) +BaseInstance::BaseInstance(BaseInstancePrivate *d_in, const QString &rootDir, + SettingsObject *settings_obj, QObject *parent) + : inst_d(d_in), QObject(parent) { I_D(BaseInstance); d->m_settings = settings_obj; d->m_rootDir = rootDir; - + settings().registerSetting(new Setting("name", "Unnamed Instance")); settings().registerSetting(new Setting("iconKey", "default")); settings().registerSetting(new Setting("notes", "")); settings().registerSetting(new Setting("lastLaunchTime", 0)); - + /* - * custom base jar has no default. it is determined in code... see the accessor methods for it - * + * custom base jar has no default. it is determined in code... see the accessor methods for + *it + * * for instances that DO NOT have the CustomBaseJar setting (legacy instances), * [.]minecraft/bin/mcbackup.jar is the default base jar */ settings().registerSetting(new Setting("UseCustomBaseJar", true)); settings().registerSetting(new Setting("CustomBaseJar", "")); - + auto globalSettings = MMC->settings(); - + // Java Settings settings().registerSetting(new Setting("OverrideJava", false)); - settings().registerSetting(new OverrideSetting("JavaPath", globalSettings->getSetting("JavaPath"))); - settings().registerSetting(new OverrideSetting("JvmArgs", globalSettings->getSetting("JvmArgs"))); - + settings().registerSetting( + new OverrideSetting("JavaPath", globalSettings->getSetting("JavaPath"))); + settings().registerSetting( + new OverrideSetting("JvmArgs", globalSettings->getSetting("JvmArgs"))); + // Custom Commands settings().registerSetting(new Setting("OverrideCommands", false)); - settings().registerSetting(new OverrideSetting("PreLaunchCommand", globalSettings->getSetting("PreLaunchCommand"))); - settings().registerSetting(new OverrideSetting("PostExitCommand", globalSettings->getSetting("PostExitCommand"))); - + settings().registerSetting(new OverrideSetting( + "PreLaunchCommand", globalSettings->getSetting("PreLaunchCommand"))); + settings().registerSetting( + new OverrideSetting("PostExitCommand", globalSettings->getSetting("PostExitCommand"))); + // Window Size settings().registerSetting(new Setting("OverrideWindow", false)); - settings().registerSetting(new OverrideSetting("LaunchMaximized", globalSettings->getSetting("LaunchMaximized"))); - settings().registerSetting(new OverrideSetting("MinecraftWinWidth", globalSettings->getSetting("MinecraftWinWidth"))); - settings().registerSetting(new OverrideSetting("MinecraftWinHeight", globalSettings->getSetting("MinecraftWinHeight"))); - + settings().registerSetting( + new OverrideSetting("LaunchMaximized", globalSettings->getSetting("LaunchMaximized"))); + settings().registerSetting(new OverrideSetting( + "MinecraftWinWidth", globalSettings->getSetting("MinecraftWinWidth"))); + settings().registerSetting(new OverrideSetting( + "MinecraftWinHeight", globalSettings->getSetting("MinecraftWinHeight"))); + // Memory settings().registerSetting(new Setting("OverrideMemory", false)); - settings().registerSetting(new OverrideSetting("MinMemAlloc", globalSettings->getSetting("MinMemAlloc"))); - settings().registerSetting(new OverrideSetting("MaxMemAlloc", globalSettings->getSetting("MaxMemAlloc"))); - settings().registerSetting(new OverrideSetting("PermGen", globalSettings->getSetting("PermGen"))); - + settings().registerSetting( + new OverrideSetting("MinMemAlloc", globalSettings->getSetting("MinMemAlloc"))); + settings().registerSetting( + new OverrideSetting("MaxMemAlloc", globalSettings->getSetting("MaxMemAlloc"))); + settings().registerSetting( + new OverrideSetting("PermGen", globalSettings->getSetting("PermGen"))); + // Auto login settings().registerSetting(new Setting("OverrideLogin", false)); - settings().registerSetting(new OverrideSetting("AutoLogin", globalSettings->getSetting("AutoLogin"))); - + settings().registerSetting( + new OverrideSetting("AutoLogin", globalSettings->getSetting("AutoLogin"))); + // Console settings().registerSetting(new Setting("OverrideConsole", false)); - settings().registerSetting(new OverrideSetting("ShowConsole", globalSettings->getSetting("ShowConsole"))); - settings().registerSetting(new OverrideSetting("AutoCloseConsole", globalSettings->getSetting("AutoCloseConsole"))); + settings().registerSetting( + new OverrideSetting("ShowConsole", globalSettings->getSetting("ShowConsole"))); + settings().registerSetting(new OverrideSetting( + "AutoCloseConsole", globalSettings->getSetting("AutoCloseConsole"))); } void BaseInstance::nuke() @@ -94,7 +104,6 @@ void BaseInstance::nuke() emit nuked(this); } - QString BaseInstance::id() const { return QFileInfo(instanceRoot()).fileName(); @@ -106,7 +115,6 @@ QString BaseInstance::instanceType() const return d->m_settings->get("InstanceType").toString(); } - QString BaseInstance::instanceRoot() const { I_D(BaseInstance); @@ -117,9 +125,9 @@ QString BaseInstance::minecraftRoot() const { QFileInfo mcDir(PathCombine(instanceRoot(), "minecraft")); QFileInfo dotMCDir(PathCombine(instanceRoot(), ".minecraft")); - + if (dotMCDir.exists() && !mcDir.exists()) - return dotMCDir.filePath(); + return dotMCDir.filePath(); else return mcDir.filePath(); } @@ -147,7 +155,7 @@ QString BaseInstance::baseJar() const { I_D(BaseInstance); bool customJar = d->m_settings->get("UseCustomBaseJar").toBool(); - if(customJar) + if (customJar) { return customBaseJar(); } @@ -158,99 +166,97 @@ QString BaseInstance::baseJar() const QString BaseInstance::customBaseJar() const { I_D(BaseInstance); - QString value = d->m_settings->get ( "CustomBaseJar" ).toString(); - if(value.isNull() || value.isEmpty()) + QString value = d->m_settings->get("CustomBaseJar").toString(); + if (value.isNull() || value.isEmpty()) { return defaultCustomBaseJar(); } return value; } -void BaseInstance::setCustomBaseJar ( QString val ) +void BaseInstance::setCustomBaseJar(QString val) { I_D(BaseInstance); - if(val.isNull() || val.isEmpty() || val == defaultCustomBaseJar()) - d->m_settings->reset ( "CustomBaseJar" ); + if (val.isNull() || val.isEmpty() || val == defaultCustomBaseJar()) + d->m_settings->reset("CustomBaseJar"); else - d->m_settings->set ( "CustomBaseJar", val ); + d->m_settings->set("CustomBaseJar", val); } -void BaseInstance::setShouldUseCustomBaseJar ( bool val ) +void BaseInstance::setShouldUseCustomBaseJar(bool val) { I_D(BaseInstance); - d->m_settings->set ( "UseCustomBaseJar", val ); + d->m_settings->set("UseCustomBaseJar", val); } bool BaseInstance::shouldUseCustomBaseJar() const { I_D(BaseInstance); - return d->m_settings->get ( "UseCustomBaseJar" ).toBool(); + return d->m_settings->get("UseCustomBaseJar").toBool(); } - qint64 BaseInstance::lastLaunch() const { I_D(BaseInstance); - return d->m_settings->get ( "lastLaunchTime" ).value<qint64>(); + return d->m_settings->get("lastLaunchTime").value<qint64>(); } -void BaseInstance::setLastLaunch ( qint64 val ) +void BaseInstance::setLastLaunch(qint64 val) { I_D(BaseInstance); - d->m_settings->set ( "lastLaunchTime", val ); - emit propertiesChanged ( this ); + d->m_settings->set("lastLaunchTime", val); + emit propertiesChanged(this); } -void BaseInstance::setGroupInitial ( QString val ) +void BaseInstance::setGroupInitial(QString val) { I_D(BaseInstance); d->m_group = val; - emit propertiesChanged ( this ); + emit propertiesChanged(this); } -void BaseInstance::setGroupPost ( QString val ) +void BaseInstance::setGroupPost(QString val) { setGroupInitial(val); emit groupChanged(); } - QString BaseInstance::group() const { I_D(BaseInstance); return d->m_group; } -void BaseInstance::setNotes ( QString val ) +void BaseInstance::setNotes(QString val) { I_D(BaseInstance); - d->m_settings->set ( "notes", val ); + d->m_settings->set("notes", val); } QString BaseInstance::notes() const { I_D(BaseInstance); - return d->m_settings->get ( "notes" ).toString(); + return d->m_settings->get("notes").toString(); } -void BaseInstance::setIconKey ( QString val ) +void BaseInstance::setIconKey(QString val) { I_D(BaseInstance); - d->m_settings->set ( "iconKey", val ); - emit propertiesChanged ( this ); + d->m_settings->set("iconKey", val); + emit propertiesChanged(this); } QString BaseInstance::iconKey() const { I_D(BaseInstance); - return d->m_settings->get ( "iconKey" ).toString(); + return d->m_settings->get("iconKey").toString(); } -void BaseInstance::setName ( QString val ) +void BaseInstance::setName(QString val) { I_D(BaseInstance); - d->m_settings->set ( "name", val ); - emit propertiesChanged ( this ); + d->m_settings->set("name", val); + emit propertiesChanged(this); } QString BaseInstance::name() const { I_D(BaseInstance); - return d->m_settings->get ( "name" ).toString(); + return d->m_settings->get("name").toString(); } diff --git a/logic/BaseInstance_p.h b/logic/BaseInstance_p.h index 06c0c0ba..06581a34 100644 --- a/logic/BaseInstance_p.h +++ b/logic/BaseInstance_p.h @@ -1,10 +1,25 @@ +/* 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. + */ + #pragma once #include <QString> #include <settingsobject.h> class BaseInstance; -#define I_D(Class) Class##Private * const d = (Class##Private * const) inst_d.get() +#define I_D(Class) Class##Private *const d = (Class##Private * const)inst_d.get() struct BaseInstancePrivate { diff --git a/logic/BaseUpdate.cpp b/logic/BaseUpdate.cpp index 02b29d32..5aeb12ef 100644 --- a/logic/BaseUpdate.cpp +++ b/logic/BaseUpdate.cpp @@ -1,6 +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. + */ + #include "BaseUpdate.h" -BaseUpdate::BaseUpdate ( BaseInstance* inst, QObject* parent ) : Task ( parent ) +BaseUpdate::BaseUpdate(BaseInstance *inst, QObject *parent) : Task(parent) { m_inst = inst; } diff --git a/logic/BaseUpdate.h b/logic/BaseUpdate.h index 9ada0770..ddeefa97 100644 --- a/logic/BaseUpdate.h +++ b/logic/BaseUpdate.h @@ -3,7 +3,7 @@ * 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 @@ -34,15 +34,14 @@ class BaseUpdate : public Task Q_OBJECT public: explicit BaseUpdate(BaseInstance *inst, QObject *parent = 0); - + virtual void executeTask() = 0; -protected slots: - //virtual void error(const QString &msg); +protected +slots: + // virtual void error(const QString &msg); void updateDownloadProgress(qint64 current, qint64 total); - + protected: BaseInstance *m_inst; }; - - diff --git a/logic/BaseVersion.h b/logic/BaseVersion.h index 01745c46..1864c94c 100644 --- a/logic/BaseVersion.h +++ b/logic/BaseVersion.h @@ -3,7 +3,7 @@ * 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 @@ -14,6 +14,7 @@ */ #pragma once + #include <memory> /*! @@ -26,13 +27,13 @@ struct BaseVersion * This should be unique within the version list or shenanigans will occur. */ virtual QString descriptor() = 0; - + /*! * The name of this version as it is displayed to the user. * For example: "1.5.1" */ virtual QString name() = 0; - + /*! * This should return a string that describes * the kind of version this is (Stable, Beta, Snapshot, whatever) @@ -42,4 +43,4 @@ struct BaseVersion typedef std::shared_ptr<BaseVersion> BaseVersionPtr; -Q_DECLARE_METATYPE( BaseVersionPtr )
\ No newline at end of file +Q_DECLARE_METATYPE(BaseVersionPtr)
\ No newline at end of file diff --git a/logic/CMakeLists.txt b/logic/CMakeLists.txt deleted file mode 100644 index b1eacced..00000000 --- a/logic/CMakeLists.txt +++ /dev/null @@ -1,24 +0,0 @@ -project(libMultiMC) - -set(CMAKE_AUTOMOC ON) - -# Find Qt -find_package(Qt5Core REQUIRED) -find_package(Qt5Network REQUIRED) -find_package(Qt5Xml REQUIRED) - -# Include Qt headers. -include_directories(${Qt5Base_INCLUDE_DIRS}) -include_directories(${Qt5Network_INCLUDE_DIRS}) - -# Include utility library. -include_directories(${CMAKE_SOURCE_DIR}/libutil/include) - -# Include settings library. -include_directories(${CMAKE_SOURCE_DIR}/libsettings/include) - -SET(LIBINST_HEADERS - -) - - diff --git a/logic/EnabledItemFilter.cpp b/logic/EnabledItemFilter.cpp index 6ecd0271..c252a0ad 100644 --- a/logic/EnabledItemFilter.cpp +++ b/logic/EnabledItemFilter.cpp @@ -1,9 +1,22 @@ +/* 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 "EnabledItemFilter.h" -EnabledItemFilter::EnabledItemFilter(QObject* parent) - :QSortFilterProxyModel(parent) +EnabledItemFilter::EnabledItemFilter(QObject *parent) : QSortFilterProxyModel(parent) { - } void EnabledItemFilter::setActive(bool active) @@ -14,17 +27,17 @@ void EnabledItemFilter::setActive(bool active) bool EnabledItemFilter::filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const { - if(!m_active) + if (!m_active) return true; QModelIndex index = sourceModel()->index(sourceRow, 0, sourceParent); - if(sourceModel()->flags(index) & Qt::ItemIsEnabled) + if (sourceModel()->flags(index) & Qt::ItemIsEnabled) { return true; } return false; } -bool EnabledItemFilter::lessThan(const QModelIndex& left, const QModelIndex& right) const +bool EnabledItemFilter::lessThan(const QModelIndex &left, const QModelIndex &right) const { - return QSortFilterProxyModel::lessThan(left, right); + return QSortFilterProxyModel::lessThan(left, right); } diff --git a/logic/EnabledItemFilter.h b/logic/EnabledItemFilter.h index cb6d4041..bf5e1e85 100644 --- a/logic/EnabledItemFilter.h +++ b/logic/EnabledItemFilter.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QSortFilterProxyModel> @@ -7,10 +22,11 @@ class EnabledItemFilter : public QSortFilterProxyModel public: EnabledItemFilter(QObject *parent = 0); void setActive(bool active); - + protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; bool lessThan(const QModelIndex &left, const QModelIndex &right) const; + private: bool m_active = false; };
\ No newline at end of file diff --git a/logic/ForgeInstaller.cpp b/logic/ForgeInstaller.cpp index a946dd44..8d4c5b41 100644 --- a/logic/ForgeInstaller.cpp +++ b/logic/ForgeInstaller.cpp @@ -1,3 +1,18 @@ +/* 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 "ForgeInstaller.h" #include "OneSixVersion.h" #include "OneSixLibrary.h" diff --git a/logic/ForgeInstaller.h b/logic/ForgeInstaller.h index f6f22a2a..0b9f9c77 100644 --- a/logic/ForgeInstaller.h +++ b/logic/ForgeInstaller.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QString> #include <memory> @@ -19,7 +34,3 @@ private: QString realVersionId; QString m_universal_url; }; - - - - diff --git a/logic/InstanceFactory.cpp b/logic/InstanceFactory.cpp index e64d22ca..e1f1f202 100644 --- a/logic/InstanceFactory.cpp +++ b/logic/InstanceFactory.cpp @@ -30,7 +30,7 @@ #include <setting.h> #include "pathutils.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" InstanceFactory InstanceFactory::loader; @@ -129,19 +129,20 @@ InstanceFactory::InstCreateError InstanceFactory::copyInstance(BaseInstance *&ne return InstanceFactory::CantCreateDir; } auto error = loadInstance(newInstance, instDir); - switch(error) + switch (error) { - case NoLoadError: - return NoCreateError; - case UnknownLoadError: - { - rootDir.removeRecursively(); - return UnknownCreateError; - } - case NotAnInstance: - { - rootDir.removeRecursively(); - return CantCreateDir; - } - }; + case NoLoadError: + return NoCreateError; + case UnknownLoadError: + { + rootDir.removeRecursively(); + return UnknownCreateError; + } + case NotAnInstance: + { + rootDir.removeRecursively(); + return CantCreateDir; + } + } + ; } diff --git a/logic/InstanceLauncher.cpp b/logic/InstanceLauncher.cpp index 720052a3..9f78e55b 100644 --- a/logic/InstanceLauncher.cpp +++ b/logic/InstanceLauncher.cpp @@ -1,18 +1,34 @@ +/* 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 <iostream> + #include "InstanceLauncher.h" #include "MultiMC.h" -#include <iostream> -#include "gui/logindialog.h" -#include "gui/ProgressDialog.h" -#include "gui/consolewindow.h" +#include "gui/ConsoleWindow.h" +#include "gui/dialogs/LoginDialog.h" +#include "gui/dialogs/ProgressDialog.h" + #include "logic/net/LoginTask.h" #include "logic/MinecraftProcess.h" -#include "lists/InstanceList.h" - +#include "logic/lists/InstanceList.h" -InstanceLauncher::InstanceLauncher ( QString instId ) - :QObject(), instId ( instId ) -{} +InstanceLauncher::InstanceLauncher(QString instId) : QObject(), instId(instId) +{ +} void InstanceLauncher::onTerminated() { @@ -22,53 +38,56 @@ void InstanceLauncher::onTerminated() void InstanceLauncher::onLoginComplete() { - LoginTask * task = ( LoginTask * ) QObject::sender(); + LoginTask *task = (LoginTask *)QObject::sender(); auto result = task->getResult(); auto instance = MMC->instances()->getInstanceById(instId); - proc = instance->prepareForLaunch ( result ); - if ( !proc ) + proc = instance->prepareForLaunch(result); + if (!proc) { - //FIXME: report error + // FIXME: report error return; } console = new ConsoleWindow(proc); console->show(); - connect ( proc, SIGNAL ( ended() ), SLOT ( onTerminated() ) ); - connect ( proc, SIGNAL ( log ( QString,MessageLevel::Enum ) ), console, SLOT ( write ( QString,MessageLevel::Enum ) ) ); + connect(proc, SIGNAL(ended()), SLOT(onTerminated())); + connect(proc, SIGNAL(log(QString, MessageLevel::Enum)), console, + SLOT(write(QString, MessageLevel::Enum))); proc->launch(); } -void InstanceLauncher::doLogin ( const QString& errorMsg ) +void InstanceLauncher::doLogin(const QString &errorMsg) { - LoginDialog* loginDlg = new LoginDialog ( nullptr, errorMsg ); + LoginDialog *loginDlg = new LoginDialog(nullptr, errorMsg); loginDlg->exec(); - if ( loginDlg->result() == QDialog::Accepted ) + if (loginDlg->result() == QDialog::Accepted) { - UserInfo uInfo {loginDlg->getUsername(), loginDlg->getPassword() }; + UserInfo uInfo{loginDlg->getUsername(), loginDlg->getPassword()}; - ProgressDialog* tDialog = new ProgressDialog ( nullptr ); - LoginTask* loginTask = new LoginTask ( uInfo, tDialog ); - connect ( loginTask, SIGNAL ( succeeded() ),SLOT ( onLoginComplete() ), Qt::QueuedConnection ); - connect ( loginTask, SIGNAL ( failed ( QString ) ),SLOT ( doLogin ( QString ) ), Qt::QueuedConnection ); - tDialog->exec ( loginTask ); + ProgressDialog *tDialog = new ProgressDialog(nullptr); + LoginTask *loginTask = new LoginTask(uInfo, tDialog); + connect(loginTask, SIGNAL(succeeded()), SLOT(onLoginComplete()), Qt::QueuedConnection); + connect(loginTask, SIGNAL(failed(QString)), SLOT(doLogin(QString)), + Qt::QueuedConnection); + tDialog->exec(loginTask); } - //onLoginComplete(LoginResponse("Offline","Offline", 1)); + // onLoginComplete(LoginResponse("Offline","Offline", 1)); } int InstanceLauncher::launch() { - std::cout << "Launching Instance '" << qPrintable ( instId ) << "'" << std::endl; + std::cout << "Launching Instance '" << qPrintable(instId) << "'" << std::endl; auto instance = MMC->instances()->getInstanceById(instId); - if ( !instance ) + if (!instance) { - std::cout << "Could not find instance requested. note that you have to specify the ID, not the NAME" << std::endl; + std::cout << "Could not find instance requested. note that you have to specify the ID, " + "not the NAME" << std::endl; return 1; } std::cout << "Logging in..." << std::endl; - doLogin ( "" ); + doLogin(""); return MMC->exec(); } diff --git a/logic/InstanceLauncher.h b/logic/InstanceLauncher.h index de93e3d7..107c069f 100644 --- a/logic/InstanceLauncher.h +++ b/logic/InstanceLauncher.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QObject> @@ -9,20 +24,21 @@ class ConsoleWindow; class InstanceLauncher : public QObject { Q_OBJECT - + private: QString instId; MinecraftProcess *proc; ConsoleWindow *console; - + public: InstanceLauncher(QString instId); - -private slots: + +private +slots: void onTerminated(); void onLoginComplete(); void doLogin(const QString &errorMsg); - + public: int launch(); }; diff --git a/logic/JavaUtils.cpp b/logic/JavaUtils.cpp index 8e9c984f..61d0231a 100644 --- a/logic/JavaUtils.cpp +++ b/logic/JavaUtils.cpp @@ -13,21 +13,22 @@ * limitations under the License. */ -#include "JavaUtils.h" -#include "pathutils.h" -#include "MultiMC.h" - #include <QStringList> #include <QString> #include <QDir> #include <QMessageBox> -#include <logger/QsLog.h> -#include <gui/versionselectdialog.h> + #include <setting.h> +#include <pathutils.h> + +#include "MultiMC.h" + +#include "JavaUtils.h" +#include "logger/QsLog.h" +#include "gui/dialogs/VersionSelectDialog.h" JavaUtils::JavaUtils() { - } JavaVersionPtr JavaUtils::GetDefaultJava() @@ -48,20 +49,24 @@ QList<JavaVersionPtr> JavaUtils::FindJavaFromRegistryKey(DWORD keyType, QString QList<JavaVersionPtr> javas; QString archType = "unknown"; - if(keyType == KEY_WOW64_64KEY) archType = "64"; - else if(keyType == KEY_WOW64_32KEY) archType = "32"; + if (keyType == KEY_WOW64_64KEY) + archType = "64"; + else if (keyType == KEY_WOW64_32KEY) + archType = "32"; HKEY jreKey; - if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, keyName.toStdString().c_str(), 0, KEY_READ | keyType | KEY_ENUMERATE_SUB_KEYS, &jreKey) == ERROR_SUCCESS) + if (RegOpenKeyExA(HKEY_LOCAL_MACHINE, keyName.toStdString().c_str(), 0, + KEY_READ | keyType | KEY_ENUMERATE_SUB_KEYS, &jreKey) == ERROR_SUCCESS) { // Read the current type version from the registry. // This will be used to find any key that contains the JavaHome value. char *value = new char[0]; DWORD valueSz = 0; - if (RegQueryValueExA(jreKey, "CurrentVersion", NULL, NULL, (BYTE*)value, &valueSz) == ERROR_MORE_DATA) + if (RegQueryValueExA(jreKey, "CurrentVersion", NULL, NULL, (BYTE *)value, &valueSz) == + ERROR_MORE_DATA) { value = new char[valueSz]; - RegQueryValueExA(jreKey, "CurrentVersion", NULL, NULL, (BYTE*)value, &valueSz); + RegQueryValueExA(jreKey, "CurrentVersion", NULL, NULL, (BYTE *)value, &valueSz); } QString recommended = value; @@ -70,37 +75,43 @@ QList<JavaVersionPtr> JavaUtils::FindJavaFromRegistryKey(DWORD keyType, QString DWORD subKeyNameSize, numSubKeys, retCode; // Get the number of subkeys - RegQueryInfoKey(jreKey, NULL, NULL, NULL, &numSubKeys, NULL, NULL, NULL, NULL, NULL, NULL, NULL); + RegQueryInfoKey(jreKey, NULL, NULL, NULL, &numSubKeys, NULL, NULL, NULL, NULL, NULL, + NULL, NULL); // Iterate until RegEnumKeyEx fails - if(numSubKeys > 0) + if (numSubKeys > 0) { - for(int i = 0; i < numSubKeys; i++) + for (int i = 0; i < numSubKeys; i++) { subKeyNameSize = 255; - retCode = RegEnumKeyEx(jreKey, i, subKeyName, &subKeyNameSize, NULL, NULL, NULL, NULL); - if(retCode == ERROR_SUCCESS) + retCode = RegEnumKeyEx(jreKey, i, subKeyName, &subKeyNameSize, NULL, NULL, NULL, + NULL); + if (retCode == ERROR_SUCCESS) { // Now open the registry key for the version that we just got. QString newKeyName = keyName + "\\" + subKeyName; HKEY newKey; - if(RegOpenKeyEx(HKEY_LOCAL_MACHINE, newKeyName.toStdString().c_str(), 0, KEY_READ | KEY_WOW64_64KEY, &newKey) == ERROR_SUCCESS) + if (RegOpenKeyEx(HKEY_LOCAL_MACHINE, newKeyName.toStdString().c_str(), 0, + KEY_READ | KEY_WOW64_64KEY, &newKey) == ERROR_SUCCESS) { // Read the JavaHome value to find where Java is installed. value = new char[0]; valueSz = 0; - if (RegQueryValueEx(newKey, "JavaHome", NULL, NULL, (BYTE*)value, &valueSz) == ERROR_MORE_DATA) + if (RegQueryValueEx(newKey, "JavaHome", NULL, NULL, (BYTE *)value, + &valueSz) == ERROR_MORE_DATA) { value = new char[valueSz]; - RegQueryValueEx(newKey, "JavaHome", NULL, NULL, (BYTE*)value, &valueSz); + RegQueryValueEx(newKey, "JavaHome", NULL, NULL, (BYTE *)value, + &valueSz); // Now, we construct the version object and add it to the list. JavaVersionPtr javaVersion(new JavaVersion()); javaVersion->id = subKeyName; javaVersion->arch = archType; - javaVersion->path = QDir(PathCombine(value, "bin")).absoluteFilePath("java.exe"); + javaVersion->path = + QDir(PathCombine(value, "bin")).absoluteFilePath("java.exe"); javaVersion->recommended = (recommended == subKeyName); javas.append(javaVersion); } @@ -121,17 +132,21 @@ QList<JavaVersionPtr> JavaUtils::FindJavaPaths() { QList<JavaVersionPtr> javas; - QList<JavaVersionPtr> JRE64s = this->FindJavaFromRegistryKey(KEY_WOW64_64KEY, "SOFTWARE\\JavaSoft\\Java Runtime Environment"); - QList<JavaVersionPtr> JDK64s = this->FindJavaFromRegistryKey(KEY_WOW64_64KEY, "SOFTWARE\\JavaSoft\\Java Development Kit"); - QList<JavaVersionPtr> JRE32s = this->FindJavaFromRegistryKey(KEY_WOW64_32KEY, "SOFTWARE\\JavaSoft\\Java Runtime Environment"); - QList<JavaVersionPtr> JDK32s = this->FindJavaFromRegistryKey(KEY_WOW64_32KEY, "SOFTWARE\\JavaSoft\\Java Development Kit"); + QList<JavaVersionPtr> JRE64s = this->FindJavaFromRegistryKey( + KEY_WOW64_64KEY, "SOFTWARE\\JavaSoft\\Java Runtime Environment"); + QList<JavaVersionPtr> JDK64s = this->FindJavaFromRegistryKey( + KEY_WOW64_64KEY, "SOFTWARE\\JavaSoft\\Java Development Kit"); + QList<JavaVersionPtr> JRE32s = this->FindJavaFromRegistryKey( + KEY_WOW64_32KEY, "SOFTWARE\\JavaSoft\\Java Runtime Environment"); + QList<JavaVersionPtr> JDK32s = this->FindJavaFromRegistryKey( + KEY_WOW64_32KEY, "SOFTWARE\\JavaSoft\\Java Development Kit"); javas.append(JRE64s); javas.append(JDK64s); javas.append(JRE32s); javas.append(JDK32s); - if(javas.size() <= 0) + if (javas.size() <= 0) { QLOG_WARN() << "Failed to find Java in the Windows registry - defaulting to \"java\""; javas.append(this->GetDefaultJava()); @@ -140,10 +155,11 @@ QList<JavaVersionPtr> JavaUtils::FindJavaPaths() QLOG_INFO() << "Found the following Java installations (64 -> 32, JRE -> JDK): "; - for(auto &java : javas) + for (auto &java : javas) { QString sRec; - if(java->recommended) sRec = "(Recommended)"; + if (java->recommended) + sRec = "(Recommended)"; QLOG_INFO() << java->id << java->arch << " at " << java->path << sRec; } diff --git a/logic/JavaUtils.h b/logic/JavaUtils.h index e4f777d0..8d7550d0 100644 --- a/logic/JavaUtils.h +++ b/logic/JavaUtils.h @@ -17,11 +17,13 @@ #include <QStringList> #include <QWidget> -#include <logic/lists/JavaVersionList.h> -#include "osutils.h" + +#include <osutils.h> + +#include "logic/lists/JavaVersionList.h" #if WINDOWS - #include <windows.h> +#include <windows.h> #endif class JavaUtils diff --git a/logic/LegacyForge.cpp b/logic/LegacyForge.cpp index adcf487c..94212ae4 100644 --- a/logic/LegacyForge.cpp +++ b/logic/LegacyForge.cpp @@ -1,26 +1,25 @@ -// -// Copyright 2012 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. -// +/* 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 "LegacyForge.h" -MinecraftForge::MinecraftForge ( const QString& file ) : Mod ( file ) +MinecraftForge::MinecraftForge(const QString &file) : Mod(file) { - } -bool MinecraftForge::FixVersionIfNeeded ( QString newVersion ) + +bool MinecraftForge::FixVersionIfNeeded(QString newVersion) {/* wxString reportedVersion = GetModVersion(); if(reportedVersion == "..." || reportedVersion.empty()) @@ -40,7 +39,7 @@ bool MinecraftForge::FixVersionIfNeeded ( QString newVersion ) // release last entry in.reset(); outzip.PutNextEntry("forgeversion.properties"); - + wxStringTokenizer tokenizer(newVersion,"."); wxString verFile; verFile << wxString("forge.major.number=") << tokenizer.GetNextToken() << "\n"; diff --git a/logic/LegacyForge.h b/logic/LegacyForge.h index 00a054b8..f4165ffa 100644 --- a/logic/LegacyForge.h +++ b/logic/LegacyForge.h @@ -1,25 +1,25 @@ -// -// Copyright 2012 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. -// +/* 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. + */ #pragma once + #include "Mod.h" class MinecraftForge : public Mod { public: - MinecraftForge ( const QString& file ); + MinecraftForge(const QString &file); bool FixVersionIfNeeded(QString newVersion); }; diff --git a/logic/LegacyInstance.cpp b/logic/LegacyInstance.cpp index 2fd18693..9a91b839 100644 --- a/logic/LegacyInstance.cpp +++ b/logic/LegacyInstance.cpp @@ -1,16 +1,35 @@ -#include "LegacyInstance.h" -#include "LegacyInstance_p.h" -#include "MinecraftProcess.h" -#include "LegacyUpdate.h" -#include "lists/IconList.h" -#include <setting.h> -#include <pathutils.h> -#include <cmdutils.h> -#include "gui/LegacyModEditDialog.h" +/* 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 <QFileInfo> #include <QDir> #include <QImage> -#include <MultiMC.h> +#include <setting.h> +#include <pathutils.h> +#include <cmdutils.h> + +#include "MultiMC.h" + +#include "LegacyInstance.h" +#include "LegacyInstance_p.h" + +#include "logic/MinecraftProcess.h" +#include "logic/LegacyUpdate.h" +#include "logic/lists/IconList.h" + +#include "gui/dialogs/LegacyModEditDialog.h" #define LAUNCHER_FILE "MultiMCLauncher.jar" diff --git a/logic/LegacyInstance.h b/logic/LegacyInstance.h index 8bf334f6..8a8d4b91 100644 --- a/logic/LegacyInstance.h +++ b/logic/LegacyInstance.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "BaseInstance.h" @@ -58,7 +73,8 @@ public: virtual bool versionIsCustom() override { return false; - }; + } + ; virtual bool shouldUpdate() const; virtual void setShouldUpdate(bool val); diff --git a/logic/LegacyInstance_p.h b/logic/LegacyInstance_p.h index 0809b8d2..ed97ccd3 100644 --- a/logic/LegacyInstance_p.h +++ b/logic/LegacyInstance_p.h @@ -1,16 +1,30 @@ +/* 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. + */ + #pragma once #include <QString> #include <settingsobject.h> +#include <memory> + #include "BaseInstance_p.h" #include "ModList.h" -#include <QSharedPointer> - -class ModList; -struct LegacyInstancePrivate: public BaseInstancePrivate +struct LegacyInstancePrivate : public BaseInstancePrivate { std::shared_ptr<ModList> jar_mod_list; std::shared_ptr<ModList> core_mod_list; std::shared_ptr<ModList> loader_mod_list; std::shared_ptr<ModList> texture_pack_list; -};
\ No newline at end of file +}; diff --git a/logic/LegacyUpdate.cpp b/logic/LegacyUpdate.cpp index 5120b241..9533f8ff 100644 --- a/logic/LegacyUpdate.cpp +++ b/logic/LegacyUpdate.cpp @@ -1,3 +1,18 @@ +/* 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 "LegacyUpdate.h" #include "lists/LwjglVersionList.h" #include "lists/MinecraftVersionList.h" @@ -9,7 +24,7 @@ #include <quazip.h> #include <quazipfile.h> #include <JlCompress.h> -#include <logger/QsLog.h> +#include "logger/QsLog.h" LegacyUpdate::LegacyUpdate(BaseInstance *inst, QObject *parent) : BaseUpdate(inst, parent) { diff --git a/logic/LegacyUpdate.h b/logic/LegacyUpdate.h index 69560f55..b30fa0b3 100644 --- a/logic/LegacyUpdate.h +++ b/logic/LegacyUpdate.h @@ -3,7 +3,7 @@ * 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 @@ -19,9 +19,9 @@ #include <QList> #include <QUrl> -#include "net/NetJob.h" -#include "tasks/Task.h" -#include "BaseUpdate.h" +#include "logic/net/NetJob.h" +#include "logic/tasks/Task.h" +#include "logic/BaseUpdate.h" class MinecraftVersion; class BaseInstance; @@ -34,39 +34,42 @@ class LegacyUpdate : public BaseUpdate public: explicit LegacyUpdate(BaseInstance *inst, QObject *parent = 0); virtual void executeTask(); - -private slots: + +private +slots: void lwjglStart(); - void lwjglFinished( QNetworkReply* ); + void lwjglFinished(QNetworkReply *); void lwjglFailed(); - + void jarStart(); void jarFinished(); void jarFailed(); - + void extractLwjgl(); - + void ModTheJar(); + private: enum MetainfAction { - KeepMetainf, // the META-INF folder will be added from the merged jar + KeepMetainf, // the META-INF folder will be added from the merged jar IgnoreMetainf // the META-INF from the merged jar will be ignored }; - bool MergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString>& contained, MetainfAction metainf); + bool MergeZipFiles(QuaZip *into, QFileInfo from, QSet<QString> &contained, + MetainfAction metainf); + private: - + std::shared_ptr<QNetworkReply> m_reply; - + // target version, determined during this task // MinecraftVersion *targetVersion; QString lwjglURL; QString lwjglVersion; - + QString lwjglTargetPath; QString lwjglNativesPath; + private: NetJobPtr legacyDownloadJob; }; - - diff --git a/logic/MinecraftProcess.h b/logic/MinecraftProcess.h index 812559d5..ad887c5b 100644 --- a/logic/MinecraftProcess.h +++ b/logic/MinecraftProcess.h @@ -14,6 +14,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #pragma once #include <QProcess> @@ -24,15 +25,17 @@ * @brief the MessageLevel Enum * defines what level a message is */ -namespace MessageLevel { -enum Enum { - MultiMC, /**< MultiMC Messages */ - Debug, /**< Debug Messages */ - Info, /**< Info Messages */ - Message, /**< Standard Messages */ - Warning, /**< Warnings */ - Error, /**< Errors */ - Fatal /**< Fatal Errors */ +namespace MessageLevel +{ +enum Enum +{ + MultiMC, /**< MultiMC Messages */ + Debug, /**< Debug Messages */ + Info, /**< Info Messages */ + Message, /**< Standard Messages */ + Warning, /**< Warnings */ + Error, /**< Errors */ + Fatal /**< Fatal Errors */ }; } @@ -56,25 +59,29 @@ public: void launch(); void setMinecraftWorkdir(QString path); - + void setMinecraftArguments(QStringList args); - + void killMinecraft(); - - inline void setLogin(QString user, QString sid) { username = user; sessionID = sid; } - + + inline void setLogin(QString user, QString sid) + { + username = user; + sessionID = sid; + } + signals: /** * @brief emitted when mc has finished and the PostLaunchCommand was run */ - void ended(BaseInstance*); + void ended(BaseInstance *); /** * @brief emitted when we want to log something * @param text the text to log * @param level the level to log at */ - void log(QString text, MessageLevel::Enum level=MessageLevel::MultiMC); + void log(QString text, MessageLevel::Enum level = MessageLevel::MultiMC); protected: BaseInstance *m_instance; @@ -83,10 +90,12 @@ protected: QString m_out_leftover; QProcess m_prepostlaunchprocess; -protected slots: +protected +slots: void finish(int, QProcess::ExitStatus status); void on_stdErr(); void on_stdOut(); + private: bool killed; MessageLevel::Enum getLevel(const QString &message, MessageLevel::Enum defaultLevel); diff --git a/logic/MinecraftVersion.h b/logic/MinecraftVersion.h index 53c2f5ef..504381a8 100644 --- a/logic/MinecraftVersion.h +++ b/logic/MinecraftVersion.h @@ -3,7 +3,7 @@ * 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 @@ -25,10 +25,10 @@ struct MinecraftVersion : public BaseVersion * This is primarily used for sorting versions in a list. */ qint64 timestamp; - + /// The URL that this version will be downloaded from. maybe. QString download_url; - + /// This version's type. Used internally to identify what kind of version this is. enum VersionType { @@ -36,31 +36,31 @@ struct MinecraftVersion : public BaseVersion Legacy, Nostalgia } type; - + /// is this the latest version? bool is_latest = false; - + /// is this a snapshot? bool is_snapshot = false; - + QString m_name; - + QString m_descriptor; - - virtual QString descriptor() + + virtual QString descriptor() { return m_descriptor; } - - virtual QString name() + + virtual QString name() { return m_name; } - + virtual QString typeString() const { QStringList pre_final; - if(is_latest == true) + if (is_latest == true) { pre_final.append("Latest"); } @@ -75,12 +75,12 @@ struct MinecraftVersion : public BaseVersion case Nostalgia: pre_final.append("Nostalgia"); break; - + default: pre_final.append(QString("Type(%1)").arg(type)); break; } - if(is_snapshot == true) + if (is_snapshot == true) { pre_final.append("Snapshot"); } diff --git a/logic/Mod.cpp b/logic/Mod.cpp index c45e3ad2..f9647eea 100644 --- a/logic/Mod.cpp +++ b/logic/Mod.cpp @@ -1,18 +1,17 @@ -// -// Copyright 2012 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. -// +/* 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 <QDir> #include <QString> @@ -26,7 +25,7 @@ #include "Mod.h" #include <pathutils.h> #include <inifile.h> -#include <logger/QsLog.h> +#include "logger/QsLog.h" Mod::Mod(const QFileInfo &file) { @@ -121,11 +120,12 @@ void Mod::ReadMCModInfo(QByteArray contents) m_homeurl = firstObj.value("url").toString(); m_description = firstObj.value("description").toString(); QJsonArray authors = firstObj.value("authors").toArray(); - if(authors.size() == 0) m_authors = ""; - else if(authors.size() >= 1) + if (authors.size() == 0) + m_authors = ""; + else if (authors.size() >= 1) { m_authors = authors.at(0).toString(); - for(int i = 1; i < authors.size(); i++) + for (int i = 1; i < authors.size(); i++) { m_authors += ", " + authors.at(i).toString(); } diff --git a/logic/Mod.h b/logic/Mod.h index f3aaf18b..ca362a9d 100644 --- a/logic/Mod.h +++ b/logic/Mod.h @@ -1,18 +1,17 @@ -// -// Copyright 2012 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. -// +/* 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. + */ #pragma once #include <QFileInfo> diff --git a/logic/ModList.cpp b/logic/ModList.cpp index 236f0db6..8ec73955 100644 --- a/logic/ModList.cpp +++ b/logic/ModList.cpp @@ -1,18 +1,17 @@ -// -// 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. -// +/* 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 "ModList.h" #include "LegacyInstance.h" @@ -21,7 +20,7 @@ #include <QUrl> #include <QUuid> #include <QFileSystemWatcher> -#include <logger/QsLog.h> +#include "logger/QsLog.h" ModList::ModList(const QString &dir, const QString &list_file) : QAbstractListModel(), m_dir(dir), m_list_file(list_file) diff --git a/logic/ModList.h b/logic/ModList.h index e99b6c82..803a5429 100644 --- a/logic/ModList.h +++ b/logic/ModList.h @@ -1,22 +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 -// +/* 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. + */ + #pragma once -class LegacyInstance; -class BaseInstance; #include <QList> #include <QString> #include <QDir> #include <QAbstractListModel> -#include "Mod.h" +#include "logic/Mod.h" + +class LegacyInstance; +class BaseInstance; class QFileSystemWatcher; /** @@ -27,91 +34,105 @@ class ModList : public QAbstractListModel { Q_OBJECT public: - ModList(const QString& dir, const QString& list_file = QString()); + ModList(const QString &dir, const QString &list_file = QString()); - virtual QVariant data ( const QModelIndex& index, int role = Qt::DisplayRole ) const; - virtual int rowCount ( const QModelIndex& parent = QModelIndex() ) const + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const { return size(); - }; - virtual QVariant headerData ( int section, Qt::Orientation orientation, int role = Qt::DisplayRole ) const; - virtual int columnCount ( const QModelIndex& parent ) const; - - size_t size() const { return mods.size(); }; - bool empty() const { return size() == 0; } - Mod& operator[](size_t index) { return mods[index]; }; - + } + ; + virtual QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const; + virtual int columnCount(const QModelIndex &parent) const; + + size_t size() const + { + return mods.size(); + } + ; + bool empty() const + { + return size() == 0; + } + Mod &operator[](size_t index) + { + return mods[index]; + } + ; + /// Reloads the mod list and returns true if the list changed. virtual bool update(); /** * Adds the given mod to the list at the given index - if the list supports custom ordering */ - virtual bool installMod(const QFileInfo& filename, int index = 0); + virtual bool installMod(const QFileInfo &filename, int index = 0); /// Deletes the mod at the given index. virtual bool deleteMod(int index); - + /// Deletes all the selected mods - virtual bool deleteMods( int first, int last ); - + virtual bool deleteMods(int first, int last); + /** * move the mod at index to the position N * 0 is the beginning of the list, length() is the end of the list. */ virtual bool moveModTo(int from, int to); - + /** * move the mod at index one position upwards */ virtual bool moveModUp(int from); - virtual bool moveModsUp( int first, int last ); - + virtual bool moveModsUp(int first, int last); + /** * move the mod at index one position downwards */ virtual bool moveModDown(int from); - virtual bool moveModsDown( int first, int last ); - + virtual bool moveModsDown(int first, int last); + /// flags, mostly to support drag&drop - virtual Qt::ItemFlags flags(const QModelIndex& index) const; + virtual Qt::ItemFlags flags(const QModelIndex &index) const; /// get data for drag action - virtual QMimeData* mimeData(const QModelIndexList& indexes) const; + virtual QMimeData *mimeData(const QModelIndexList &indexes) const; /// get the supported mime types virtual QStringList mimeTypes() const; /// process data from drop action - virtual bool dropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent); + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, + const QModelIndex &parent); /// what drag actions do we support? virtual Qt::DropActions supportedDragActions() const; - + /// what drop actions do we support? virtual Qt::DropActions supportedDropActions() const; - + void startWatching(); void stopWatching(); - + virtual bool isValid(); - + QDir dir() { return m_dir; } + private: QStringList readListFile(); bool saveListFile(); -private slots: +private +slots: void directoryChanged(QString path); - + signals: void changed(); + protected: - QFileSystemWatcher * m_watcher; + QFileSystemWatcher *m_watcher; bool is_watching; QDir m_dir; QString m_list_file; QString m_list_id; QList<Mod> mods; }; - - - diff --git a/logic/NagUtils.cpp b/logic/NagUtils.cpp index ccabf71f..6f81b3c7 100644 --- a/logic/NagUtils.cpp +++ b/logic/NagUtils.cpp @@ -13,25 +13,26 @@ * limitations under the License. */ -#include "NagUtils.h" -#include "gui/CustomMessageBox.h" +#include "logic/NagUtils.h" +#include "gui/dialogs/CustomMessageBox.h" namespace NagUtils { void checkJVMArgs(QString jvmargs, QWidget *parent) { - if(jvmargs.contains("-XX:PermSize=") || jvmargs.contains(QRegExp("-Xm[sx]"))) + if (jvmargs.contains("-XX:PermSize=") || jvmargs.contains(QRegExp("-Xm[sx]"))) { - CustomMessageBox::selectable(parent, parent->tr("JVM arguments warning"), - parent->tr("You tried to manually set a JVM memory option (using " - " \"-XX:PermSize\", \"-Xmx\" or \"-Xms\") - there" - " are dedicated boxes for these in the settings (Java" - " tab, in the Memory group at the top).\n" - "Your manual settings will be overridden by the" - " dedicated options.\n" - "This message will be displayed until you remove them" - " from the JVM arguments."), - QMessageBox::Warning)->exec(); + CustomMessageBox::selectable( + parent, parent->tr("JVM arguments warning"), + parent->tr("You tried to manually set a JVM memory option (using " + " \"-XX:PermSize\", \"-Xmx\" or \"-Xms\") - there" + " are dedicated boxes for these in the settings (Java" + " tab, in the Memory group at the top).\n" + "Your manual settings will be overridden by the" + " dedicated options.\n" + "This message will be displayed until you remove them" + " from the JVM arguments."), + QMessageBox::Warning)->exec(); } } } diff --git a/logic/NostalgiaInstance.cpp b/logic/NostalgiaInstance.cpp index efd8f46b..2e23ee71 100644 --- a/logic/NostalgiaInstance.cpp +++ b/logic/NostalgiaInstance.cpp @@ -1,9 +1,24 @@ +/* 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 "NostalgiaInstance.h" -NostalgiaInstance::NostalgiaInstance ( const QString& rootDir, SettingsObject* settings, QObject* parent ) - : OneSixInstance ( rootDir, settings, parent ) +NostalgiaInstance::NostalgiaInstance(const QString &rootDir, SettingsObject *settings, + QObject *parent) + : OneSixInstance(rootDir, settings, parent) { - } QString NostalgiaInstance::getStatusbarDescription() @@ -15,8 +30,3 @@ bool NostalgiaInstance::menuActionEnabled(QString action_name) const { return false; } - -/* -ADD MORE - IF REQUIRED -*/ diff --git a/logic/NostalgiaInstance.h b/logic/NostalgiaInstance.h index 64eb7a81..a26f7f0a 100644 --- a/logic/NostalgiaInstance.h +++ b/logic/NostalgiaInstance.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "OneSixInstance.h" @@ -6,8 +21,8 @@ class NostalgiaInstance : public OneSixInstance { Q_OBJECT public: - explicit NostalgiaInstance(const QString &rootDir, SettingsObject * settings, QObject *parent = 0); + explicit NostalgiaInstance(const QString &rootDir, SettingsObject *settings, + QObject *parent = 0); virtual QString getStatusbarDescription(); virtual bool menuActionEnabled(QString action_name) const; }; - diff --git a/logic/OneSixAssets.cpp b/logic/OneSixAssets.cpp index 500385ad..dbc42262 100644 --- a/logic/OneSixAssets.cpp +++ b/logic/OneSixAssets.cpp @@ -1,5 +1,20 @@ +/* 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 <QString> -#include <logger/QsLog.h> +#include "logger/QsLog.h" #include <QtXml/QtXml> #include "OneSixAssets.h" #include "net/NetJob.h" @@ -70,7 +85,7 @@ void OneSixAssets::S3BucketFinished() auto metacache = MMC->metacache(); - for (auto object: objectList) + for (auto object : objectList) { // Filter folder keys (zero size) if (object.size == 0) @@ -99,8 +114,7 @@ void OneSixAssets::S3BucketFinished() void OneSixAssets::start() { auto job = new NetJob("Assets index"); - job->addNetAction( - S3ListBucket::make(QUrl("http://s3.amazonaws.com/Minecraft.Resources/"))); + job->addNetAction(S3ListBucket::make(QUrl("http://s3.amazonaws.com/Minecraft.Resources/"))); connect(job, SIGNAL(succeeded()), SLOT(S3BucketFinished())); connect(job, SIGNAL(failed()), SIGNAL(failed())); emit indexStarted(); diff --git a/logic/OneSixAssets.h b/logic/OneSixAssets.h index 72e8a843..948068b8 100644 --- a/logic/OneSixAssets.h +++ b/logic/OneSixAssets.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "net/NetJob.h" @@ -14,13 +29,16 @@ signals: void filesStarted(); void filesProgress(int, int, int); -public slots: +public +slots: void S3BucketFinished(); void downloadFinished(); + public: void start(); + private: - ThreadedDeleter * deleter; + ThreadedDeleter *deleter; QStringList nuke_whitelist; NetJobPtr index_job; NetJobPtr files_job; diff --git a/logic/OneSixInstance.cpp b/logic/OneSixInstance.cpp index 7539d8e5..5c93236b 100644 --- a/logic/OneSixInstance.cpp +++ b/logic/OneSixInstance.cpp @@ -1,3 +1,18 @@ +/* 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 "OneSixInstance.h" #include "OneSixInstance_p.h" #include "OneSixUpdate.h" @@ -8,8 +23,8 @@ #include <pathutils.h> #include <cmdutils.h> #include <JlCompress.h> -#include <gui/OneSixModEditDialog.h> -#include <logger/QsLog.h> +#include "gui/dialogs/OneSixModEditDialog.h" +#include "logger/QsLog.h" OneSixInstance::OneSixInstance(const QString &rootDir, SettingsObject *setting_obj, QObject *parent) diff --git a/logic/OneSixInstance.h b/logic/OneSixInstance.h index d2276afc..2d02b605 100644 --- a/logic/OneSixInstance.h +++ b/logic/OneSixInstance.h @@ -1,7 +1,24 @@ +/* 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. + */ + #pragma once -#include "BaseInstance.h" #include <QStringList> + +#include "BaseInstance.h" + class OneSixVersion; class BaseUpdate; class ModList; diff --git a/logic/OneSixInstance_p.h b/logic/OneSixInstance_p.h index 06737b6f..6b7ea431 100644 --- a/logic/OneSixInstance_p.h +++ b/logic/OneSixInstance_p.h @@ -1,11 +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. + */ + #pragma once -#include "BaseInstance_p.h" -#include "OneSixVersion.h" -#include "OneSixLibrary.h" -#include "ModList.h" +#include <memory> + +#include "logic/BaseInstance_p.h" +#include "logic/OneSixVersion.h" +#include "logic/OneSixLibrary.h" +#include "logic/ModList.h" -struct OneSixInstancePrivate: public BaseInstancePrivate +struct OneSixInstancePrivate : public BaseInstancePrivate { std::shared_ptr<OneSixVersion> version; std::shared_ptr<ModList> loader_mod_list; diff --git a/logic/OneSixLibrary.cpp b/logic/OneSixLibrary.cpp index 9c1caaa7..df04a0c7 100644 --- a/logic/OneSixLibrary.cpp +++ b/logic/OneSixLibrary.cpp @@ -1,7 +1,24 @@ +/* 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 <QJsonArray> + #include "OneSixLibrary.h" #include "OneSixRule.h" #include "OpSys.h" -#include <QJsonArray> + void OneSixLibrary::finalize() { QStringList parts = m_name.split(':'); diff --git a/logic/OneSixLibrary.h b/logic/OneSixLibrary.h index 5e58ef89..3a772420 100644 --- a/logic/OneSixLibrary.h +++ b/logic/OneSixLibrary.h @@ -1,9 +1,26 @@ +/* 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. + */ + #pragma once + #include <QString> #include <QStringList> #include <QMap> -#include <memory> #include <QJsonObject> +#include <memory> + #include "OpSys.h" class Rule; @@ -14,7 +31,7 @@ private: // basic values used internally (so far) QString m_name; QString m_base_url = "http://s3.amazonaws.com/Minecraft.Download/libraries/"; - QList<std::shared_ptr<Rule> > m_rules; + QList<std::shared_ptr<Rule>> m_rules; // custom values /// absolute URL. takes precedence over m_download_path, if defined @@ -39,25 +56,26 @@ private: bool m_is_native = false; /// native suffixes per OS QMap<OpSys, QString> m_native_suffixes; + public: QStringList extract_excludes; - + public: /// Constructor OneSixLibrary(QString name) { m_name = name; } - + QJsonObject toJson(); - + /** * finalize the library, processing the input values into derived values and state - * + * * This SHALL be called after all the values are parsed or after any further change. */ void finalize(); - + /// Set the library composite name void setName(QString name); /// get a decent-looking name @@ -77,13 +95,13 @@ public: } /// Set the url base for downloads void setBaseUrl(QString base_url); - + /// Call this to mark the library as 'native' (it's a zip archive with DLLs) void setIsNative(); /// Attach a name suffix to the specified OS native void addNative(OpSys os, QString suffix); /// Set the load rules - void setRules(QList<std::shared_ptr<Rule> > rules); + void setRules(QList<std::shared_ptr<Rule>> rules); /// Returns true if the library should be loaded (or extracted, in case of natives) bool isActive(); diff --git a/logic/OneSixRule.cpp b/logic/OneSixRule.cpp index cb64c9ba..d35be720 100644 --- a/logic/OneSixRule.cpp +++ b/logic/OneSixRule.cpp @@ -1,7 +1,23 @@ -#include "OneSixRule.h" +/* 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 <QJsonObject> #include <QJsonArray> +#include "OneSixRule.h" + QList<std::shared_ptr<Rule>> rulesFromJsonV4(QJsonObject &objectWithRules) { QList<std::shared_ptr<Rule>> rules; diff --git a/logic/OneSixRule.h b/logic/OneSixRule.h index 6be01f1b..9cd1a226 100644 --- a/logic/OneSixRule.h +++ b/logic/OneSixRule.h @@ -1,7 +1,24 @@ +/* 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. + */ + #pragma once + #include <QString> #include <QSharedPointer> -#include "OneSixLibrary.h" + +#include "logic/OneSixLibrary.h" enum RuleAction { @@ -17,19 +34,22 @@ class Rule { protected: RuleAction m_result; - virtual bool applies(OneSixLibrary * parent) = 0; + virtual bool applies(OneSixLibrary *parent) = 0; + public: - Rule(RuleAction result) - :m_result(result) {} - virtual ~Rule(){}; + Rule(RuleAction result) : m_result(result) + { + } + virtual ~Rule() {}; virtual QJsonObject toJson() = 0; - RuleAction apply(OneSixLibrary * parent) + RuleAction apply(OneSixLibrary *parent) { - if(applies(parent)) + if (applies(parent)) return m_result; else return Defer; - }; + } + ; }; class OsRule : public Rule @@ -39,34 +59,41 @@ private: OpSys m_system; // the OS version regexp QString m_version_regexp; + protected: - virtual bool applies ( OneSixLibrary* ) + virtual bool applies(OneSixLibrary *) { return (m_system == currentSystem); } OsRule(RuleAction result, OpSys system, QString version_regexp) - : Rule(result), m_system(system), m_version_regexp(version_regexp) {} + : Rule(result), m_system(system), m_version_regexp(version_regexp) + { + } + public: virtual QJsonObject toJson(); - static std::shared_ptr<OsRule> create(RuleAction result, OpSys system, QString version_regexp) + static std::shared_ptr<OsRule> create(RuleAction result, OpSys system, + QString version_regexp) { - return std::shared_ptr<OsRule> (new OsRule(result, system, version_regexp)); + return std::shared_ptr<OsRule>(new OsRule(result, system, version_regexp)); } }; class ImplicitRule : public Rule { protected: - virtual bool applies ( OneSixLibrary* ) + virtual bool applies(OneSixLibrary *) { return true; } - ImplicitRule(RuleAction result) - : Rule(result) {} + ImplicitRule(RuleAction result) : Rule(result) + { + } + public: virtual QJsonObject toJson(); static std::shared_ptr<ImplicitRule> create(RuleAction result) { - return std::shared_ptr<ImplicitRule> (new ImplicitRule(result)); + return std::shared_ptr<ImplicitRule>(new ImplicitRule(result)); } }; diff --git a/logic/OneSixUpdate.cpp b/logic/OneSixUpdate.cpp index 5c421fbf..2d8a167c 100644 --- a/logic/OneSixUpdate.cpp +++ b/logic/OneSixUpdate.cpp @@ -12,6 +12,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #include "MultiMC.h" #include "OneSixUpdate.h" diff --git a/logic/OneSixUpdate.h b/logic/OneSixUpdate.h index 7c6fce1b..e5f553c7 100644 --- a/logic/OneSixUpdate.h +++ b/logic/OneSixUpdate.h @@ -3,7 +3,7 @@ * 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 @@ -18,10 +18,10 @@ #include <QObject> #include <QList> #include <QUrl> -#include "net/NetJob.h" -#include "tasks/Task.h" -#include "BaseUpdate.h" +#include "logic/net/NetJob.h" +#include "logic/tasks/Task.h" +#include "logic/BaseUpdate.h" class MinecraftVersion; class BaseInstance; @@ -32,22 +32,21 @@ class OneSixUpdate : public BaseUpdate public: explicit OneSixUpdate(BaseInstance *inst, QObject *parent = 0); virtual void executeTask(); - -private slots: + +private +slots: void versionFileStart(); void versionFileFinished(); void versionFileFailed(); - + void jarlibStart(); void jarlibFinished(); void jarlibFailed(); - + private: NetJobPtr specificVersionDownloadJob; NetJobPtr jarlibDownloadJob; - + // target version, determined during this task std::shared_ptr<MinecraftVersion> targetVersion; }; - - diff --git a/logic/OneSixVersion.cpp b/logic/OneSixVersion.cpp index 51958389..01bf41f4 100644 --- a/logic/OneSixVersion.cpp +++ b/logic/OneSixVersion.cpp @@ -1,9 +1,24 @@ -#include "OneSixVersion.h" -#include "OneSixLibrary.h" -#include "OneSixRule.h" +/* 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 "logic/OneSixVersion.h" +#include "logic/OneSixLibrary.h" +#include "logic/OneSixRule.h" std::shared_ptr<OneSixVersion> fromJsonV4(QJsonObject root, - std::shared_ptr<OneSixVersion> fullVersion) + std::shared_ptr<OneSixVersion> fullVersion) { fullVersion->id = root.value("id").toString(); @@ -82,7 +97,7 @@ std::shared_ptr<OneSixVersion> fromJsonV4(QJsonObject root, { library->setAbsoluteUrl(urlAbsVal.toString()); } - else if(urlAbsuVal.isString()) + else if (urlAbsuVal.isString()) { library->setAbsoluteUrl(urlAbsuVal.toString()); } @@ -167,7 +182,7 @@ std::shared_ptr<OneSixVersion> OneSixVersion::fromFile(QString filepath) } QJsonObject root = jsonDoc.object(); auto version = fromJson(root); - if(version) + if (version) version->original_file = filepath; return version; } @@ -192,11 +207,11 @@ bool OneSixVersion::toOriginalFile() // screw processArguments root.insert("releaseTime", releaseTime); QJsonArray libarray; - for(const auto & lib: libraries) + for (const auto &lib : libraries) { libarray.append(lib->toJson()); } - if(libarray.count()) + if (libarray.count()) root.insert("libraries", libarray); QJsonDocument doc(root); file.write(doc.toJson()); diff --git a/logic/OneSixVersion.h b/logic/OneSixVersion.h index 3529138c..5718dafe 100644 --- a/logic/OneSixVersion.h +++ b/logic/OneSixVersion.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QtCore> #include <memory> @@ -86,6 +101,4 @@ public: } */ // QList<Rule> rules; - - }; diff --git a/logic/OpSys.cpp b/logic/OpSys.cpp index f101fd08..e001b7f3 100644 --- a/logic/OpSys.cpp +++ b/logic/OpSys.cpp @@ -1,23 +1,42 @@ +/* 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 "OpSys.h" OpSys OpSys_fromString(QString name) { - if(name == "linux") + if (name == "linux") return Os_Linux; - if(name == "windows") + if (name == "windows") return Os_Windows; - if(name == "osx") + if (name == "osx") return Os_OSX; return Os_Other; } QString OpSys_toString(OpSys name) { - switch(name) + switch (name) { - case Os_Linux: return "linux"; - case Os_OSX: return "osx"; - case Os_Windows: return "windows"; - default: return "other"; + case Os_Linux: + return "linux"; + case Os_OSX: + return "osx"; + case Os_Windows: + return "windows"; + default: + return "other"; } }
\ No newline at end of file diff --git a/logic/OpSys.h b/logic/OpSys.h index aaa2eb65..363c87d7 100644 --- a/logic/OpSys.h +++ b/logic/OpSys.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QString> enum OpSys @@ -12,11 +27,11 @@ OpSys OpSys_fromString(QString); QString OpSys_toString(OpSys); #ifdef Q_OS_WIN32 - #define currentSystem Os_Windows +#define currentSystem Os_Windows +#else +#ifdef Q_OS_MAC +#define currentSystem Os_OSX #else - #ifdef Q_OS_MAC - #define currentSystem Os_OSX - #else - #define currentSystem Os_Linux - #endif +#define currentSystem Os_Linux +#endif #endif
\ No newline at end of file diff --git a/logic/lists/BaseVersionList.cpp b/logic/lists/BaseVersionList.cpp index 61da5eeb..6e2c5282 100644 --- a/logic/lists/BaseVersionList.cpp +++ b/logic/lists/BaseVersionList.cpp @@ -3,7 +3,7 @@ * 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 @@ -16,12 +16,11 @@ #include "logic/lists/BaseVersionList.h" #include "logic/BaseVersion.h" -BaseVersionList::BaseVersionList(QObject *parent) : - QAbstractListModel(parent) +BaseVersionList::BaseVersionList(QObject *parent) : QAbstractListModel(parent) { } -BaseVersionPtr BaseVersionList::findVersion( const QString& descriptor ) +BaseVersionPtr BaseVersionList::findVersion(const QString &descriptor) { for (int i = 0; i < count(); i++) { @@ -43,13 +42,12 @@ QVariant BaseVersionList::data(const QModelIndex &index, int role) const { if (!index.isValid()) return QVariant(); - + if (index.row() > count()) return QVariant(); - - + BaseVersionPtr version = at(index.row()); - + switch (role) { case Qt::DisplayRole: @@ -57,20 +55,20 @@ QVariant BaseVersionList::data(const QModelIndex &index, int role) const { case NameColumn: return version->name(); - + case TypeColumn: return version->typeString(); - + default: return QVariant(); } - + case Qt::ToolTipRole: return version->descriptor(); - + case VersionPointerRole: return qVariantFromValue(version); - + default: return QVariant(); } @@ -85,27 +83,27 @@ QVariant BaseVersionList::headerData(int section, Qt::Orientation orientation, i { case NameColumn: return "Name"; - + case TypeColumn: return "Type"; - + default: return QVariant(); } - + case Qt::ToolTipRole: switch (section) { case NameColumn: return "The name of the version."; - + case TypeColumn: return "The version's type."; - + default: return QVariant(); } - + default: return QVariant(); } diff --git a/logic/lists/BaseVersionList.h b/logic/lists/BaseVersionList.h index d37431ed..5ac9369b 100644 --- a/logic/lists/BaseVersionList.h +++ b/logic/lists/BaseVersionList.h @@ -3,7 +3,7 @@ * 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 @@ -25,12 +25,12 @@ class Task; /*! - * \brief Class that each instance type's version list derives from. - * Version lists are the lists that keep track of the available game versions - * for that instance. This list will not be loaded on startup. It will be loaded + * \brief Class that each instance type's version list derives from. + * Version lists are the lists that keep track of the available game versions + * for that instance. This list will not be loaded on startup. It will be loaded * when the list's load function is called. Before using the version list, you * should check to see if it has been loaded yet and if not, load the list. - * + * * Note that this class also inherits from QAbstractListModel. Methods from that * class determine how this version list shows up in a list view. Said methods * all have a default implementation, but they can be overridden by plugins to @@ -44,21 +44,21 @@ public: { VersionPointerRole = 0x34B1CB48 }; - + enum VListColumns { // First column - Name NameColumn = 0, - + // Second column - Type TypeColumn, - + // Third column - Timestamp TimeColumn }; - + explicit BaseVersionList(QObject *parent = 0); - + /*! * \brief Gets a task that will reload the version list. * Simply execute the task to load the list. @@ -66,24 +66,23 @@ public: * \return A pointer to a task that reloads the version list. */ virtual Task *getLoadTask() = 0; - - //! Checks whether or not the list is loaded. If this returns false, the list should be loaded. + + //! Checks whether or not the list is loaded. If this returns false, the list should be + //loaded. virtual bool isLoaded() = 0; - + //! Gets the version at the given index. virtual const BaseVersionPtr at(int i) const = 0; - + //! Returns the number of versions in the list. virtual int count() const = 0; - - + //////// List Model Functions //////// virtual QVariant data(const QModelIndex &index, int role) const; virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; virtual int rowCount(const QModelIndex &parent) const; virtual int columnCount(const QModelIndex &parent) const; - - + /*! * \brief Finds a version by its descriptor. * \param The descriptor of the version to find. @@ -91,20 +90,21 @@ public: * one doesn't exist. */ virtual BaseVersionPtr findVersion(const QString &descriptor); - + /*! * \brief Gets the latest stable version of this instance type. * This is the version that will be selected by default. * By default, this is simply the first version in the list. */ virtual BaseVersionPtr getLatestStable() const; - + /*! * Sorts the version list. */ virtual void sort() = 0; - -protected slots: + +protected +slots: /*! * Updates this list with the given list of versions. * This is done by copying each version in the given list and inserting it @@ -117,5 +117,5 @@ protected slots: * then copies the versions and sets their parents correctly. * \param versions List of versions whose parents should be set. */ - virtual void updateListData(QList<BaseVersionPtr > versions) = 0; + virtual void updateListData(QList<BaseVersionPtr> versions) = 0; }; diff --git a/logic/lists/ForgeVersionList.cpp b/logic/lists/ForgeVersionList.cpp index 27f567cd..b5e421af 100644 --- a/logic/lists/ForgeVersionList.cpp +++ b/logic/lists/ForgeVersionList.cpp @@ -21,7 +21,7 @@ #include <QtXml> #include <QRegExp> -#include <logger/QsLog.h> +#include "logger/QsLog.h" #define JSON_URL "http://files.minecraftforge.net/minecraftforge/json" diff --git a/logic/lists/ForgeVersionList.h b/logic/lists/ForgeVersionList.h index 52593f94..0d10e1f3 100644 --- a/logic/lists/ForgeVersionList.h +++ b/logic/lists/ForgeVersionList.h @@ -75,8 +75,7 @@ public: virtual BaseVersionPtr getLatestStable() const; virtual QVariant data(const QModelIndex &index, int role) const; - virtual QVariant headerData(int section, Qt::Orientation orientation, - int role) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; virtual int columnCount(const QModelIndex &parent) const; protected: diff --git a/logic/lists/IconList.cpp b/logic/lists/IconList.cpp index 6988d02f..ecfb8c3c 100644 --- a/logic/lists/IconList.cpp +++ b/logic/lists/IconList.cpp @@ -1,3 +1,18 @@ +/* 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 "IconList.h" #include <pathutils.h> #include <QMap> @@ -27,22 +42,21 @@ public: } }; - IconList::IconList() : QAbstractListModel(), d(new Private()) { QDir instance_icons(":/icons/instances/"); auto file_info_list = instance_icons.entryInfoList(QDir::Files, QDir::Name); - for(auto file_info: file_info_list) + for (auto file_info : file_info_list) { QString key = file_info.baseName(); addIcon(key, key, file_info.absoluteFilePath(), true); } - + // FIXME: get from settings ensureFolderPathExists("icons"); QDir user_icons("icons"); file_info_list = user_icons.entryInfoList(QDir::Files, QDir::Name); - for(auto file_info: file_info_list) + for (auto file_info : file_info_list) { QString filename = file_info.absoluteFilePath(); QString key = file_info.baseName(); @@ -67,16 +81,17 @@ Qt::DropActions IconList::supportedDropActions() const return Qt::CopyAction; } -bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ) +bool IconList::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, + const QModelIndex &parent) { if (action == Qt::IgnoreAction) - return true; + return true; // check if the action is supported if (!data || !(action & supportedDropActions())) return false; // files dropped from outside? - if(data->hasUrls()) + if (data->hasUrls()) { /* bool was_watching = is_watching; @@ -85,10 +100,10 @@ bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int */ auto urls = data->urls(); QStringList iconFiles; - for(auto url: urls) + for (auto url : urls) { // only local files may be dropped... - if(!url.isLocalFile()) + if (!url.isLocalFile()) continue; iconFiles += url.toLocalFile(); } @@ -102,73 +117,73 @@ bool IconList::dropMimeData ( const QMimeData* data, Qt::DropAction action, int return false; } -Qt::ItemFlags IconList::flags ( const QModelIndex& index ) const +Qt::ItemFlags IconList::flags(const QModelIndex &index) const { - Qt::ItemFlags defaultFlags = QAbstractListModel::flags ( index ); + Qt::ItemFlags defaultFlags = QAbstractListModel::flags(index); if (index.isValid()) return Qt::ItemIsDropEnabled | defaultFlags; else return Qt::ItemIsDropEnabled | defaultFlags; } -QVariant IconList::data ( const QModelIndex& index, int role ) const +QVariant IconList::data(const QModelIndex &index, int role) const { - if(!index.isValid()) + if (!index.isValid()) return QVariant(); - + int row = index.row(); - - if(row < 0 || row >= d->icons.size()) + + if (row < 0 || row >= d->icons.size()) return QVariant(); - - switch(role) + + switch (role) { - case Qt::DecorationRole: - return d->icons[row].icon; - case Qt::DisplayRole: - return d->icons[row].name; - case Qt::UserRole: - return d->icons[row].key; - default: - return QVariant(); + case Qt::DecorationRole: + return d->icons[row].icon; + case Qt::DisplayRole: + return d->icons[row].name; + case Qt::UserRole: + return d->icons[row].key; + default: + return QVariant(); } } -int IconList::rowCount ( const QModelIndex& parent ) const +int IconList::rowCount(const QModelIndex &parent) const { return d->icons.size(); } -void IconList::installIcons ( QStringList iconFiles ) +void IconList::installIcons(QStringList iconFiles) { - for(QString file: iconFiles) + for (QString file : iconFiles) { QFileInfo fileinfo(file); - if(!fileinfo.isReadable() || !fileinfo.isFile()) + if (!fileinfo.isReadable() || !fileinfo.isFile()) continue; QString target = PathCombine("icons", fileinfo.fileName()); - + QString suffix = fileinfo.suffix(); - if(suffix != "jpeg" && suffix != "png" && suffix != "jpg") + if (suffix != "jpeg" && suffix != "png" && suffix != "jpg") continue; - - if(!QFile::copy(file, target)) + + if (!QFile::copy(file, target)) continue; - + QString key = fileinfo.baseName(); addIcon(key, key, target); } } -bool IconList::deleteIcon ( QString key ) +bool IconList::deleteIcon(QString key) { int iconIdx = getIconIndex(key); - if(iconIdx == -1) + if (iconIdx == -1) return false; - auto & iconEntry = d->icons[iconIdx]; - if(iconEntry.is_builtin) + auto &iconEntry = d->icons[iconIdx]; + if (iconEntry.is_builtin) return false; - if(QFile::remove(iconEntry.filename)) + if (QFile::remove(iconEntry.filename)) { beginRemoveRows(QModelIndex(), iconIdx, iconIdx); d->icons.remove(iconIdx); @@ -178,35 +193,36 @@ bool IconList::deleteIcon ( QString key ) return true; } -bool IconList::addIcon ( QString key, QString name, QString path, bool is_builtin ) +bool IconList::addIcon(QString key, QString name, QString path, bool is_builtin) { auto iter = d->index.find(key); - if(iter != d->index.end()) + if (iter != d->index.end()) { - if(d->icons[*iter].is_builtin) + if (d->icons[*iter].is_builtin) return false; - + QIcon icon(path); - if(icon.isNull()) + if (icon.isNull()) return false; - - auto & oldOne = d->icons[*iter]; - - if(!QFile::remove(oldOne.filename)) + + auto &oldOne = d->icons[*iter]; + + if (!QFile::remove(oldOne.filename)) return false; // replace the icon oldOne = {key, name, icon, is_builtin, path}; - dataChanged(index(*iter),index(*iter)); + dataChanged(index(*iter), index(*iter)); return true; } else { QIcon icon(path); - if(icon.isNull()) return false; - + if (icon.isNull()) + return false; + // add a new icon - beginInsertRows(QModelIndex(), d->icons.size(),d->icons.size()); + beginInsertRows(QModelIndex(), d->icons.size(), d->icons.size()); d->icons.push_back({key, name, icon, is_builtin, path}); d->index[key] = d->icons.size() - 1; endInsertRows(); @@ -218,39 +234,37 @@ void IconList::reindex() { d->index.clear(); int i = 0; - for(auto& iter: d->icons) + for (auto &iter : d->icons) { d->index[iter.key] = i; i++; } } - -QIcon IconList::getIcon ( QString key ) +QIcon IconList::getIcon(QString key) { int icon_index = getIconIndex(key); - if(icon_index != -1) + if (icon_index != -1) return d->icons[icon_index].icon; - + // Fallback for icons that don't exist. icon_index = getIconIndex("infinity"); - - if(icon_index != -1) + + if (icon_index != -1) return d->icons[icon_index].icon; return QIcon(); } -int IconList::getIconIndex ( QString key ) +int IconList::getIconIndex(QString key) { - if(key == "default") + if (key == "default") key = "infinity"; - + auto iter = d->index.find(key); - if(iter != d->index.end()) + if (iter != d->index.end()) return *iter; - - + return -1; } diff --git a/logic/lists/IconList.h b/logic/lists/IconList.h index cad80cdf..40ad043b 100644 --- a/logic/lists/IconList.h +++ b/logic/lists/IconList.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QMutex> @@ -11,28 +26,29 @@ class IconList : public QAbstractListModel public: IconList(); virtual ~IconList(); - - QIcon getIcon ( QString key ); - int getIconIndex ( QString key ); - - virtual QVariant data ( const QModelIndex& index, int role = Qt::DisplayRole ) const; - virtual int rowCount ( const QModelIndex& parent = QModelIndex() ) const; - + + QIcon getIcon(QString key); + int getIconIndex(QString key); + + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + bool addIcon(QString key, QString name, QString path, bool is_builtin = false); bool deleteIcon(QString key); - + virtual QStringList mimeTypes() const; virtual Qt::DropActions supportedDropActions() const; - virtual bool dropMimeData ( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent ); - virtual Qt::ItemFlags flags ( const QModelIndex& index ) const; - - void installIcons ( QStringList iconFiles ); - + virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, + const QModelIndex &parent); + virtual Qt::ItemFlags flags(const QModelIndex &index) const; + + void installIcons(QStringList iconFiles); + private: // hide copy constructor - IconList ( const IconList & ) = delete; + IconList(const IconList &) = delete; // hide assign op - IconList& operator= ( const IconList & ) = delete; + IconList &operator=(const IconList &) = delete; void reindex(); - Private* d; + Private *d; }; diff --git a/logic/lists/InstanceList.cpp b/logic/lists/InstanceList.cpp index b42d7b7a..4446ff22 100644 --- a/logic/lists/InstanceList.cpp +++ b/logic/lists/InstanceList.cpp @@ -29,7 +29,7 @@ #include "logic/lists/IconList.h" #include "logic/BaseInstance.h" #include "logic/InstanceFactory.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" const static int GROUP_FILE_FORMAT_VERSION = 1; @@ -423,7 +423,7 @@ bool InstanceProxyModel::subSortLessThan(const QModelIndex &left, BaseInstance *pdataLeft = static_cast<BaseInstance *>(left.internalPointer()); BaseInstance *pdataRight = static_cast<BaseInstance *>(right.internalPointer()); QString sortMode = MMC->settings()->get("InstSortMode").toString(); - if(sortMode == "LastLaunch") + if (sortMode == "LastLaunch") { return pdataLeft->lastLaunch() > pdataRight->lastLaunch(); } diff --git a/logic/lists/InstanceList.h b/logic/lists/InstanceList.h index 3cde6bf5..c3e3561d 100644 --- a/logic/lists/InstanceList.h +++ b/logic/lists/InstanceList.h @@ -98,7 +98,7 @@ signals: public slots: - void on_InstFolderChanged(const Setting & setting, QVariant value); + void on_InstFolderChanged(const Setting &setting, QVariant value); private slots: diff --git a/logic/lists/JavaVersionList.cpp b/logic/lists/JavaVersionList.cpp index 5389c4cc..3dc1969b 100644 --- a/logic/lists/JavaVersionList.cpp +++ b/logic/lists/JavaVersionList.cpp @@ -20,7 +20,7 @@ #include <QtXml> #include <QRegExp> -#include <logger/QsLog.h> +#include "logger/QsLog.h" #include <logic/JavaUtils.h> JavaVersionList::JavaVersionList(QObject *parent) : BaseVersionList(parent) @@ -32,7 +32,6 @@ Task *JavaVersionList::getLoadTask() return new JavaListLoadTask(this); } - const BaseVersionPtr JavaVersionList::at(int i) const { return m_vlist.at(i); @@ -187,11 +186,11 @@ void JavaListLoadTask::executeTask() QList<JavaVersionPtr> javas = ju.FindJavaPaths(); QList<BaseVersionPtr> javas_bvp; - for(int i = 0; i < javas.length(); i++) + for (int i = 0; i < javas.length(); i++) { BaseVersionPtr java = std::dynamic_pointer_cast<BaseVersion>(javas.at(i)); - if(java) + if (java) { javas_bvp.append(java); } diff --git a/logic/lists/JavaVersionList.h b/logic/lists/JavaVersionList.h index 23bccfe4..4826ca0c 100644 --- a/logic/lists/JavaVersionList.h +++ b/logic/lists/JavaVersionList.h @@ -64,11 +64,11 @@ public: virtual BaseVersionPtr getTopRecommended() const; virtual QVariant data(const QModelIndex &index, int role) const; - virtual QVariant headerData(int section, Qt::Orientation orientation, - int role) const; + virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; virtual int columnCount(const QModelIndex &parent) const; -public slots: +public +slots: virtual void updateListData(QList<BaseVersionPtr> versions); protected: diff --git a/logic/lists/LwjglVersionList.cpp b/logic/lists/LwjglVersionList.cpp index 6bf401ec..3333e86c 100644 --- a/logic/lists/LwjglVersionList.cpp +++ b/logic/lists/LwjglVersionList.cpp @@ -20,7 +20,7 @@ #include <QtXml> #include <QRegExp> -#include <logger/QsLog.h> +#include "logger/QsLog.h" #define RSS_URL "http://sourceforge.net/api/file/index/project-id/58488/mtime/desc/rss" diff --git a/logic/lists/LwjglVersionList.h b/logic/lists/LwjglVersionList.h index 99712292..fa57e8eb 100644 --- a/logic/lists/LwjglVersionList.h +++ b/logic/lists/LwjglVersionList.h @@ -3,7 +3,7 @@ * 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 @@ -28,20 +28,30 @@ typedef std::shared_ptr<LWJGLVersion> PtrLWJGLVersion; class LWJGLVersion : public QObject { Q_OBJECT - - LWJGLVersion(const QString &name, const QString &url, QObject *parent = 0) : - QObject(parent), m_name(name), m_url(url) { } + + LWJGLVersion(const QString &name, const QString &url, QObject *parent = 0) + : QObject(parent), m_name(name), m_url(url) + { + } + public: - + static PtrLWJGLVersion Create(const QString &name, const QString &url, QObject *parent = 0) { return PtrLWJGLVersion(new LWJGLVersion(name, url, parent)); - }; - - QString name() const { return m_name; } - - QString url() const { return m_url; } - + } + ; + + QString name() const + { + return m_name; + } + + QString url() const + { + return m_url; + } + protected: QString m_name; QString m_url; @@ -52,64 +62,87 @@ class LWJGLVersionList : public QAbstractListModel Q_OBJECT public: explicit LWJGLVersionList(QObject *parent = 0); - - bool isLoaded() { return m_vlist.length() > 0; } - + + bool isLoaded() + { + return m_vlist.length() > 0; + } + const PtrLWJGLVersion getVersion(const QString &versionName); - PtrLWJGLVersion at(int index) { return m_vlist[index]; } - const PtrLWJGLVersion at(int index) const { return m_vlist[index]; } - - int count() const { return m_vlist.length(); } - + PtrLWJGLVersion at(int index) + { + return m_vlist[index]; + } + const PtrLWJGLVersion at(int index) const + { + return m_vlist[index]; + } + + int count() const + { + return m_vlist.length(); + } + virtual QVariant data(const QModelIndex &index, int role) const; virtual QVariant headerData(int section, Qt::Orientation orientation, int role) const; - virtual int rowCount(const QModelIndex &parent) const { return count(); } + virtual int rowCount(const QModelIndex &parent) const + { + return count(); + } virtual int columnCount(const QModelIndex &parent) const; - + virtual bool isLoading() const; - virtual bool errored() const { return m_errored; } - - virtual QString lastErrorMsg() const { return m_lastErrorMsg; } - -public slots: + virtual bool errored() const + { + return m_errored; + } + + virtual QString lastErrorMsg() const + { + return m_lastErrorMsg; + } + +public +slots: /*! * Loads the version list. * This is done asynchronously. On success, the loadListFinished() signal will - * be emitted. The list model will be reset as well, resulting in the modelReset() - * signal being emitted. Note that the model will be reset before loadListFinished() is emitted. + * be emitted. The list model will be reset as well, resulting in the modelReset() + * signal being emitted. Note that the model will be reset before loadListFinished() is + * emitted. * If loading the list failed, the loadListFailed(QString msg), * signal will be emitted. */ virtual void loadList(); - + signals: /*! * Emitted when the list either starts or finishes loading. * \param loading Whether or not the list is loading. */ void loadingStateUpdated(bool loading); - + void loadListFinished(); - + void loadListFailed(QString msg); - + private: QList<PtrLWJGLVersion> m_vlist; - + QNetworkReply *m_netReply; QNetworkReply *reply; - + bool m_loading; bool m_errored; QString m_lastErrorMsg; - + void failed(QString msg); - + void finished(); - + void setLoading(bool loading); - -private slots: + +private +slots: virtual void netRequestComplete(); }; - diff --git a/logic/lists/MinecraftVersionList.cpp b/logic/lists/MinecraftVersionList.cpp index dd26714a..2a9c0d3b 100644 --- a/logic/lists/MinecraftVersionList.cpp +++ b/logic/lists/MinecraftVersionList.cpp @@ -1,4 +1,4 @@ -/* Copyright 2013 Andrew Okin +/* 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. @@ -14,7 +14,7 @@ */ #include "MinecraftVersionList.h" -#include <MultiMC.h> +#include "MultiMC.h" #include <QtXml> diff --git a/logic/lists/MinecraftVersionList.h b/logic/lists/MinecraftVersionList.h index ed68efbb..90b1ae86 100644 --- a/logic/lists/MinecraftVersionList.h +++ b/logic/lists/MinecraftVersionList.h @@ -1,9 +1,9 @@ -/* Copyright 2013 Andrew Okin +/* 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 @@ -32,43 +32,44 @@ class MinecraftVersionList : public BaseVersionList Q_OBJECT public: friend class MCVListLoadTask; - + explicit MinecraftVersionList(QObject *parent = 0); - + virtual Task *getLoadTask(); virtual bool isLoaded(); virtual const BaseVersionPtr at(int i) const; virtual int count() const; virtual void sort(); - + virtual BaseVersionPtr getLatestStable() const; - + protected: QList<BaseVersionPtr> m_vlist; - + bool m_loaded = false; - -protected slots: + +protected +slots: virtual void updateListData(QList<BaseVersionPtr> versions); }; class MCVListLoadTask : public Task { Q_OBJECT - + public: explicit MCVListLoadTask(MinecraftVersionList *vlist); ~MCVListLoadTask(); - + virtual void executeTask(); - -protected slots: + +protected +slots: void list_downloaded(); - + protected: QNetworkReply *vlistReply; MinecraftVersionList *m_list; MinecraftVersion *m_currentStable; QSet<QString> legacyWhitelist; }; - diff --git a/logic/net/ByteArrayDownload.cpp b/logic/net/ByteArrayDownload.cpp index 25e6d51a..af5af8e9 100644 --- a/logic/net/ByteArrayDownload.cpp +++ b/logic/net/ByteArrayDownload.cpp @@ -1,6 +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. + */ + #include "ByteArrayDownload.h" #include "MultiMC.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" ByteArrayDownload::ByteArrayDownload(QUrl url) : NetAction() { diff --git a/logic/net/ByteArrayDownload.h b/logic/net/ByteArrayDownload.h index fc32dc04..0d90abc2 100644 --- a/logic/net/ByteArrayDownload.h +++ b/logic/net/ByteArrayDownload.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "NetAction.h" diff --git a/logic/net/CacheDownload.cpp b/logic/net/CacheDownload.cpp index f8769576..4fe4e68e 100644 --- a/logic/net/CacheDownload.cpp +++ b/logic/net/CacheDownload.cpp @@ -1,3 +1,18 @@ +/* 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 "MultiMC.h" #include "CacheDownload.h" #include <pathutils.h> @@ -5,7 +20,7 @@ #include <QCryptographicHash> #include <QFileInfo> #include <QDateTime> -#include <logger/QsLog.h> +#include "logger/QsLog.h" CacheDownload::CacheDownload(QUrl url, MetaEntryPtr entry) : NetAction(), md5sum(QCryptographicHash::Md5) @@ -33,12 +48,13 @@ void CacheDownload::start() } QLOG_INFO() << "Downloading " << m_url.toString(); QNetworkRequest request(m_url); - if(m_entry->remote_changed_timestamp.size()) - request.setRawHeader(QString("If-Modified-Since").toLatin1(), m_entry->remote_changed_timestamp.toLatin1()); - if(m_entry->etag.size()) + if (m_entry->remote_changed_timestamp.size()) + request.setRawHeader(QString("If-Modified-Since").toLatin1(), + m_entry->remote_changed_timestamp.toLatin1()); + if (m_entry->etag.size()) request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->etag.toLatin1()); - request.setHeader(QNetworkRequest::UserAgentHeader,"MultiMC/5.0 (Cached)"); + request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Cached)"); auto worker = MMC->qnam(); QNetworkReply *rep = worker->get(request); @@ -91,7 +107,7 @@ void CacheDownload::downloadFinished() QFileInfo output_file_info(m_target_path); m_entry->etag = m_reply->rawHeader("ETag").constData(); - if(m_reply->hasRawHeader("Last-Modified")) + if (m_reply->hasRawHeader("Last-Modified")) { m_entry->remote_changed_timestamp = m_reply->rawHeader("Last-Modified").constData(); } diff --git a/logic/net/CacheDownload.h b/logic/net/CacheDownload.h index 1e70874c..2b9a5dd8 100644 --- a/logic/net/CacheDownload.h +++ b/logic/net/CacheDownload.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "NetAction.h" diff --git a/logic/net/FileDownload.cpp b/logic/net/FileDownload.cpp index eefdd4da..6b2aa66f 100644 --- a/logic/net/FileDownload.cpp +++ b/logic/net/FileDownload.cpp @@ -1,12 +1,25 @@ +/* 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 "MultiMC.h" #include "FileDownload.h" #include <pathutils.h> #include <QCryptographicHash> -#include <logger/QsLog.h> - +#include "logger/QsLog.h" -FileDownload::FileDownload ( QUrl url, QString target_path ) - :NetAction() +FileDownload::FileDownload(QUrl url, QString target_path) : NetAction() { m_url = url; m_target_path = target_path; @@ -18,15 +31,18 @@ FileDownload::FileDownload ( QUrl url, QString target_path ) void FileDownload::start() { QString filename = m_target_path; - m_output_file.setFileName ( filename ); + m_output_file.setFileName(filename); // if there already is a file and md5 checking is in effect and it can be opened - if ( m_output_file.exists() && m_output_file.open ( QIODevice::ReadOnly ) ) + if (m_output_file.exists() && m_output_file.open(QIODevice::ReadOnly)) { // check the md5 against the expected one - QString hash = QCryptographicHash::hash ( m_output_file.readAll(), QCryptographicHash::Md5 ).toHex().constData(); + QString hash = + QCryptographicHash::hash(m_output_file.readAll(), QCryptographicHash::Md5) + .toHex() + .constData(); m_output_file.close(); // skip this file if they match - if ( m_check_md5 && hash == m_expected_md5 ) + if (m_check_md5 && hash == m_expected_md5) { QLOG_INFO() << "Skipping " << m_url.toString() << ": md5 match."; emit succeeded(index_within_job); @@ -37,33 +53,35 @@ void FileDownload::start() m_expected_md5 = hash; } } - if(!ensureFilePathExists(filename)) + if (!ensureFilePathExists(filename)) { emit failed(index_within_job); return; } - + QLOG_INFO() << "Downloading " << m_url.toString(); - QNetworkRequest request ( m_url ); - request.setRawHeader(QString("If-None-Match").toLatin1(), m_expected_md5.toLatin1()); - request.setHeader(QNetworkRequest::UserAgentHeader,"MultiMC/5.0 (Uncached)"); - + QNetworkRequest request(m_url); + request.setRawHeader(QString("If-None-Match").toLatin1(), m_expected_md5.toLatin1()); + request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Uncached)"); + auto worker = MMC->qnam(); - QNetworkReply * rep = worker->get ( request ); - - m_reply = std::shared_ptr<QNetworkReply> ( rep ); - connect ( rep, SIGNAL ( downloadProgress ( qint64,qint64 ) ), SLOT ( downloadProgress ( qint64,qint64 ) ) ); - connect ( rep, SIGNAL ( finished() ), SLOT ( downloadFinished() ) ); - connect ( rep, SIGNAL ( error ( QNetworkReply::NetworkError ) ), SLOT ( downloadError ( QNetworkReply::NetworkError ) ) ); - connect ( rep, SIGNAL ( readyRead() ), SLOT ( downloadReadyRead() ) ); + QNetworkReply *rep = worker->get(request); + + m_reply = std::shared_ptr<QNetworkReply>(rep); + connect(rep, SIGNAL(downloadProgress(qint64, qint64)), + SLOT(downloadProgress(qint64, qint64))); + connect(rep, SIGNAL(finished()), SLOT(downloadFinished())); + connect(rep, SIGNAL(error(QNetworkReply::NetworkError)), + SLOT(downloadError(QNetworkReply::NetworkError))); + connect(rep, SIGNAL(readyRead()), SLOT(downloadReadyRead())); } -void FileDownload::downloadProgress ( qint64 bytesReceived, qint64 bytesTotal ) +void FileDownload::downloadProgress(qint64 bytesReceived, qint64 bytesTotal) { - emit progress (index_within_job, bytesReceived, bytesTotal ); + emit progress(index_within_job, bytesReceived, bytesTotal); } -void FileDownload::downloadError ( QNetworkReply::NetworkError error ) +void FileDownload::downloadError(QNetworkReply::NetworkError error) { // error happened during download. // TODO: log the reason why @@ -73,7 +91,7 @@ void FileDownload::downloadError ( QNetworkReply::NetworkError error ) void FileDownload::downloadFinished() { // if the download succeeded - if ( m_status != Job_Failed ) + if (m_status != Job_Failed) { // nothing went wrong... m_status = Job_Finished; @@ -95,9 +113,9 @@ void FileDownload::downloadFinished() void FileDownload::downloadReadyRead() { - if(!m_opened_for_saving) + if (!m_opened_for_saving) { - if ( !m_output_file.open ( QIODevice::WriteOnly ) ) + if (!m_output_file.open(QIODevice::WriteOnly)) { /* * Can't open the file... the job failed @@ -108,5 +126,5 @@ void FileDownload::downloadReadyRead() } m_opened_for_saving = true; } - m_output_file.write ( m_reply->readAll() ); + m_output_file.write(m_reply->readAll()); } diff --git a/logic/net/FileDownload.h b/logic/net/FileDownload.h index 5f72587f..31e0259c 100644 --- a/logic/net/FileDownload.h +++ b/logic/net/FileDownload.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "NetAction.h" diff --git a/logic/net/ForgeXzDownload.cpp b/logic/net/ForgeXzDownload.cpp index 20279d99..6c9d7a60 100644 --- a/logic/net/ForgeXzDownload.cpp +++ b/logic/net/ForgeXzDownload.cpp @@ -1,3 +1,18 @@ +/* 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 "MultiMC.h" #include "ForgeXzDownload.h" #include <pathutils.h> @@ -5,10 +20,9 @@ #include <QCryptographicHash> #include <QFileInfo> #include <QDateTime> -#include <logger/QsLog.h> +#include "logger/QsLog.h" -ForgeXzDownload::ForgeXzDownload(QUrl url, MetaEntryPtr entry) - : NetAction() +ForgeXzDownload::ForgeXzDownload(QUrl url, MetaEntryPtr entry) : NetAction() { QString urlstr = url.toString(); urlstr.append(".pack.xz"); @@ -35,7 +49,7 @@ void ForgeXzDownload::start() QLOG_INFO() << "Downloading " << m_url.toString(); QNetworkRequest request(m_url); request.setRawHeader(QString("If-None-Match").toLatin1(), m_entry->etag.toLatin1()); - request.setHeader(QNetworkRequest::UserAgentHeader,"MultiMC/5.0 (Cached)"); + request.setHeader(QNetworkRequest::UserAgentHeader, "MultiMC/5.0 (Cached)"); auto worker = MMC->qnam(); QNetworkReply *rep = worker->get(request); @@ -96,7 +110,7 @@ void ForgeXzDownload::downloadFinished() void ForgeXzDownload::downloadReadyRead() { - + if (!m_opened_for_saving) { if (!m_pack200_xz_file.open()) @@ -154,7 +168,7 @@ void ForgeXzDownload::decompressAndInstall() { if (b.in_pos == b.in_size) { - b.in_size = m_pack200_xz_file.read((char*)in, sizeof(in)); + b.in_size = m_pack200_xz_file.read((char *)in, sizeof(in)); b.in_pos = 0; } @@ -162,7 +176,7 @@ void ForgeXzDownload::decompressAndInstall() if (b.out_pos == sizeof(out)) { - if (pack200_file.write((char*)out, b.out_pos) != b.out_pos) + if (pack200_file.write((char *)out, b.out_pos) != b.out_pos) { // msg = "Write error\n"; xz_dec_end(s); @@ -182,7 +196,7 @@ void ForgeXzDownload::decompressAndInstall() continue; } - if (pack200_file.write((char*)out, b.out_pos) != b.out_pos ) + if (pack200_file.write((char *)out, b.out_pos) != b.out_pos) { // write error pack200_file.close(); @@ -236,7 +250,7 @@ void ForgeXzDownload::decompressAndInstall() } } } - + // revert pack200 pack200_file.close(); QString pack_name = pack200_file.fileName(); @@ -244,16 +258,16 @@ void ForgeXzDownload::decompressAndInstall() { unpack_200(pack_name.toStdString(), m_target_path.toStdString()); } - catch(std::runtime_error & err) + catch (std::runtime_error &err) { QLOG_ERROR() << "Error unpacking " << pack_name.toUtf8() << " : " << err.what(); QFile f(m_target_path); - if(f.exists()) + if (f.exists()) f.remove(); emit failed(index_within_job); return; } - + QFile jar_file(m_target_path); if (!jar_file.open(QIODevice::ReadOnly)) @@ -263,10 +277,10 @@ void ForgeXzDownload::decompressAndInstall() return; } m_entry->md5sum = QCryptographicHash::hash(jar_file.readAll(), QCryptographicHash::Md5) - .toHex() - .constData(); + .toHex() + .constData(); jar_file.close(); - + QFileInfo output_file_info(m_target_path); m_entry->etag = m_reply->rawHeader("ETag").constData(); m_entry->local_changed_timestamp = diff --git a/logic/net/ForgeXzDownload.h b/logic/net/ForgeXzDownload.h index 0b73711e..9f1bb029 100644 --- a/logic/net/ForgeXzDownload.h +++ b/logic/net/ForgeXzDownload.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "NetAction.h" diff --git a/logic/net/HttpMetaCache.cpp b/logic/net/HttpMetaCache.cpp index 5ba5b98d..29007951 100644 --- a/logic/net/HttpMetaCache.cpp +++ b/logic/net/HttpMetaCache.cpp @@ -1,3 +1,18 @@ +/* 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 "MultiMC.h" #include "HttpMetaCache.h" #include <pathutils.h> @@ -9,7 +24,7 @@ #include <QDateTime> #include <QCryptographicHash> -#include <logger/QsLog.h> +#include "logger/QsLog.h" #include <QJsonDocument> #include <QJsonArray> @@ -20,14 +35,12 @@ QString MetaEntry::getFullPath() return PathCombine(MMC->metacache()->getBasePath(base), path); } - -HttpMetaCache::HttpMetaCache(QString path) - :QObject() +HttpMetaCache::HttpMetaCache(QString path) : QObject() { m_index_file = path; saveBatchingTimer.setSingleShot(true); saveBatchingTimer.setTimerType(Qt::VeryCoarseTimer); - connect(&saveBatchingTimer,SIGNAL(timeout()),SLOT(SaveNow())); + connect(&saveBatchingTimer, SIGNAL(timeout()), SLOT(SaveNow())); } HttpMetaCache::~HttpMetaCache() @@ -36,58 +49,61 @@ HttpMetaCache::~HttpMetaCache() SaveNow(); } -MetaEntryPtr HttpMetaCache::getEntry ( QString base, QString resource_path ) +MetaEntryPtr HttpMetaCache::getEntry(QString base, QString resource_path) { // no base. no base path. can't store - if(!m_entries.contains(base)) + if (!m_entries.contains(base)) { // TODO: log problem return MetaEntryPtr(); } - EntryMap & map = m_entries[base]; - if(map.entry_list.contains(resource_path)) + EntryMap &map = m_entries[base]; + if (map.entry_list.contains(resource_path)) { return map.entry_list[resource_path]; } return MetaEntryPtr(); } -MetaEntryPtr HttpMetaCache::resolveEntry ( QString base, QString resource_path, QString expected_etag ) +MetaEntryPtr HttpMetaCache::resolveEntry(QString base, QString resource_path, + QString expected_etag) { auto entry = getEntry(base, resource_path); // it's not present? generate a default stale entry - if(!entry) + if (!entry) { return staleEntry(base, resource_path); } - - auto & selected_base = m_entries[base]; + + auto &selected_base = m_entries[base]; QString real_path = PathCombine(selected_base.base_path, resource_path); QFileInfo finfo(real_path); - + // is the file really there? if not -> stale - if(!finfo.isFile() || !finfo.isReadable()) + if (!finfo.isFile() || !finfo.isReadable()) { // if the file doesn't exist, we disown the entry selected_base.entry_list.remove(resource_path); return staleEntry(base, resource_path); } - - if(!expected_etag.isEmpty() && expected_etag != entry->etag) + + if (!expected_etag.isEmpty() && expected_etag != entry->etag) { // if the etag doesn't match expected, we disown the entry selected_base.entry_list.remove(resource_path); return staleEntry(base, resource_path); } - + // if the file changed, check md5sum qint64 file_last_changed = finfo.lastModified().toUTC().toMSecsSinceEpoch(); - if(file_last_changed != entry->local_changed_timestamp) + if (file_last_changed != entry->local_changed_timestamp) { QFile input(real_path); input.open(QIODevice::ReadOnly); - QString md5sum = QCryptographicHash::hash(input.readAll(), QCryptographicHash::Md5).toHex().constData(); - if(entry->md5sum != md5sum) + QString md5sum = QCryptographicHash::hash(input.readAll(), QCryptographicHash::Md5) + .toHex() + .constData(); + if (entry->md5sum != md5sum) { selected_base.entry_list.remove(resource_path); return staleEntry(base, resource_path); @@ -101,14 +117,15 @@ MetaEntryPtr HttpMetaCache::resolveEntry ( QString base, QString resource_path, return entry; } -bool HttpMetaCache::updateEntry ( MetaEntryPtr stale_entry ) +bool HttpMetaCache::updateEntry(MetaEntryPtr stale_entry) { - if(!m_entries.contains(stale_entry->base)) + if (!m_entries.contains(stale_entry->base)) { - QLOG_ERROR() << "Cannot add entry with unknown base: " << stale_entry->base.toLocal8Bit(); + QLOG_ERROR() << "Cannot add entry with unknown base: " + << stale_entry->base.toLocal8Bit(); return false; } - if(stale_entry->stale) + if (stale_entry->stale) { QLOG_ERROR() << "Cannot add stale entry: " << stale_entry->getFullPath().toLocal8Bit(); return false; @@ -127,10 +144,10 @@ MetaEntryPtr HttpMetaCache::staleEntry(QString base, QString resource_path) return MetaEntryPtr(foo); } -void HttpMetaCache::addBase ( QString base, QString base_root ) +void HttpMetaCache::addBase(QString base, QString base_root) { // TODO: report error - if(m_entries.contains(base)) + if (m_entries.contains(base)) return; // TODO: check if the base path is valid EntryMap foo; @@ -138,57 +155,57 @@ void HttpMetaCache::addBase ( QString base, QString base_root ) m_entries[base] = foo; } -QString HttpMetaCache::getBasePath ( QString base ) +QString HttpMetaCache::getBasePath(QString base) { - if(m_entries.contains(base)) + if (m_entries.contains(base)) { return m_entries[base].base_path; } return QString(); } - void HttpMetaCache::Load() { QFile index(m_index_file); - if(!index.open(QIODevice::ReadOnly)) + if (!index.open(QIODevice::ReadOnly)) return; - + QJsonDocument json = QJsonDocument::fromJson(index.readAll()); - if(!json.isObject()) + if (!json.isObject()) return; auto root = json.object(); // check file version first - auto version_val =root.value("version"); - if(!version_val.isString()) + auto version_val = root.value("version"); + if (!version_val.isString()) return; - if(version_val.toString() != "1") + if (version_val.toString() != "1") return; - + // read the entry array - auto entries_val =root.value("entries"); - if(!entries_val.isArray()) + auto entries_val = root.value("entries"); + if (!entries_val.isArray()) return; QJsonArray array = entries_val.toArray(); - for(auto element: array) + for (auto element : array) { - if(!element.isObject()) + if (!element.isObject()) return; auto element_obj = element.toObject(); QString base = element_obj.value("base").toString(); - if(!m_entries.contains(base)) + if (!m_entries.contains(base)) continue; - auto & entrymap = m_entries[base]; + auto &entrymap = m_entries[base]; auto foo = new MetaEntry; foo->base = base; QString path = foo->path = element_obj.value("path").toString(); foo->md5sum = element_obj.value("md5sum").toString(); foo->etag = element_obj.value("etag").toString(); foo->local_changed_timestamp = element_obj.value("last_changed_timestamp").toDouble(); - foo->remote_changed_timestamp = element_obj.value("remote_changed_timestamp").toString(); + foo->remote_changed_timestamp = + element_obj.value("remote_changed_timestamp").toString(); // presumed innocent until closer examination foo->stale = false; - entrymap.entry_list[path] = MetaEntryPtr( foo ); + entrymap.entry_list[path] = MetaEntryPtr(foo); } } @@ -202,33 +219,35 @@ void HttpMetaCache::SaveEventually() void HttpMetaCache::SaveNow() { QSaveFile tfile(m_index_file); - if(!tfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) + if (!tfile.open(QIODevice::WriteOnly | QIODevice::Truncate)) return; QJsonObject toplevel; - toplevel.insert("version",QJsonValue(QString("1"))); + toplevel.insert("version", QJsonValue(QString("1"))); QJsonArray entriesArr; - for(auto group : m_entries) + for (auto group : m_entries) { - for(auto entry : group.entry_list) + for (auto entry : group.entry_list) { QJsonObject entryObj; entryObj.insert("base", QJsonValue(entry->base)); entryObj.insert("path", QJsonValue(entry->path)); entryObj.insert("md5sum", QJsonValue(entry->md5sum)); entryObj.insert("etag", QJsonValue(entry->etag)); - entryObj.insert("last_changed_timestamp", QJsonValue(double(entry->local_changed_timestamp))); - if(!entry->remote_changed_timestamp.isEmpty()) - entryObj.insert("remote_changed_timestamp", QJsonValue(entry->remote_changed_timestamp)); + entryObj.insert("last_changed_timestamp", + QJsonValue(double(entry->local_changed_timestamp))); + if (!entry->remote_changed_timestamp.isEmpty()) + entryObj.insert("remote_changed_timestamp", + QJsonValue(entry->remote_changed_timestamp)); entriesArr.append(entryObj); } } - toplevel.insert("entries",entriesArr); + toplevel.insert("entries", entriesArr); QJsonDocument doc(toplevel); QByteArray jsonData = doc.toJson(); qint64 result = tfile.write(jsonData); - if(result == -1) + if (result == -1) return; - if(result != jsonData.size()) + if (result != jsonData.size()) return; tfile.commit(); } diff --git a/logic/net/HttpMetaCache.h b/logic/net/HttpMetaCache.h index 557d9298..e91d2684 100644 --- a/logic/net/HttpMetaCache.h +++ b/logic/net/HttpMetaCache.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QString> #include <QSharedPointer> diff --git a/logic/net/LoginTask.cpp b/logic/net/LoginTask.cpp index 5717aa9f..4a789bb4 100644 --- a/logic/net/LoginTask.cpp +++ b/logic/net/LoginTask.cpp @@ -100,7 +100,9 @@ void LoginTask::processYggdrasilReply(QNetworkReply *reply) processReply(reply, &LoginTask::parseYggdrasilReply, &LoginTask::parseYggdrasilError); } -void LoginTask::processReply(QNetworkReply *reply, std::function<void (LoginTask*, QByteArray)> parser, std::function<QString (LoginTask*, QNetworkReply*)> errorHandler) +void LoginTask::processReply(QNetworkReply *reply, + std::function<void(LoginTask *, QByteArray)> parser, + std::function<QString(LoginTask *, QNetworkReply *)> errorHandler) { if (netReply != reply) return; @@ -147,7 +149,7 @@ QString LoginTask::parseLegacyError(QNetworkReply *reply) case 503: return tr("The login servers are currently unavailable. Check " - "http://help.mojang.com/ for more info."); + "http://help.mojang.com/ for more info."); default: QLOG_DEBUG() << "Login failed with QNetworkReply code:" << reply->error(); @@ -161,7 +163,8 @@ QString LoginTask::parseYggdrasilError(QNetworkReply *reply) QJsonParseError jsonError; QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &jsonError); - // If there are JSON errors fall back to using the legacy error handling using HTTP status codes + // If there are JSON errors fall back to using the legacy error handling using HTTP status + // codes if (jsonError.error != QJsonParseError::NoError) { return parseLegacyError(reply); @@ -174,10 +177,10 @@ QString LoginTask::parseYggdrasilError(QNetworkReply *reply) QJsonObject root = jsonDoc.object(); - //QString error = root.value("error").toString(); + // QString error = root.value("error").toString(); QString errorMessage = root.value("errorMessage").toString(); - if(errorMessage.isEmpty()) + if (errorMessage.isEmpty()) { return parseLegacyError(reply); } @@ -230,14 +233,14 @@ void LoginTask::yggdrasilLogin() "accessToken": "random access token", // hexadecimal "clientToken": "client identifier", // identical to the one received "availableProfiles": [ // only present if the agent field was received - { - "id": "profile identifier", // hexadecimal - "name": "player name" - } + { + "id": "profile identifier", // hexadecimal + "name": "player name" + } ], "selectedProfile": { // only present if the agent field was received - "id": "profile identifier", - "name": "player name" + "id": "profile identifier", + "name": "player name" } } */ @@ -264,7 +267,7 @@ void LoginTask::parseYggdrasilReply(QByteArray data) QString playerID; QString playerName; auto selectedProfile = root.value("selectedProfile"); - if(selectedProfile.isObject()) + if (selectedProfile.isObject()) { auto selectedProfileO = selectedProfile.toObject(); playerID = selectedProfileO.value("id").toString(); @@ -281,7 +284,7 @@ void LoginTask::parseYggdrasilReply(QByteArray data) QString client_id; }; */ - + result = {uInfo.username, sessionID, playerName, playerID, accessToken}; emitSucceeded(); } diff --git a/logic/net/LoginTask.h b/logic/net/LoginTask.h index aa925999..26ac0808 100644 --- a/logic/net/LoginTask.h +++ b/logic/net/LoginTask.h @@ -45,7 +45,8 @@ public: return result; } -protected slots: +protected +slots: void legacyLogin(); void processLegacyReply(QNetworkReply *reply); void parseLegacyReply(QByteArray data); @@ -56,7 +57,8 @@ protected slots: void parseYggdrasilReply(QByteArray data); QString parseYggdrasilError(QNetworkReply *reply); - void processReply(QNetworkReply *reply, std::function<void(LoginTask*, QByteArray)>, std::function<QString(LoginTask*, QNetworkReply*)>); + void processReply(QNetworkReply *reply, std::function<void(LoginTask *, QByteArray)>, + std::function<QString(LoginTask *, QNetworkReply *)>); protected: void executeTask(); diff --git a/logic/net/NetAction.h b/logic/net/NetAction.h index b7c922f5..c96d8f8f 100644 --- a/logic/net/NetAction.h +++ b/logic/net/NetAction.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QObject> @@ -42,12 +57,14 @@ signals: void succeeded(int index); void failed(int index); -protected slots: +protected +slots: virtual void downloadProgress(qint64 bytesReceived, qint64 bytesTotal) = 0; virtual void downloadError(QNetworkReply::NetworkError error) = 0; virtual void downloadFinished() = 0; virtual void downloadReadyRead() = 0; -public slots: +public +slots: virtual void start() = 0; }; diff --git a/logic/net/NetJob.cpp b/logic/net/NetJob.cpp index c7ca4409..21c6d3f7 100644 --- a/logic/net/NetJob.cpp +++ b/logic/net/NetJob.cpp @@ -1,3 +1,18 @@ +/* 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 "NetJob.h" #include "pathutils.h" #include "MultiMC.h" @@ -5,7 +20,7 @@ #include "ByteArrayDownload.h" #include "CacheDownload.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" void NetJob::partSucceeded(int index) { @@ -15,7 +30,7 @@ void NetJob::partSucceeded(int index) num_succeeded++; QLOG_INFO() << m_job_name.toLocal8Bit() << "progress:" << num_succeeded << "/" - << downloads.size(); + << downloads.size(); emit filesProgress(num_succeeded, num_failed, downloads.size()); if (num_failed + num_succeeded == downloads.size()) @@ -50,7 +65,7 @@ void NetJob::partFailed(int index) else { QLOG_ERROR() << "Part" << index << "failed, restarting (" << downloads[index]->m_url - << ")"; + << ")"; // restart the job slot.failures++; downloads[index]->start(); diff --git a/logic/net/NetJob.h b/logic/net/NetJob.h index 01d12e60..c5c0d00c 100644 --- a/logic/net/NetJob.h +++ b/logic/net/NetJob.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include <QtNetwork> #include <QLabel> @@ -18,10 +33,9 @@ class NetJob : public ProgressProvider public: explicit NetJob(QString job_name) : ProgressProvider(), m_job_name(job_name) {}; - template <typename T> - bool addNetAction(T action) + template <typename T> bool addNetAction(T action) { - NetActionPtr base = std::static_pointer_cast<NetAction>(action); + NetActionPtr base = std::static_pointer_cast<NetAction>(action); base->index_within_job = downloads.size(); downloads.append(action); parts_progress.append(part_info()); diff --git a/logic/net/S3ListBucket.cpp b/logic/net/S3ListBucket.cpp index 643c3224..89dff951 100644 --- a/logic/net/S3ListBucket.cpp +++ b/logic/net/S3ListBucket.cpp @@ -1,6 +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. + */ + #include "S3ListBucket.h" #include "MultiMC.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" #include <QUrlQuery> #include <qxmlstream.h> #include <QDomDocument> @@ -123,7 +138,7 @@ void S3ListBucket::processValidReply() emit failed(index_within_job); return; } - if(is_truncated) + if (is_truncated) { current_marker = objects.last().Key; bytesSoFar += m_reply->size(); diff --git a/logic/net/S3ListBucket.h b/logic/net/S3ListBucket.h index f054532d..e7c5e05c 100644 --- a/logic/net/S3ListBucket.h +++ b/logic/net/S3ListBucket.h @@ -1,3 +1,18 @@ +/* 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. + */ + #pragma once #include "NetAction.h" diff --git a/logic/tasks/ProgressProvider.h b/logic/tasks/ProgressProvider.h index e158eb54..f6f2906a 100644 --- a/logic/tasks/ProgressProvider.h +++ b/logic/tasks/ProgressProvider.h @@ -1,20 +1,41 @@ +/* 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. + */ + #pragma once + #include <QObject> + class ProgressProvider : public QObject { Q_OBJECT protected: - explicit ProgressProvider(QObject* parent = 0): QObject(parent){} + explicit ProgressProvider(QObject *parent = 0) : QObject(parent) + { + } signals: void started(); void progress(qint64 current, qint64 total); void succeeded(); void failed(QString reason); void status(QString status); + public: virtual QString getStatus() const = 0; virtual void getProgress(qint64 ¤t, qint64 &total) = 0; virtual bool isRunning() const = 0; -public slots: +public +slots: virtual void start() = 0; }; diff --git a/logic/tasks/Task.cpp b/logic/tasks/Task.cpp index 2f137c55..47214723 100644 --- a/logic/tasks/Task.cpp +++ b/logic/tasks/Task.cpp @@ -3,7 +3,7 @@ * 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 @@ -14,12 +14,10 @@ */ #include "Task.h" -#include <logger/QsLog.h> +#include "logger/QsLog.h" -Task::Task(QObject *parent) : - ProgressProvider(parent) +Task::Task(QObject *parent) : ProgressProvider(parent) { - } QString Task::getStatus() const @@ -39,13 +37,12 @@ void Task::setProgress(int new_progress) emit progress(new_progress, 100); } -void Task::getProgress(qint64& current, qint64& total) +void Task::getProgress(qint64 ¤t, qint64 &total) { current = m_progress; total = 100; } - void Task::start() { m_running = true; @@ -66,7 +63,6 @@ void Task::emitSucceeded() emit succeeded(); } - bool Task::isRunning() const { return m_running; diff --git a/logic/tasks/Task.h b/logic/tasks/Task.h index cfe71c51..980b2af8 100644 --- a/logic/tasks/Task.h +++ b/logic/tasks/Task.h @@ -3,7 +3,7 @@ * 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 @@ -24,24 +24,26 @@ class Task : public ProgressProvider Q_OBJECT public: explicit Task(QObject *parent = 0); - + virtual QString getStatus() const; - virtual void getProgress(qint64& current, qint64& total); + virtual void getProgress(qint64 ¤t, qint64 &total); virtual bool isRunning() const; - -public slots: + +public +slots: virtual void start(); - + protected: virtual void executeTask() = 0; - + virtual void emitSucceeded(); virtual void emitFailed(QString reason); -protected slots: - void setStatus(const QString& status); +protected +slots: + void setStatus(const QString &status); void setProgress(int progress); - + protected: QString m_status; int m_progress = 0; |