Skip to content
Snippets Groups Projects
Commit 81623b16 authored by Anders H. Rebner's avatar Anders H. Rebner
Browse files

#42 Kodebok vises med sorteringsmulighet og #43 kan redigeres

parent 56d8d054
No related branches found
No related tags found
1 merge request!31#42 og #43 Kodebok-GUI
......@@ -32,36 +32,36 @@ class CodeBookTableView(QTableView):
if not db.open():
raise RuntimeError('Could not open database.')
# Enable sorting and sort by column 'Word'
self.setSortingEnabled(True)
#self.sortByColumn(0, Qt.AscendingOrder)
#self.new_row()
self.verticalHeader().hide()
# Create and set model:
model = CodeBookTableModel()
self.setModel(model)
self.setEditTriggers(self.DoubleClicked)
# Enable sorting and sort by column 'Word'
self.setSortingEnabled(True)
self.sortByColumn(0, Qt.AscendingOrder)
self.new_row()
self.set_horizontal_header_text()
# Set style of horizontal header
header = self.horizontalHeader()
header.sectionClicked.connect(self.new_row)
# header.sectionClicked.connect(self.new_row)
header.setFont(CODEBOOK_HEADER_FONT)
header.setStyleSheet(CODEBOOK_HEADER_BACKGROUND_CSS)
# Set norwegian names in horizontal header
self.model().setHeaderData(0, Qt.Horizontal, "Ord/Uttrykk")
self.model().setHeaderData(1, Qt.Horizontal, "Kategori")
self.model().setHeaderData(2, Qt.Horizontal, "Type")
self.model().setHeaderData(3, Qt.Horizontal, "Kode")
self.setFixedWidth(600)
self.resizeColumnsToContents()
def new_row(self):
"""..."""
self.model().insertRow(self.model().rowCount())
def set_horizontal_header_text(self):
"""Set Norwegian names in horizontal header."""
self.model().setHeaderData(0, Qt.Horizontal, "Ord/Uttrykk")
self.model().setHeaderData(1, Qt.Horizontal, "Kategori")
self.model().setHeaderData(2, Qt.Horizontal, "Type")
self.model().setHeaderData(3, Qt.Horizontal, "Kode")
def close_db_connection(self):
"""Close database-connection."""
......@@ -69,24 +69,23 @@ class CodeBookTableView(QTableView):
QSqlDatabase.removeDatabase(CONNAME)
def dataChanged(self, top_left, top_right, roles):
"""Add new row to view when user writes top row to database.
"""Resize column-width to contents when data changes.
All parameters are sent to super.
"""
super().dataChanged(top_left, top_right, roles)
# Insert unique code and fetch/select new data (HVIS MAN MÅ)
# db = Database()
# word_inserted = self.model().itemData(top_left)[0]
# db.insert_code(word_inserted)
# self.model().select()
self.resizeColumnsToContents()
# If top row (=> a new record was inserted to db), insert new top row
# if self.currentIndex().row() == 0:
if self.currentIndex().row() == self.model().rowCount() - 1:
self.new_row()
def setModel(self, model):
"""Resize column-width to contents when a model is set.
Parameter is sent to super."""
#super().selectionModel()
super().setModel(model)
if model is not None:
self.set_horizontal_header_text()
self.resizeColumnsToContents()
class CodeBookTableModel(QSqlTableModel):
......@@ -106,6 +105,7 @@ class CodeBookTableModel(QSqlTableModel):
super().__init__(None, QSqlDatabase.database(CONNAME))
self.setEditStrategy(QSqlTableModel.OnFieldChange)
self.setTable('CodeBook')
self.setSort(0, Qt.AscendingOrder)
self.select()
def flags(self, index):
......@@ -113,7 +113,6 @@ class CodeBookTableModel(QSqlTableModel):
Set items in columns Word, Category & Type editable.
Disable items in column Code, these are not editable.
Only item in last row, column Word (Primary key) is editable.
Parameters
----------
......@@ -127,16 +126,12 @@ class CodeBookTableModel(QSqlTableModel):
"""
flags = super().flags(index)
# Disable all items in last row except in column Word
if index.row() == self.rowCount() - 1 and index.column() != 0:
# Disable items in column 'Code'
if index.column() == 3:
flags ^= Qt.ItemIsEnabled
# Enable editing on items in columns 'Word', 'Category' and 'Type'
else:
# Disable items in column 'Code'
if index.column() == 3:
flags ^= Qt.ItemIsEnabled
# Enable editing on items in columns 'Word', 'Category' and 'Type'
else:
flags |= Qt.ItemIsEditable
flags |= Qt.ItemIsEditable
return flags
......
......@@ -7,9 +7,10 @@ import sys
import os
from enum import Enum
from PySide2.QtWidgets import QTabWidget, QWidget, QMainWindow, \
QApplication, QHBoxLayout, QAction
QApplication, QHBoxLayout, QVBoxLayout, QAction
from PySide2.QtGui import QIcon
from soitool.codebook import CodeBookTableView
from soitool.codebook_row_adder import CodebookRowAdder
from soitool.soi_workspace_widget import SOIWorkspaceWidget
......@@ -108,24 +109,34 @@ class MainWindow(QMainWindow):
self.setWindowIcon(QIcon(filepath))
def open_codebook_tab(self):
"""Open and selects tab containing CodeBookTableView.
"""Open tab containing CodeBookTableView and CodebookRowAdder.
Select codebook-tab if it is already open.
Select codebook-tab if it is already open,
create and select codebook-tab if not open.
"""
# Loop through tabs for existing codebook-tab:
# Loop through tabs to look for existing codebook-tab:
for i in range(self.tabs.count()):
if self.tabs.tabText(i) == "Kodebok":
self.tabs.setCurrentIndex(i)
break
# No existing codebook-tab, add tab
# Codebook-tab does not exist, create, add and select tab
else:
widget = QWidget()
layout = QHBoxLayout()
tab = CodeBookTableView()
layout.addWidget(tab, stretch=0)
widget.setLayout(layout)
self.tabs.addTab(widget, 'Kodebok')
self.tabs.setCurrentWidget(widget)
# Create widgets
tab = QWidget()
view = CodeBookTableView()
row_adder = CodebookRowAdder(view)
# Add widgets to layouts
vbox = QVBoxLayout()
vbox.addWidget(row_adder)
vbox.addWidget(view)
hbox = QHBoxLayout()
hbox.addLayout(vbox)
# Set layout, add tab and select tab
tab.setLayout(hbox)
self.tabs.addTab(tab, 'Kodebok')
self.tabs.setCurrentWidget(tab)
if __name__ == "__main__":
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment