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)