diff --git a/buttonarea.py b/buttonarea.py index 316a2ab..3f73eeb 100644 --- a/buttonarea.py +++ b/buttonarea.py @@ -2,6 +2,40 @@ import sys, os from PyQt4.QtGui import * from PyQt4.QtCore import * +class ButtonListWidget(QWidget): + def __init__(self, name, parent=None): + QWidget.__init__(self, parent) + vlayout = QVBoxLayout() + vlayout.setSpacing(0) + vlayout.setAlignment(Qt.AlignTop) + #vlayout.setMargin(0) + #vlayout.setContentsMargins(0, 0, 0, 0) + vlayout.addWidget(QLabel("
" + name + "
")) + self.button_group = QButtonGroup() + self.setLayout(vlayout) + + def create_button(self, button_name): + button = QPushButton(button_name) + button.setFlat(True) + button.setCheckable(True) + button.clicked.connect(self.clickedButton) + return button + + def add_button(self, button_name): + button = self.create_button(button_name) + self.layout().addWidget(button) + self.button_group.addButton(button) + return button + + def clickedButton(self): + button = self.get_checked_button() + label_name = str(button.text()) + print label_name + + def get_checked_button(self): + return self.button_group.checkedButton() + + class ButtonArea(QWidget): def __init__(self, parent=None): QWidget.__init__(self, parent) @@ -10,54 +44,42 @@ class ButtonArea(QWidget): self.label_properties = {} self.properties = {} + self.property_buttons = [] + + self.label_button_list = ButtonListWidget("Labels") + self.property_button_lists = {} self.last_checked_label = None - - def create_button(self, button_name): - button = QPushButton(button_name) - button.setFlat(True) - button.setCheckable(True) - button.clicked.connect(self.clickedButton) - return button - - def update_label_buttons(self): - label_vlayout = self.create_choice_list("Labels") - self.label_buttongroup = QButtonGroup() - for label_name in self.label_names: - button = QPushButton(label_name) - button.setFlat(True) - button.setCheckable(True) - button.clicked.connect(self.clickedLabelButton) - label_vlayout.addWidget(button) - self.label_buttongroup.addButton(button) - if label_name == self.last_checked_label: - button.setChecked(True) self.hlayout = QHBoxLayout() - self.hlayout.addLayout(label_vlayout) + self.hlayout.setAlignment(Qt.AlignLeft) + self.hlayout.addWidget(self.label_button_list) self.setLayout(self.hlayout) - - def update_buttons(self): - layout = self.hlayout.takeAt(1) - - dynamic_hlayout = QHBoxLayout() - if self.last_checked_label != None: - for key in self.label_properties[self.last_checked_label].keys(): - if key in ["type", "class"]: - continue - vlayout = self.create_choice_list(key) - buttongroup = QButtonGroup() - for value in self.properties[key]: - button = self.create_button(value) - vlayout.addWidget(button) - buttongroup.addButton(button) - dynamic_hlayout.addLayout(vlayout) + def init_button_lists(self): + for label_name in self.label_names: + button = self.label_button_list.add_button(label_name) + button.clicked.connect(self.clickedLabelButton) - self.hlayout.addLayout(dynamic_hlayout) - self.update() - self.updateGeometry() + for key, property_values in self.properties.iteritems(): + if key in ["type", "class"]: + continue + button_list = ButtonListWidget(key) + for value in property_values: + button_list.add_button(value) + button_list.hide() + print key + self.property_button_lists[key] = button_list + self.hlayout.addWidget(button_list) + def show_only_label_properties(self, label_name): + print "sdf", self.property_button_lists + for name, button_list in self.property_button_lists.iteritems(): + if name in self.label_properties[label_name].keys(): + button_list.show() + else: + button_list.hide() + def add_label(self, label_name, properties = {}): self.label_names.append(label_name) self.label_properties[label_name] = properties @@ -68,19 +90,7 @@ class ButtonArea(QWidget): self.properties[key] = set(value) def get_checked_label_button(self): - return self.label_buttongroup.checkedButton() - - def create_choice_list(self, list_name, elements = []): - vlayout = QVBoxLayout() - vlayout.setSpacing(0) - #vlayout.setMargin(0) - #vlayout.setContentsMargins(0, 0, 0, 0) - vlayout.addWidget(QLabel("
" + list_name + "
")) - if len(elements) > 0: - buttongroup = QButtonGroup() - for element in elements: - self.create_button(element) - return vlayout + return self.label_button_list.get_checked_button() def clickedButton(self): button = self.get_checked_label_button() @@ -91,19 +101,18 @@ class ButtonArea(QWidget): button = self.get_checked_label_button() label_name = str(button.text()) if label_name != self.last_checked_label: - print label_name, self.last_checked_label + print "ButtonArea:", label_name, self.last_checked_label self.last_checked_label = label_name - self.update_buttons() + self.show_only_label_properties(label_name) def load(self, config_filepath): execfile(config_filepath) #if self.get_checked_label_button() == None: - # if len(self.label_buttongroup.buttons()) != 0: - # self.label_buttongroup.buttons()[0].setChecked(True) + # if len(self.label_button_group.buttons()) != 0: + # self.label_button_group.buttons()[0].setChecked(True) # #self.last_checked_label = str(self.get_checked_label_button().text()) - self.update_label_buttons() - self.update_buttons() + self.init_button_lists() def main(): app = QApplication(sys.argv)