Skip to content

Commit

Permalink
New functionalities:
Browse files Browse the repository at this point in the history
   * Load plugin now open folder containing last generated plugin
   * Added merge action

Removed QLCDNumber display number of animations found -> Useless

Bugfixes:
   * [CRITICAL] Convert AnimTreeItem seen as TreeItem back to correct class.
   * [CRITICAL] Insert parent now support multi-level selection
  • Loading branch information
Hyperenor authored and Hyperenor committed Aug 22, 2018
1 parent 10771db commit 826f687
Show file tree
Hide file tree
Showing 4 changed files with 143 additions and 77 deletions.
55 changes: 29 additions & 26 deletions OSelectorTool.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,9 @@
QHBoxLayout, QVBoxLayout, QStyleFactory)


# TODO Fix Selection Action when selecting multiple different level
# TODO Automatically merged folder with the same name ?

class COLOR(Enum):
NORMAL = Qt.black
DUPLICATE = Qt.red
Expand Down Expand Up @@ -46,21 +49,17 @@ def init_ui(self):
self.buttonScan = create_button(self, "Scan Folder", self.scan_folder)
self.buttonLoad = create_button(self, "Load plugin", self.load_xml)

self.groupBoxAnalytics = create_group_box(self, "Analytics")
label_anims_found = create_label(self, "Animations found ")
label_anims_checked = create_label(self, " Animations checked")
self.lcdAnimsChecked = create_lcd(self)
self.lcdAnimsFound = create_lcd(self)

hbox = QHBoxLayout()
hbox.addWidget(self.buttonScan)
hbox.addWidget(self.buttonLoad)

self.groupBoxScanning.setLayout(hbox)

self.groupBoxAnalytics = create_group_box(self, "Analytics")
self.groupBoxAnalytics.setMaximumWidth(400)
label_anims_checked = create_label(self, " Animations checked")
self.lcdAnimsChecked = create_lcd(self)

hbox = QHBoxLayout()
hbox.addWidget(label_anims_found)
hbox.addWidget(self.lcdAnimsFound)
hbox.addWidget(self.lcdAnimsChecked)
hbox.addWidget(label_anims_checked)
self.groupBoxAnalytics.setLayout(hbox)
Expand Down Expand Up @@ -133,6 +132,11 @@ def init_settings(self):
get_config().set("CONFIG", "bFirstTime", "False")
save_config()

def after_tree_built(self):
self.treeAnimFiles.cleanup()
self.treeAnimFiles.itemClicked.connect(self.slot_lcd_display_anim_checked)
self.slot_lcd_display_anim_checked()

def toggle_window(self, state):
self.groupBoxGenerate.setDisabled(not state)
self.groupBoxAnim.setDisabled(not state)
Expand All @@ -141,23 +145,18 @@ def toggle_window(self, state):
def load_xml(self):
self.toggle_window(False)

xml_file, filter = QFileDialog.getOpenFileName(self, "Open file",
get_config().get("PATHS", "installFolder") + "/" +
get_config().get("PLUGIN", "name") + "/" +
name = get_config().get("CONFIG", "lastName") or get_config().get("PLUGIN", "name")
xml_file, _filter = QFileDialog.getOpenFileName(self, "Open file",
get_config().get("PATHS", "installFolder") + "/" + name + "/" +
get_config().get("PATHS", "pluginFolder"),
"MyOsa file (*.myo)")

found = self.lcdAnimsFound.value()
if xml_file:
logging.info("xml_file given : " + xml_file)
logging.info("Loading")

found = self.treeAnimFiles.create_from_xml(xml_file)

self.treeAnimFiles.itemClicked.connect(self.slot_lcd_display_anim_checked)
self.slot_lcd_display_anim_checked()
self.lcdAnimsFound.display(found)

self.after_tree_built()
self.toggle_window(True)

def scan_folder(self):
Expand All @@ -168,10 +167,10 @@ def scan_folder(self):
get_config().get("PATHS", "installFolder"),
QFileDialog.ShowDirsOnly)

counter = 0
packages = []
previous_package = ""
anim_package = None
counter = self.lcdAnimsFound.value()
max_item_string_length = get_config().getint("PLUGIN", "maxItemStringLength")

if scan_dir:
Expand Down Expand Up @@ -238,12 +237,13 @@ def scan_folder(self):

packages.sort(key=lambda x: x.name, reverse=False)
duplicate = self.treeAnimFiles.create_from_packages(packages)
QMessageBox.information(self, "Results", str(duplicate) + " duplicates found (Not added)\n"
"List (WARNING Level) available in logs (if activated)")
self.treeAnimFiles.cleanup()
self.treeAnimFiles.itemClicked.connect(self.slot_lcd_display_anim_checked)
self.slot_lcd_display_anim_checked()
self.lcdAnimsFound.display(counter)

if duplicate > 0:
QMessageBox.information(self, "Results", str(duplicate) +
" duplicates found (Not added)\n"
"List (WARNING Level) available in logs (if activated)")

self.after_tree_built()

self.toggle_window(True)

Expand Down Expand Up @@ -275,11 +275,14 @@ def generate_plugin(self):
QMessageBox.warning(self, "Folder missing", "No installation folder specified. Aborting")
return

plugin_name, ok = QInputDialog.getText(self, "Plugin Name", "Enter the plugin name", text=get_config().get("PLUGIN", "name"))
name = get_config().get("CONFIG", "lastName") or get_config().get("PLUGIN", "name")
plugin_name, ok = QInputDialog.getText(self, "Plugin Name", "Enter the plugin name", text=name)

if ok:
if plugin_name:

get_config().set("CONFIG", "lastName", plugin_name)
save_config()
path_plugin_folder = get_config().get("PATHS", "installFolder") + "/" + \
plugin_name + "/" + \
get_config().get("PATHS", "pluginFolder")
Expand Down
2 changes: 1 addition & 1 deletion util/Config.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,10 +14,10 @@ def create_config():
config.add_section("CONFIG")
config.set("CONFIG", "bFirstTime", "True")
config.set("CONFIG", "bUseModOrganizer", "True")
config.set("CONFIG", "lastName", "")

config.add_section("PLUGIN")
config.set("PLUGIN", "name", "OSelector")
config.set("PLUGIN", "osplug", "OSelector")
config.set("PLUGIN", "defaultPackageIcon", "omu_skyrim")
config.set("PLUGIN", "defaultFolderIcon", "omu_stickarmships")
config.set("PLUGIN", "defaultSetIcon", "omu_stickarmships")
Expand Down
39 changes: 22 additions & 17 deletions widget/AnimTreeItem.py
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,12 @@ def __init__(self, *__args):
super().__init__(*__args)
self.setFlags(self.flags())
self.setText(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.ICON.value, get_config().get("PLUGIN", "defaultFolderIcon"))
self.setTextAlignment(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.ICON.value, Qt.AlignCenter)
self.setCheckState(0, Qt.Checked)
self.splitterCounter = 0
self.splitterIndex = 0
self.levelTwoCounter = 0
self.maxChildCount = get_config().get("PLUGIN", "maxItemStringLength")
self.maxChildCount = get_config().getint("PLUGIN", "maxItemStringLength")
self.bIsSplitter = False

@classmethod
Expand All @@ -44,6 +45,11 @@ def add_nested_child(self, item):
# If there are already splitter let's try to add the item to the first available
for i in range(self.childCount()):
splitter = self.child(i)
try:
test = splitter.bIsSplitter
except AttributeError:
log.warning("TreeItem detected ! Should be AnimTreeItem, trying to convert it")
AnimTreeItem.convert_to_anim_tree_item(splitter)
if splitter.bIsSplitter:
if splitter.childCount() < splitter.maxChildCount:
return splitter.addChild(item)
Expand All @@ -65,8 +71,16 @@ def add_nested_child(self, item):
child = self.takeChild(index+1)
if not child:
child = AnimTreeItem()

try:
test = child.bIsSplitter
except AttributeError:
log.warning("TreeItem detected ! Should be AnimTreeItem, trying to convert it")
AnimTreeItem.convert_to_anim_tree_item(child)

if child.bIsSplitter:
child.setText(0, "Set " + str(i+1))

splitter.addChild(child)

splitter = self.insert_splitter()
Expand All @@ -82,11 +96,11 @@ def animation_count(self, state=Qt.Unchecked):
child = self.child(i)
if child.checkState(0) != state:
try:
counter += child.animation_count(state)
test = child.bIsSplitter
except AttributeError:
log.warning("TreeItem detected ! Should be AnimTreeItem, trying to convert it")
AnimTreeItem.convert_to_anim_tree_item(child)
counter += child.animation_count(state)
counter += child.animation_count(state)

return counter
else:
Expand All @@ -98,15 +112,14 @@ def animations_id(self):
for i in range(self.childCount()):
child = self.child(i)
try:
animations.extend(child.animations_id())
test = child.bIsSplitter
except AttributeError:
log.warning("TreeItem detected ! Should be AnimTreeItem, trying to convert it")
AnimTreeItem.convert_to_anim_tree_item(child)
animations.extend(child.animations_id())

animations.extend(child.animations_id())
return animations
else:
return self.text(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.ID.value)
return [self.text(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.ID.value)]

def to_xml(self, parent, level):
if self.bIsSplitter or not self.is_anim():
Expand All @@ -121,11 +134,11 @@ def to_xml(self, parent, level):
child = self.child(i)
if child.checkState(0) != Qt.Unchecked:
try:
child.to_xml(elt, level + 1)
test = child.bIsSplitter
except AttributeError:
log.warning("TreeItem detected ! Should be AnimTreeItem, trying to convert it")
AnimTreeItem.convert_to_anim_tree_item(child)
child.to_xml(elt, level + 1)
child.to_xml(elt, level + 1)
else:
entry = ET.SubElement(parent, "entry")
entry.set("n", self.text(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.NAME.value))
Expand Down Expand Up @@ -179,11 +192,3 @@ def set_animation(self, animation, i):
self.setText(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.FILE.value, str(animation.stages_file[i]))
self.setText(widget.AnimTreeWidget.AnimTreeWidget.COLUMN.ANIM_OBJ.value, str(animation.stages_obj[i]))

@classmethod
def convert_to_anim_tree_item(cls, obj):
obj.__class__ = cls
obj.bIsSplitter = False
obj.splitterCounter = 0
obj.splitterIndex = 0
obj.levelTwoCounter = 0
obj.maxChildCount = get_config().get("PLUGIN", "maxItemStringLength")
Loading

0 comments on commit 826f687

Please sign in to comment.