FreeCAD / src /Mod /Draft /DxfImportDialog.py
AbdulElahGwaith's picture
Upload folder using huggingface_hub
985c397 verified
# SPDX-License-Identifier: LGPL-2.1-or-later
import FreeCAD
import FreeCADGui
from PySide import QtCore, QtGui
class DxfImportDialog:
"""
A controller class that creates, manages, and shows the DXF import dialog.
"""
def __init__(self, entity_counts, parent=None):
# Step 1: Load the UI from the resource file. This returns a new QDialog instance.
self.dialog = FreeCADGui.PySideUic.loadUi(":/ui/preferences-dxf-import.ui")
# Now, all widgets like "label_Summary" are attributes of self.dialog
self.entity_counts = entity_counts
self.total_entities = sum(entity_counts.values())
self.setup_ui()
self.connect_signals()
self.load_settings_and_set_initial_state()
def setup_ui(self):
"""Perform initial UI setup."""
self.dialog.label_Summary.setText(
f"File contains approximately {self.total_entities} geometric entities."
)
self.dialog.label_Warning.hide()
def connect_signals(self):
"""Connect signals from the dialog's widgets to our methods."""
buttonBox = self.dialog.findChild(QtGui.QDialogButtonBox, "buttonBox")
if buttonBox:
# Connect to our custom slots INSTEAD of the dialog's built-in ones
buttonBox.accepted.connect(self.on_accept)
buttonBox.rejected.connect(self.on_reject)
FreeCAD.Console.PrintLog("DxfImportDialog: OK and Cancel buttons connected.\n")
else:
FreeCAD.Console.PrintWarning("DxfImportDialog: Could not find buttonBox!\n")
self.dialog.radio_ImportAs_Draft.toggled.connect(self.update_warning_label)
self.dialog.radio_ImportAs_Primitives.toggled.connect(self.update_warning_label)
self.dialog.radio_ImportAs_Shapes.toggled.connect(self.update_warning_label)
self.dialog.radio_ImportAs_Fused.toggled.connect(self.update_warning_label)
def on_accept(self):
"""Custom slot to debug the OK button click."""
FreeCAD.Console.PrintLog(
"DxfImportDialog: 'OK' button clicked. Calling self.dialog.accept().\n"
)
# Manually call the original slot
self.dialog.accept()
FreeCAD.Console.PrintLog("DxfImportDialog: self.dialog.accept() has been called.\n")
def on_reject(self):
"""Custom slot to debug the Cancel button click."""
FreeCAD.Console.PrintLog(
"DxfImportDialog: 'Cancel' button clicked. Calling self.dialog.reject().\n"
)
# Manually call the original slot
self.dialog.reject()
FreeCAD.Console.PrintLog("DxfImportDialog: self.dialog.reject() has been called.\n")
def load_settings_and_set_initial_state(self):
"""Load saved preferences and set the initial state of the dialog."""
hGrp = FreeCAD.ParamGet("User parameter:BaseApp/Preferences/Mod/Draft")
mode = hGrp.GetInt("DxfImportMode", 2)
if mode == 0:
self.dialog.radio_ImportAs_Draft.setChecked(True)
elif mode == 1:
self.dialog.radio_ImportAs_Primitives.setChecked(True)
elif mode == 3:
self.dialog.radio_ImportAs_Fused.setChecked(True)
else:
self.dialog.radio_ImportAs_Shapes.setChecked(True)
is_legacy = hGrp.GetBool("dxfUseLegacyImporter", False)
if is_legacy:
self.dialog.radio_ImportAs_Primitives.setEnabled(False)
self.dialog.radio_ImportAs_Draft.setEnabled(True)
self.dialog.radio_ImportAs_Shapes.setEnabled(True)
self.dialog.radio_ImportAs_Fused.setEnabled(True)
else:
self.dialog.radio_ImportAs_Draft.setEnabled(True)
self.dialog.radio_ImportAs_Primitives.setEnabled(True)
self.dialog.radio_ImportAs_Shapes.setEnabled(True)
self.dialog.radio_ImportAs_Fused.setEnabled(True)
self.update_warning_label()
def update_warning_label(self):
"""Updates the warning label based on selection and entity count."""
self.dialog.label_Warning.hide()
current_mode = self.get_selected_mode()
if self.total_entities > 5000 and (current_mode == 0 or current_mode == 1):
self.dialog.label_Warning.setText(
"Warning: Importing over 5000 entities as editable objects can be very slow."
)
self.dialog.label_Warning.show()
elif self.total_entities > 20000 and current_mode == 2:
self.dialog.label_Warning.setText(
"Warning: Importing over 20,000 entities as individual shapes may be slow."
)
self.dialog.label_Warning.show()
def exec_(self):
FreeCAD.Console.PrintLog("DxfImportDialog: Calling self.dialog.exec_()...\n")
result = self.dialog.exec_()
FreeCAD.Console.PrintLog(
"DxfImportDialog: self.dialog.exec_() returned with result: {}\n".format(result)
)
# QDialog.Accepted is usually 1, Rejected is 0.
FreeCAD.Console.PrintLog(
"(Note: QDialog.Accepted = {}, QDialog.Rejected = {})\n".format(
QtGui.QDialog.Accepted, QtGui.QDialog.Rejected
)
)
return result
def get_selected_mode(self):
"""Return the integer value of the selected import mode."""
if self.dialog.radio_ImportAs_Draft.isChecked():
return 0
if self.dialog.radio_ImportAs_Primitives.isChecked():
return 1
if self.dialog.radio_ImportAs_Fused.isChecked():
return 3
if self.dialog.radio_ImportAs_Shapes.isChecked():
return 2
return 2
def get_show_dialog_again(self):
"""Return True if the dialog should be shown next time."""
return not self.dialog.checkBox_ShowDialogAgain.isChecked()