Skip to content

Commit 767e57c

Browse files
Merge pull request #3 from JordiSpranger/layout
Button colour feedback when clicking. Solved bug, when summarizing be…
2 parents 87c9187 + 9c0f13c commit 767e57c

File tree

1 file changed

+80
-8
lines changed

1 file changed

+80
-8
lines changed

chatgpt_coding_helper.py

Lines changed: 80 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
from PyQt5.QtWidgets import (
2-
QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit,
2+
QApplication, QWidget, QVBoxLayout, QHBoxLayout, QLabel, QLineEdit, QMessageBox,
33
QPushButton, QTreeView, QTextEdit, QFileDialog, QFileSystemModel, QGroupBox, QTabWidget
44
)
5-
from PyQt5.QtCore import QDir
5+
from PyQt5.QtCore import QDir, QTimer
66
from PyQt5.QtGui import QIcon
77
import os
88
import json
@@ -20,7 +20,9 @@ def __init__(self):
2020

2121
self.folder_btn = QPushButton("Select Folder")
2222
self.folder_btn.clicked.connect(self.select_folder)
23+
self.folder_btn.setStyleSheet(default_button_style)
2324
file_selection_layout.addWidget(self.folder_btn)
25+
2426

2527
# Input for ignored directories
2628
ignored_dirs_layout = QHBoxLayout()
@@ -76,22 +78,27 @@ def __init__(self):
7678
button_layout = QHBoxLayout()
7779
self.save_json_btn = QPushButton("Save Texts to JSON")
7880
self.save_json_btn.clicked.connect(self.save_to_json)
81+
self.save_json_btn.setStyleSheet(default_button_style)
7982
button_layout.addWidget(self.save_json_btn)
8083

8184
self.load_json_btn = QPushButton("Load Texts from JSON")
8285
self.load_json_btn.clicked.connect(self.load_from_json)
86+
self.load_json_btn.setStyleSheet(default_button_style)
8387
button_layout.addWidget(self.load_json_btn)
8488

8589
self.summarize_btn = QPushButton("Summarize Files")
8690
self.summarize_btn.clicked.connect(self.summarize_files)
91+
self.summarize_btn.setStyleSheet(default_button_style)
8792
button_layout.addWidget(self.summarize_btn)
8893

8994
self.copy_btn = QPushButton("Copy to Clipboard")
9095
self.copy_btn.clicked.connect(self.copy_to_clipboard)
96+
self.copy_btn.setStyleSheet(default_button_style)
9197
button_layout.addWidget(self.copy_btn)
9298

9399
self.close_btn = QPushButton("Close Session")
94100
self.close_btn.clicked.connect(self.close_tab)
101+
self.close_btn.setStyleSheet(default_button_style)
95102
button_layout.addWidget(self.close_btn)
96103

97104
# Add button layout to main layout
@@ -112,17 +119,31 @@ def toggle_group_box(self, checked):
112119
widget.setVisible(checked)
113120

114121
def select_folder(self):
122+
# Change button style to indicate active state
123+
self.folder_btn.setStyleSheet(active_button_style)
124+
# Revert to default style after 100 milliseconds
125+
QTimer.singleShot(100, lambda: self.folder_btn.setStyleSheet(default_button_style))
126+
115127
directory = QFileDialog.getExistingDirectory(None, "Select a folder:")
116128
if directory:
117129
self.file_system_model.setRootPath(directory)
118130
self.tree_view.setRootIndex(self.file_system_model.index(directory))
119131

120132
def summarize_files(self):
133+
# Change button style to indicate active state
134+
self.summarize_btn.setStyleSheet(active_button_style)
135+
# Revert to default style after 100 milliseconds
136+
QTimer.singleShot(100, lambda: self.summarize_btn.setStyleSheet(default_button_style))
137+
121138
indexes = self.tree_view.selectionModel().selectedRows()
122139
summarized_text = ""
123140
ignored_dirs = [dir_name.strip() for dir_name in self.ignored_dirs_edit.text().split(",")]
124141

125142
root_path = self.file_system_model.filePath(self.tree_view.rootIndex())
143+
if not root_path or not os.path.exists(root_path):
144+
QMessageBox.information(self, "Information", "Please select a folder before summarizing files.")
145+
return
146+
126147
summarized_text += self.get_tree_structure(root_path, ignored_dirs) + "\n\n"
127148

128149
for index in indexes:
@@ -158,34 +179,66 @@ def get_tree_structure(self, path, ignored_dirs, indent=0):
158179
def copy_to_clipboard(self):
159180
clipboard = QApplication.clipboard()
160181
clipboard.setText(self.text_edit.toPlainText())
182+
# Change button style to indicate active state
183+
self.copy_btn.setStyleSheet(active_button_style)
184+
185+
# Revert to default style after 100 milliseconds
186+
QTimer.singleShot(100, lambda: self.copy_btn.setStyleSheet(default_button_style))
161187

162188
def update_char_count(self):
163189
char_count = len(self.text_edit.toPlainText())
164190
self.char_count_label.setText(f"Character Count: {char_count}")
165191

166192
def close_tab(self):
193+
# Change button style to indicate active state
194+
self.close_btn.setStyleSheet(active_button_style)
195+
# Revert to default style after 100 milliseconds
196+
QTimer.singleShot(100, lambda: self.close_btn.setStyleSheet(default_button_style))
197+
167198
index = tab_widget.indexOf(self)
168199
tab_widget.removeTab(index)
169200

170201
def save_to_json(self):
202+
# Change button style to indicate active state
203+
self.save_json_btn.setStyleSheet(active_button_style)
204+
205+
# Revert to default style after 100 milliseconds
206+
QTimer.singleShot(100, lambda: self.save_json_btn.setStyleSheet(default_button_style))
171207
data = {
172208
"start_text": self.start_text_edit.toPlainText(),
173209
"end_text": self.end_text_edit.toPlainText()
174210
}
175211
filename, _ = QFileDialog.getSaveFileName(self, "Save File", "", "JSON Files (*.json)")
176212
if filename:
177-
with open(filename, 'w') as file:
178-
json.dump(data, file, indent=4)
213+
try:
214+
with open(filename, 'w') as file:
215+
json.dump(data, file, indent=4)
216+
except Exception as e:
217+
QMessageBox.critical(self, "Error", f"An error occurred: {str(e)}")
179218

180219
def load_from_json(self):
220+
# Change button style to indicate active state
221+
self.load_json_btn.setStyleSheet(active_button_style)
222+
# Revert to default style after 100 milliseconds
223+
QTimer.singleShot(100, lambda: self.load_json_btn.setStyleSheet(default_button_style))
224+
181225
filename, _ = QFileDialog.getOpenFileName(self, "Open File", "", "JSON Files (*.json)")
182226
if filename:
183-
with open(filename, 'r') as file:
184-
data = json.load(file)
185-
self.start_text_edit.setText(data.get("start_text", ""))
186-
self.end_text_edit.setText(data.get("end_text", ""))
227+
try:
228+
with open(filename, 'r') as file:
229+
data = json.load(file)
230+
self.start_text_edit.setText(data.get("start_text", ""))
231+
self.end_text_edit.setText(data.get("end_text", ""))
232+
except Exception as e:
233+
QMessageBox.critical(self, "Error", f"An error occurred: {str(e)}")
234+
187235

188236
def create_new_tab():
237+
# Change button style to indicate active state
238+
new_tab_button.setStyleSheet(active_button_style)
239+
# Revert to default style after 100 milliseconds
240+
QTimer.singleShot(100, lambda: new_tab_button.setStyleSheet(default_button_style))
241+
189242
global tab_widget
190243
new_tab = CodingHelperTab()
191244
tab_widget.addTab(new_tab, f"Session {tab_widget.count() + 1}")
@@ -232,6 +285,25 @@ def create_new_tab():
232285
}
233286
""")
234287

288+
active_button_style = """
289+
QPushButton {
290+
background-color: #0090FF; /* Blue background */
291+
color: white; /* White text */
292+
}
293+
"""
294+
295+
default_button_style = """
296+
QPushButton {
297+
background-color: #f0f0f0; /* Default background */
298+
border: 1px solid #dcdcdc; /* Default border */
299+
padding: 5px;
300+
border-radius: 2px;
301+
}
302+
QPushButton:hover {
303+
background-color: #e8e8e8; /* Hover background */
304+
}
305+
"""
306+
235307
# Initialize with one tab
236308
create_new_tab()
237309

0 commit comments

Comments
 (0)