111 lines
3.7 KiB
Python
111 lines
3.7 KiB
Python
import os
|
|
import csv
|
|
from PySide import QtGui, QtCore
|
|
|
|
|
|
class SelectorDialog(QtGui.QDialog):
|
|
def __init__(self, csv_path, title, parent=None):
|
|
super(SelectorDialog, self).__init__(parent)
|
|
self.setWindowTitle(title)
|
|
self.csv_path = csv_path
|
|
self.data = []
|
|
self.brand_filter = ""
|
|
self.model_filter = ""
|
|
|
|
# Cargar datos del CSV
|
|
self.load_csv_data()
|
|
|
|
# Crear widgets
|
|
self.create_widgets()
|
|
self.create_layout()
|
|
self.create_connections()
|
|
|
|
def load_csv_data(self):
|
|
"""Carga los datos desde el archivo CSV"""
|
|
if os.path.exists(self.csv_path):
|
|
with open(self.csv_path, 'r') as f:
|
|
reader = csv.DictReader(f, delimiter=';')
|
|
self.data = [row for row in reader]
|
|
|
|
def get_unique_brands(self):
|
|
"""Obtiene marcas únicas"""
|
|
return list(set(row['Marca'] for row in self.data))
|
|
|
|
def get_models_by_brand(self, brand):
|
|
"""Filtra modelos por marca"""
|
|
return [row['Modelo'] for row in self.data if row['Marca'] == brand]
|
|
|
|
def create_widgets(self):
|
|
self.lbl_brand = QtGui.QLabel("Marca:")
|
|
self.cb_brand = QtGui.QComboBox()
|
|
self.cb_brand.addItems(self.get_unique_brands())
|
|
|
|
self.lbl_model = QtGui.QLabel("Modelo:")
|
|
self.cb_model = QtGui.QComboBox()
|
|
self.update_model_combo()
|
|
|
|
self.btn_accept = QtGui.QPushButton("Aceptar")
|
|
self.btn_cancel = QtGui.QPushButton("Cancelar")
|
|
|
|
def create_layout(self):
|
|
layout = QtGui.QVBoxLayout()
|
|
form_layout = QtGui.QFormLayout()
|
|
form_layout.addRow(self.lbl_brand, self.cb_brand)
|
|
form_layout.addRow(self.lbl_model, self.cb_model)
|
|
|
|
button_layout = QtGui.QHBoxLayout()
|
|
button_layout.addWidget(self.btn_accept)
|
|
button_layout.addWidget(self.btn_cancel)
|
|
|
|
layout.addLayout(form_layout)
|
|
layout.addLayout(button_layout)
|
|
self.setLayout(layout)
|
|
|
|
def create_connections(self):
|
|
self.cb_brand.currentIndexChanged.connect(self.update_model_combo)
|
|
self.btn_accept.clicked.connect(self.accept)
|
|
self.btn_cancel.clicked.connect(self.reject)
|
|
|
|
def update_model_combo(self):
|
|
brand = self.cb_brand.currentText()
|
|
models = self.get_models_by_brand(brand)
|
|
self.cb_model.clear()
|
|
self.cb_model.addItems(models)
|
|
|
|
def get_selected_item(self):
|
|
brand = self.cb_brand.currentText()
|
|
model = self.cb_model.currentText()
|
|
for row in self.data:
|
|
if row['Marca'] == brand and row['Modelo'] == model:
|
|
return row
|
|
return None
|
|
|
|
|
|
def select_modulo():
|
|
csv_path = "/ruta/a/tu/databases/modulos.csv" # Ajusta esta ruta
|
|
dialog = SelectorDialog(csv_path, "Seleccionar Módulo")
|
|
if dialog.exec_():
|
|
selected = dialog.get_selected_item()
|
|
print("Módulo seleccionado:", selected) # Aquí puedes agregar la lógica de importación
|
|
|
|
|
|
def select_inversor():
|
|
csv_path = "/ruta/a/tu/databases/inversores.csv" # Ajusta esta ruta
|
|
dialog = SelectorDialog(csv_path, "Seleccionar Inversor")
|
|
if dialog.exec_():
|
|
selected = dialog.get_selected_item()
|
|
print("Inversor seleccionado:", selected) # Aquí puedes agregar la lógica de importación
|
|
|
|
|
|
# Crear una barra de herramientas para acceder fácilmente
|
|
toolbar = QtGui.QToolBar()
|
|
select_modulo_action = QtGui.QAction("Seleccionar Módulo", toolbar)
|
|
select_modulo_action.triggered.connect(select_modulo)
|
|
toolbar.addAction(select_modulo_action)
|
|
|
|
select_inversor_action = QtGui.QAction("Seleccionar Inversor", toolbar)
|
|
select_inversor_action.triggered.connect(select_inversor)
|
|
toolbar.addAction(select_inversor_action)
|
|
|
|
# Agregar la barra de herramientas a FreeCAD
|
|
Gui.addToolBar(toolbar) |