Skip to content

Commit

Permalink
Bring back user columns. Fixes #283
Browse files Browse the repository at this point in the history
  • Loading branch information
gkunter committed Jun 2, 2017
1 parent 75d3ddd commit cd94f75
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 17 deletions.
33 changes: 20 additions & 13 deletions coquery/gui/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -415,7 +415,7 @@ def _set_number_of_tokens():

self.ui.action_column_properties.triggered.connect(self.column_properties)
self.ui.action_show_hidden.triggered.connect(self.show_hidden_columns)
#self.ui.action_add_column.triggered.connect(self.add_column)
self.ui.action_add_column.triggered.connect(self.add_column)
self.ui.action_add_function.triggered.connect(self.menu_add_function)
self.ui.action_find.triggered.connect(lambda: self.ui.widget_find.show())

Expand Down Expand Up @@ -656,7 +656,7 @@ def show_corpus_menu(self):

def show_results_menu(self):
enable = hasattr(self, "table_model")
#self.ui.action_add_column.setEnabled(enable)
self.ui.action_add_column.setEnabled(enable)
self.ui.action_add_function.setEnabled(enable)
self.ui.action_column_properties.setEnabled(enable)
self.ui.action_show_hidden.setEnabled(enable)
Expand Down Expand Up @@ -1116,17 +1116,32 @@ def show_hidden_columns(self):
def add_column(self):
if not self.Session or len(self.Session.data_table.columns) == 0:
return

if not self.ui.aggregate_radio_list[0].isChecked():
QtWidgets.QMessageBox.critical(self,
"User data unavailable",
msg_userdata_unavailable)
return

max_user_column = 0
for col in self.Session.data_table.columns:
if col.startswith("coq_userdata"):
max_user_column = max(max_user_column,
int(col.rpartition("_")[-1]))
N = max_user_column + 1
label = "coq_userdata_{}".format(N)
self.Session.data_table[label] = [None] * len(self.Session.data_table)
self.reaggregate(recalculate=False, start=False)
val = [""] * len(self.Session.data_table)
self.Session.data_table[label] = val
self.update_columns()
self._target_label = label
self.user_columns = True

def remove_column(self, columns):
self.Session.data_table = self.Session.data_table.drop(
columns, axis="columns")
self.update_columns()
self.user_column = any([x.startswith("coq_userdata")
for x in self.Session.data_table])

def jump_to_column(self, col):
if not col or col.startswith("coquery_invisible"):
Expand Down Expand Up @@ -1510,7 +1525,6 @@ def update_table_models(self, visible=None, hidden=None):
self.hidden_model = classes.CoqHiddenTableModel(
to_hide, session=self.Session)
self.set_columns_widget()
self.table_model.dataChanged.connect(self.change_userdata)

def set_columns_widget(self):
def hide():
Expand All @@ -1535,14 +1549,6 @@ def show():
if self._hidden == None:
self.collapse_hidden_columns()

def change_userdata(self):
self.user_columns = True
if AUTO_USERDATA in options.settings.value(
"settings_auto_apply", AUTO_APPLY_DEFAULT):
self.reaggregate()
else:
self.enable_apply_button()

def display_results(self, drop=True):
if len(self.Session.output_object.dropna(how="all")) == 0:
self.ui.text_no_match.show()
Expand Down Expand Up @@ -1951,6 +1957,7 @@ def get_column_submenu(self, selection=[], point=None, hidden=False):
menu.hideColumnRequested.connect(self.hide_columns)
menu.addFunctionRequested.connect(self.add_function)
menu.removeFunctionRequested.connect(self.remove_functions)
menu.removeUserColumnRequested.connect(self.remove_column)
menu.editFunctionRequested.connect(self.edit_function)
menu.changeSortingRequested.connect(self.change_sorting_order)
menu.propertiesRequested.connect(self.column_properties)
Expand Down
11 changes: 7 additions & 4 deletions coquery/gui/classes.py
Original file line number Diff line number Diff line change
Expand Up @@ -1942,13 +1942,16 @@ def __init__(self, df, session=None, parent=None, *args):
self.formatted = self.format_content(self.content)

def flags(self, index):
flags = super(CoqTableModel, self).flags(index)
try:
if self.content.columns[index.column()].startswith("coq_userdata"):
return super(CoqTableModel, self).flags(index) | QtCore.Qt.ItemIsEditable
else:
return super(CoqTableModel, self).flags(index)
editable= (get_toplevel_window()
.ui.aggregate_radio_list[0].isChecked())
if editable:
return flags | QtCore.Qt.ItemIsEditable
except IndexError:
return super(CoqTableModel, self).flags(index)
pass
return flags

def get_dtype(self, column):
return self._dtypes[list(self.header).index(column)]
Expand Down
10 changes: 10 additions & 0 deletions coquery/gui/menus.py
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,7 @@ def __init__(self, item, context=True, title="Output column options", parent=Non
class CoqColumnMenu(QtWidgets.QMenu):
hideColumnRequested = QtCore.Signal(list)
addFunctionRequested = QtCore.Signal(list)
removeUserColumnRequested = QtCore.Signal(list)
removeFunctionRequested = QtCore.Signal(list)
editFunctionRequested = QtCore.Signal(str)
changeSortingRequested = QtCore.Signal(tuple)
Expand Down Expand Up @@ -115,6 +116,15 @@ def __init__(self, columns=[], title="", parent=None, *args, **kwargs):

self.addSeparator()

check_is_userdata = [x.startswith("coq_userdata") for x in columns]
if all(check_is_userdata):
label = "&Remove user column{}".format(suffix)
remove_userdata = QtWidgets.QAction(label, parent)
remove_userdata.triggered.connect(
lambda: self.removeUserColumnRequested.emit(columns))
self.addAction(remove_userdata)
self.addSeparator()

# add additional function actions, but only if all columns really
# are functions (excluding group functions):
check_is_func = [x.startswith("func_") for x in columns]
Expand Down

0 comments on commit cd94f75

Please sign in to comment.