Commit 6ed66d78 authored by Andoni Jimenez's avatar Andoni Jimenez
Browse files

Use id in config, groups and elements in list now. ButtonGroups now work.

parent a60c8359
Loading
Loading
Loading
Loading

src/gui.py

100755 → 100644
+83 −74
Original line number Diff line number Diff line
@@ -57,110 +57,116 @@ class Ui(QtWidgets.QMainWindow):
            raise
        
        # Create right gui
        wcols = 3
        wcount = 0
        policy = QtWidgets.QSizePolicy.Policy
        gb_img:QtWidgets.QWidget = self.findChild(QtWidgets.QGroupBox, 'gb_img')
        
        policy = QtWidgets.QSizePolicy.Policy
        # add image container
        w = QtWidgets.QLabel(None)
        w.setObjectName("imageLabel") 
        w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Expanding))
        gb_img.layout().addWidget(w, 0, 0, 1, 3)
        
        
        # add flags
        wcols = 3
        wcount = 3+3
        for k in config.keys():
        widget = QtWidgets.QLabel(None)
        widget.setObjectName("imageLabel") 
        widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Expanding, policy.Expanding))
        gb_img.layout().addWidget(widget, 0, 0, 1, 3)
        wcount += 3
        # add widgets

        for tconf in config:
            tconf:dict 
            count = 0
            cols = 2
            try:
                tconf:dict = config[k]
                name = k.capitalize()
                # check basic define params
                if 'id' in tconf.keys():
                    id:str = tconf['id']

                name = id.capitalize()
                if 'name' in tconf.keys():
                    name = tconf['name']
                    
                if 'type' not in tconf.keys():
                    print(f"type of {k}:{name} not specified")
                    print(f"type of {id}:{name} not specified")
                    continue
                
                # COMMENTBOX
                if tconf['type'] == 'text':
                    gb = createGroupBox(name)
                    gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Maximum, QtWidgets.QSizePolicy.Policy.Ignored))
                    gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Maximum, policy.Ignored))
                    
                    w = QtWidgets.QPlainTextEdit(None)
                    w.setObjectName("commentBox") #f"cm_{ename}")
                    w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Expanding, QtWidgets.QSizePolicy.Policy.Minimum))
                    w.setSizePolicy(QtWidgets.QSizePolicy(policy.Expanding, policy.Minimum))
                    w.setPlaceholderText(f"Press [{tconf['shortcut']}] to insert comments. Press [Enter] to save, and [Esc] to discard.")
                    gb.layout().addWidget(w)
                # CHECKBOX
                elif tconf['type'] == 'checkbox':
                    count = 0
                    cols = 2
                    if 'ncolumns' in tconf.keys():
                        cols = tconf['ncolumns']
                    
                    gb = createGroupBox(name)
                    gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Maximum))
                    gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Minimum, policy.Maximum))
                    
                    for key in tconf['elements'].keys():
                    for element in tconf['elements']:
                        try:
                            ename, evalue = key, tconf['elements'][key]
                            # add checkbox
                            w = QtWidgets.QCheckBox(None)
                            w.setObjectName(f"cb_{ename}")
                            w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed))
                            addTexts(w, evalue, ename)
                            addToolTip(w, evalue)
                            widget = QtWidgets.QCheckBox(None)
                            widget.setObjectName(f"cb_{element['id']}")
                            widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed))
                            addCheckBoxTexts(widget, element)
                            addToolTip(widget, element)
                            
                            gb.layout().addWidget(w,count//cols, count%cols)
                            gb.layout().addWidget(widget, count//cols, count%cols)
                            count += 1
                        except KeyError as e:
                            print(e)
                # RADIOBUTTON TYPE 
                elif tconf['type'] == 'radiobutton':
                    count = 0
                    cols = 2
                    if 'ncolumns' in tconf.keys():
                        cols = tconf['ncolumns']*2
                        cols = tconf['ncolumns']*2 # *2 -> shortcut and name in 2 rows
                    
                    gb = createGroupBox(name)
                    gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred))
                    gb = newGroupBox(id, name, QtWidgets.QSizePolicy(policy.Preferred, policy.Preferred))
                    
                    gbb = QtWidgets.QButtonGroup()
                    gbb.setObjectName(f"gbb_{name.lower()}")
                    gbb.setObjectName(f"gbb_{id}")
                    
                    for key in tconf['elements'].keys():
                    for element in tconf['elements']:
                        element:dict
                        try:
                            ename, evalue = key, tconf['elements'][key]
                            shortcut = ''
                            if 'shortcut' in element.keys():
                                shortcut = element['shortcut']

                            # radiobutton
                            w = QtWidgets.QRadioButton(None)
                            w.setObjectName(f"rb_{ename}")
                            w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed))
                            w.setShortcut(evalue['shortcut'])
                            w.setText(f"{evalue['name']}")
                            addToolTip(w, evalue)
                            gbb.addButton(w)
                            gb.layout().addWidget(w,count//cols, count%cols)
                            widget = QtWidgets.QRadioButton(None)
                            widget.setObjectName(f"rb_{element['id']}")
                            widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed))
                            widget.setText(f"{element['name']}")
                            widget.setShortcut(shortcut)
                            addToolTip(widget, element)
                            
                            gbb.addButton(widget)
                            gb.layout().addWidget(widget, count//cols, count%cols)
                            count += 1
                            # shortcut label
                            w = QtWidgets.QLabel(None)
                            w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Preferred, QtWidgets.QSizePolicy.Policy.Preferred))
                            w.setText(f"[{evalue['shortcut']}]")
                                     
                            gb.layout().addWidget(w,count//cols, count%cols)
                            if shortcut != '':
                                widget = QtWidgets.QLabel(None)
                                widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Preferred, policy.Preferred))
                                widget.setText(f"[{shortcut}]")
                                gb.layout().addWidget(widget, count//cols, count%cols)
                            count += 1
                        except KeyError as e:
                            print(e)
                        
                    if 'add_clear' in tconf.keys() and tconf['add_clear'] is True:
                        w = QtWidgets.QPushButton(None)
                        w.setObjectName(f"pb_clear")
                        w.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Fixed))
                        widget = QtWidgets.QPushButton(None)
                        widget.setObjectName(f"pb_clear")
                        widget.setSizePolicy(QtWidgets.QSizePolicy(policy.Minimum, policy.Fixed))
                        
                        text = f"Clear"
                        if 'clear_shortcut' in tconf.keys():
                            text += f" [{tconf['clear_shortcut']}]"
                        w.setText(text)
                        #w.clicked.connect(self.clear_morphology_rb)
                        gb.layout().addWidget(w, count//cols, count%cols, 1, cols)
                        widget.setText(text)
                        widget.clicked.connect(self.clear_morphology_rb)
                        gb.layout().addWidget(widget, count//cols, count%cols, 1, cols)

                    self.gbb = gbb
                else:
                    print(f"{tconf['type']} not implemented")
                
@@ -195,7 +201,6 @@ class Ui(QtWidgets.QMainWindow):
        for i, cb in enumerate(self.rbNames):
            self.rb[self.rbTypes[i]] = self.findChild(QtWidgets.QRadioButton,
                                                        self.rbNames[i])
        self.clear_morphology_rb()

        # find comment box:
        self.commentBox = self.findChild(QtWidgets.QPlainTextEdit,
@@ -379,10 +384,14 @@ class Ui(QtWidgets.QMainWindow):


    def clear_morphology_rb(self):
        for i, cb in enumerate(self.rbNames):
            self.rb[self.rbTypes[i]].setAutoExclusive(False)
            self.rb[self.rbTypes[i]].setChecked(False)
            self.rb[self.rbTypes[i]].setAutoExclusive(True)
        # for i, cb in enumerate(self.rbNames):
        #     self.rb[self.rbTypes[i]].setAutoExclusive(False)
        #     self.rb[self.rbTypes[i]].setChecked(False)
        #     self.rb[self.rbTypes[i]].setAutoExclusive(True)
        if self.gbb.checkedButton() is not None:
            self.gbb.setExclusive(False)
            self.gbb.checkedButton().setChecked(False)
            self.gbb.setExclusive(True)

    # Actions helpers

@@ -465,10 +474,10 @@ class Ui(QtWidgets.QMainWindow):


# Widget ops
def createGroupBox(name:str) -> QtWidgets.QGroupBox:
def newGroupBox(id:str, name:str, policy:QtWidgets.QSizePolicy) -> QtWidgets.QGroupBox:
    gb = QtWidgets.QGroupBox(name)
    gb.setObjectName(f"gb_{name.lower()}")
    #gb.setSizePolicy(QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Policy.Ignored, QtWidgets.QSizePolicy.Policy.Ignored))
    gb.setObjectName(f"gb_{id}")
    gb.setSizePolicy(policy)
    #gb.setMinimumSize(50, 150)
    gb.setLayout(QtWidgets.QGridLayout())
    return gb
@@ -479,18 +488,18 @@ def addToolTip(widget: QtWidgets.QWidget, element:dict) -> None:
    except KeyError as e:
        print(e)

def addTexts(widget: QtWidgets.QWidget, element:dict, element_key:str) -> None:
    name = None
    shortcut = None
def addCheckBoxTexts(widget: QtWidgets.QCheckBox, element:dict) -> None:
    id, name, shortcut = None, None, None
    try:
        id = element['id']
        name = element['name']
        shortcut = element['shortcut']
    except KeyError as e:
        if name is None:
            name = element_key.capitalize()
            name = id.capitalize()
        print(e)
    finally:
        text = f"{name}"
        text = name
        if shortcut is not None:
            widget.setShortcut(shortcut)
            text = f"[{shortcut}] {name}"