Skip to content

Commit 2f1c4ef

Browse files
committed
make ui into tabS
1 parent d7d07ca commit 2f1c4ef

File tree

6 files changed

+362
-334
lines changed

6 files changed

+362
-334
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
dist/
33
assets/*.csv
44
assets/*.py
5+
assets/sketches
56

67

78
# Python cache

src/gui/components/column_mapper.py

Lines changed: 35 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -37,58 +37,52 @@ def __init__(self, parent_window: str, platform: str = "youtube", callback: Opti
3737
def setup_ui(self):
3838
"""Create the column mapping UI components."""
3939
with dpg.group(tag=self.group_id, parent=self.parent_window):
40-
dpg.add_text("Column Mapping:", color=[200, 200, 255])
41-
dpg.add_spacer()
4240

4341
# Post Column (Required)
44-
with dpg.group(horizontal=True):
45-
dpg.add_text("Post Column:", color=[200, 200, 255])
46-
dpg.add_combo(
47-
tag=self.post_combo_id,
48-
items=["Select CSV column..."],
49-
default_value="Select CSV column...",
50-
width=200,
51-
callback=lambda s, v: self._on_column_selected('post', v)
52-
)
42+
dpg.add_text("Post url (required)", color=[255, 255, 255])
43+
dpg.add_combo(
44+
tag=self.post_combo_id,
45+
items=["select post url column"],
46+
default_value="select post url column",
47+
width=280,
48+
callback=lambda s, v: self._on_column_selected('post', v)
49+
)
5350

54-
dpg.add_spacer(height=2)
51+
dpg.add_spacer(height=10)
5552

5653
# Date Column (Optional)
57-
with dpg.group(horizontal=True):
58-
dpg.add_text("Date Column:", color=[200, 200, 255])
59-
dpg.add_combo(
60-
tag=self.date_combo_id,
61-
items=["Select CSV column..."],
62-
default_value="Select CSV column...",
63-
width=200,
64-
callback=lambda s, v: self._on_column_selected('date', v)
65-
)
54+
dpg.add_text("Date", color=[255, 255, 255])
55+
dpg.add_combo(
56+
tag=self.date_combo_id,
57+
items=["select post date column"],
58+
default_value="select post date column",
59+
width=280,
60+
callback=lambda s, v: self._on_column_selected('date', v)
61+
)
6662

67-
dpg.add_spacer(height=2)
63+
dpg.add_spacer(height=10)
6864

6965
# Engagement Column (Optional)
70-
with dpg.group(horizontal=True):
71-
dpg.add_text("Engagement Column:", color=[200, 200, 255])
72-
dpg.add_combo(
73-
tag=self.engagement_combo_id,
74-
items=["Select CSV column..."],
75-
default_value="Select CSV column...",
76-
width=200,
77-
callback=lambda s, v: self._on_column_selected('engagement', v)
78-
)
66+
dpg.add_text("Engagement", color=[255, 255, 255])
67+
dpg.add_combo(
68+
tag=self.engagement_combo_id,
69+
items=["select post url column"],
70+
default_value="select post url column",
71+
width=280,
72+
callback=lambda s, v: self._on_column_selected('engagement', v)
73+
)
7974

80-
dpg.add_spacer(height=2)
75+
dpg.add_spacer(height=10)
8176

8277
# User Column (Optional)
83-
with dpg.group(horizontal=True):
84-
dpg.add_text("User Column:", color=[200, 200, 255])
85-
dpg.add_combo(
86-
tag=self.user_combo_id,
87-
items=["Select CSV column..."],
88-
default_value="Select CSV column...",
89-
width=200,
90-
callback=lambda s, v: self._on_column_selected('user', v)
91-
)
78+
dpg.add_text("User", color=[255, 255, 255])
79+
dpg.add_combo(
80+
tag=self.user_combo_id,
81+
items=["select post date column"],
82+
default_value="select post date column",
83+
width=280,
84+
callback=lambda s, v: self._on_column_selected('user', v)
85+
)
9286

9387
def populate_dropdowns(self, csv_columns: List[str]):
9488
"""Populate dropdowns with CSV column names."""

src/gui/components/file_picker.py

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,22 +8,23 @@
88
class FilePicker:
99
"""File selection component for CSV files."""
1010

11-
def __init__(self, parent_window: str, callback: Optional[Callable] = None):
11+
def __init__(self, parent_window: str, callback: Optional[Callable] = None, id_suffix: str = ""):
1212
self.parent_window = parent_window
1313
self.callback = callback
1414
self.selected_file = ""
15-
self.file_dialog_id = "file_dialog"
16-
self.file_input_id = "file_input"
17-
self.browse_button_id = "browse_button"
15+
self.id_suffix = id_suffix
16+
self.file_dialog_id = f"file_dialog{id_suffix}"
17+
self.file_input_id = f"file_input{id_suffix}"
18+
self.browse_button_id = f"browse_button{id_suffix}"
1819

19-
def setup_ui(self):
20+
def setup_ui(self, input_width: int = 400, placeholder_text: str = "No file selected"):
2021
"""Create the file picker UI components."""
2122
with dpg.group(horizontal=True, parent=self.parent_window):
2223
# File path input (read-only display)
2324
dpg.add_input_text(
2425
tag=self.file_input_id,
25-
default_value="No file selected",
26-
width=400,
26+
default_value=placeholder_text,
27+
width=input_width,
2728
readonly=True,
2829
hint="Selected CSV file path will appear here"
2930
)
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
import dearpygui.dearpygui as dpg
2+
from typing import Optional
3+
import os
4+
import sys
5+
sys.path.append(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
6+
7+
from .youtube_tab import YouTubeTab
8+
9+
10+
class PlatformTabs:
11+
"""Platform-specific scraper tabs container."""
12+
13+
def __init__(self, parent_window: str, state_manager, processing_controller):
14+
self.parent_window = parent_window
15+
self.state_manager = state_manager
16+
self.processing_controller = processing_controller
17+
18+
# Tab components
19+
self.youtube_tab: Optional[YouTubeTab] = None
20+
21+
# Tab bar ID
22+
self.tab_bar_id = "platform_tab_bar"
23+
24+
def setup_ui(self):
25+
"""Create the platform tabs UI."""
26+
with dpg.tab_bar(tag=self.tab_bar_id, parent=self.parent_window):
27+
28+
# YouTube Tab
29+
with dpg.tab(label="YouTube"):
30+
self.youtube_tab = YouTubeTab(
31+
parent_window=self.parent_window,
32+
state_manager=self.state_manager,
33+
processing_controller=self.processing_controller
34+
)
35+
self.youtube_tab.setup_ui()
36+
37+
# Facebook Tab (placeholder)
38+
with dpg.tab(label="Facebook"):
39+
dpg.add_text("Facebook scraper - Coming soon", color=[150, 150, 150])
40+
41+
# X/Twitter Tab (placeholder)
42+
with dpg.tab(label="X (Twitter)"):
43+
dpg.add_text("X/Twitter scraper - Coming soon", color=[150, 150, 150])
44+
45+
# TikTok Tab (placeholder)
46+
with dpg.tab(label="TikTok"):
47+
dpg.add_text("TikTok scraper - Coming soon", color=[150, 150, 150])
48+
49+
def get_youtube_tab(self) -> Optional[YouTubeTab]:
50+
"""Get the YouTube tab component."""
51+
return self.youtube_tab
52+
53+
def cleanup(self):
54+
"""Clean up tab resources."""
55+
if self.youtube_tab:
56+
self.youtube_tab.cleanup()

0 commit comments

Comments
 (0)