diff --git a/components/globals.py b/components/globals.py index 8e72d6c..49e7fe7 100644 --- a/components/globals.py +++ b/components/globals.py @@ -9,6 +9,8 @@ LOG_DIR = appdirs.user_log_dir(APP_NAME, APP_AUTHOR) CACHE_DIR = appdirs.user_cache_dir(APP_NAME, APP_AUTHOR) +IS_MAC = sys.platform == "darwin" + def _calc_path(path): head, tail = os.path.split(path) if tail == 'reaper': diff --git a/components/job_queue.py b/components/job_queue.py index b13aef0..ca887a3 100644 --- a/components/job_queue.py +++ b/components/job_queue.py @@ -26,6 +26,18 @@ class JobState(Enum): SAVING = "saving" FINISHED = "finished" +class StopPolicy(Enum): + STOP = "Stop queue" + CONTINUE = "Continue queue" + +class SavePolicy(Enum): + DELETE = "Delete progress" + SAVE = "Save progress" + +class MessagePolicy(Enum): + SILENT = "Don't display error messages" + LOUD = "Display error messages" + class JobData: @@ -241,25 +253,26 @@ def pickle(self): dump(self, f) -class Queue(QtCore.QThread): +class QueueThread(QtCore.QThread): job_update = QtCore.pyqtSignal(Job) queue_update = QtCore.pyqtSignal(list) queue_selected = QtCore.pyqtSignal(list) job_error = QtCore.pyqtSignal(Job) job_error_log = QtCore.pyqtSignal(str) - def __init__(self, window): + def __init__(self, queueWidget): super().__init__() self.state = QueueState.STOPPED - self.window = window + self.window = queueWidget self.jobs = [] self.currentJobState = None self.start() - self.add_actions() + # TODO: Enable adding actions + #self.add_actions() def add_actions(self): self.window.queueStart.clicked.connect(self.start_queue) diff --git a/components/keys.py b/components/keys.py index 687c7dc..ac00881 100644 --- a/components/keys.py +++ b/components/keys.py @@ -1,6 +1,8 @@ import json from os import sep, makedirs, path +from components.globals import DATA_DIR + from PyQt5 import QtWidgets @@ -24,19 +26,31 @@ def edit_key(self, text): self.save() -class KeyPage(QtWidgets.QWidget): +class KeyTab(QtWidgets.QWidget): - def __init__(self, scrollWidget, data_dir, parent=None): + def __init__(self, parent=None): super().__init__(parent=parent) - self.scrollWidget = scrollWidget + self.layout = QtWidgets.QVBoxLayout() + self.setLayout(self.layout) + + self.scrollArea = QtWidgets.QScrollArea(self) + self.scrollArea.setWidgetResizable(True) + self.scrollArea.layout = QtWidgets.QVBoxLayout() + self.scrollArea.setLayout(self.scrollArea.layout) + self.scrollArea.layout.addWidget(QtWidgets.QPushButton("Hi")) + + + self.scrollWidget = QtWidgets.QWidget(self.scrollArea) self.scrollWidget.layout = QtWidgets.QVBoxLayout() self.scrollWidget.setLayout(self.scrollWidget.layout) + self.layout.addWidget(self.scrollWidget) + self.layout.addWidget(self.scrollArea) - self.location = f"{data_dir}{sep}keys.json" + self.location = f"{DATA_DIR}{sep}keys.json" - if not path.exists(data_dir): - makedirs(data_dir) + if not path.exists(DATA_DIR): + makedirs(DATA_DIR) self.sources = {} self.read_keys() diff --git a/components/sources.py b/components/sources.py index e69f433..ff785c3 100644 --- a/components/sources.py +++ b/components/sources.py @@ -2,8 +2,10 @@ import xml.etree.ElementTree as ET from os import sep, path -from components.widgets.nodes import * +from PyQt5 import QtWidgets, QtCore, QtGui from components.globals import BUNDLE_DIR +from components.widgets.nodes import PathWidget, CounterSetter, NodeInputPrimary, NodeInputLine, NodeInputList, \ + NodeInputArgs, CheckboxSetter, ListSetter class NodeTree(QtWidgets.QTreeWidget): @@ -59,7 +61,7 @@ def add_item(self, node, parent=None): treeItem.textDescription = textDescription - treeItem.textContent = "I want to scrape a {} {}".format( + treeItem.textContent = "Scrape a {} {}".format( self.sourceName, textDescription ) @@ -84,13 +86,13 @@ def add_widget(self, widget): class NodePage(QtWidgets.QWidget): - def __init__(self, mainWindow, primaryInputWindow, parent=None): + def __init__(self, reaper, primaryInputWindow, parent=None): QtWidgets.QWidget.__init__(self, parent) - self.mainWindow = mainWindow - self.queue = mainWindow.queue - self.keys = mainWindow.key_page - self.queue_table = mainWindow.queue_table + self.mainWindow = reaper + self.queue = reaper.queueThread + self.keys = reaper.mainTabs.keyTab + self.queue_table = reaper.mainTabs.queueTab.table self.primaryInputWindow = primaryInputWindow # Add layout @@ -146,6 +148,7 @@ def create_page(self, treeItem, sourceName): inputBox.add_iterator.connect(self.queue.add_jobs) # Add advanced box + from .widgets.nodes import AdvancedBox advancedBox = AdvancedBox() inputBox.layout.addRow("Show all", advancedBox) @@ -409,13 +412,14 @@ def required_changed(self, i, bool): self.downloadBox.setEnabled(True) -class SourceTabs: +class SourceTab(QtWidgets.QTabWidget): - def __init__(self, mainWindow, keyPage, sourceFile, primaryInputWindow): - self.mainWindow = mainWindow - self.keyPage = keyPage - self.primaryInputWindow = primaryInputWindow - self.sourceFile = sourceFile + def __init__(self, mainTabs): + super().__init__(mainTabs) + self.mainWindow = mainTabs.mainWindow + self.keyTab = mainTabs.keyTab + self.primaryInputWindow = mainTabs.primaryInputWindow + self.sourceFile = "sources.xml" self.sources = self.read_sources() self.add_sources() @@ -468,7 +472,7 @@ def add_sources(self): def create_source_page(self, source): sourcePage = QtWidgets.QWidget() sourceName = source.find("name").text - self.mainWindow.sourcesTabs.addTab(sourcePage, sourceName) + self.addTab(sourcePage, sourceName) sourcePage.layout = QtWidgets.QHBoxLayout() sourcePage.setLayout(sourcePage.layout) @@ -481,7 +485,7 @@ def create_source_keys(self, sourceName, source): for key in keys.findall("key") ] - self.keyPage.add_source(sourceName, key_list) + self.keyTab.add_source(sourceName, key_list) def create_nodes( self, diff --git a/components/widgets/nodes.py b/components/widgets/nodes.py index 2a90835..73a9243 100644 --- a/components/widgets/nodes.py +++ b/components/widgets/nodes.py @@ -3,7 +3,6 @@ from collections import OrderedDict from os import getcwd, path, sep - from PyQt5 import QtWidgets, QtCore, QtGui from components.globals import BUNDLE_DIR diff --git a/components/widgets/queue.py b/components/widgets/queue.py index d1b4738..73785fe 100644 --- a/components/widgets/queue.py +++ b/components/widgets/queue.py @@ -5,6 +5,28 @@ from components.job_queue import JobState +class QueueWidget(QtWidgets.QWidget): + + def __init__(self, parent=None): + super().__init__(parent) + + self.layout = QtWidgets.QVBoxLayout() + self.setLayout(self.layout) + + self.add_controls() + self.add_table() + + def add_controls(self): + self.controls = QtWidgets.QWidget(self) + self.controls.layout = QtWidgets.QHBoxLayout() + self.controls.setLayout(self.controls.layout) + self.layout.addWidget(self.controls) + + def add_table(self): + self.table = QueueTable(self) + self.layout.addWidget(self.table) + + class QueueTable(QtWidgets.QTableWidget): def __init__(self, parent=None): @@ -32,7 +54,6 @@ def __init__(self, parent=None): "Key column", ] ) - # self.horizontalHeader().setStretchLastSection(True) self.horizontalHeader().setSectionResizeMode(QtWidgets.QHeaderView.Interactive) @QtCore.pyqtSlot(list) diff --git a/components/windows.py b/components/windows.py index 8eeae99..df70549 100644 --- a/components/windows.py +++ b/components/windows.py @@ -53,6 +53,16 @@ def __init__(self, title, subtitle, layout=QtWidgets.QVBoxLayout, parent=None): self.scrollArea.setWidget(self.contents) + def pop(self): + self.show() + +class KeyWindow(ScrollWindow): + + def __init__(self, parent=None): + title = "API Keys" + subtitle = "API Key input" + super().__init__(title, subtitle, QtWidgets.QVBoxLayout, parent) + class LicenseWidget(QtWidgets.QWidget): @@ -101,9 +111,6 @@ def __init__(self, parent=None): reaper = LicenseWidget("OAuthLib BSD license", f.read(), self) self.contents.layout.addWidget(reaper) - def pop(self): - self.show() - class ErrorWindow(QtWidgets.QMainWindow): job_error = pyqtSignal(Job) diff --git a/reaper.py b/reaper.py index e4e69b9..fbeb507 100755 --- a/reaper.py +++ b/reaper.py @@ -22,15 +22,16 @@ import traceback import qdarkstyle -from PyQt5.QtCore import QUrl +from PyQt5.QtCore import QUrl, QSize from PyQt5.QtGui import QIcon, QDesktopServices +from PyQt5.QtWidgets import QLabel, QTabWidget -from components.job_queue import Queue -from components.keys import KeyPage -from components.sources import SourceTabs +from components.job_queue import QueueThread +from components.keys import KeyTab +from components.sources import SourceTab from components.widgets.nodes import PrimaryInputWindow from components.widgets.progress import ProgressWidget -from components.widgets.queue import QueueTable +from components.widgets.queue import QueueTable, QueueWidget from components.windows import * from components.globals import * from ui.mainwindow import Ui_MainWindow @@ -41,7 +42,7 @@ class Reaper(Ui_MainWindow): def __init__(self, window, app, splash, show=True): super().__init__() - self.version = "v2.5.4" + self.version = "v3.0.0" self.source_file = "sources.xml" self.encoding = "utf-8" self.cache_enabled = True @@ -59,7 +60,39 @@ def __init__(self, window, app, splash, show=True): self.advanced_mode = False self.dark_mode = False - self.splash_msg("Identifying app type") + self.build() + + if show: + self.splash_msg("Showing window") + window.show() + + def splash_msg(self, message): + self.splash.showMessage(message) + + def build(self): + # Add windows and actions + self.splash_msg("Connecting widgets") + self.add_windows() + self.add_actions() + + # Set style + with open('styles/style.css', 'r') as f: + styleString = f.read() + platformSheet = 'mac' if IS_MAC else 'windows' + with open(f"styles/{platformSheet}.css", 'r') as f: + self.app.setStyleSheet(styleString + f.read()) + + # Add queue + self.queueThread = QueueThread(self) + + # Add tabs + self.splash_msg("Adding tabs") + self.mainTabs = MainTabs(self) + self.mainTabs.add_key_tab() + self.mainTabs.add_source_tab() + self.mainTabs.add_queue_tab() + + return # Add windows and actions self.splash_msg("Connecting widgets") @@ -68,45 +101,34 @@ def __init__(self, window, app, splash, show=True): # Create queue page self.splash_msg("Creating Queue") - self.queue = Queue(self) - self.queue.job_error.connect(self.error_window.job_error) - self.queue.job_error_log.connect(self.error_window.log_error) - self.error_window.cancelButton.clicked.connect(self.queue.stop_retrying) + self.queue = QueueWidget(self) + self.queueThread = QueueThread(self) + self.queueThread.job_error.connect(self.error_window.job_error) + self.queueThread.job_error_log.connect(self.error_window.log_error) + self.error_window.cancelButton.clicked.connect(self.queueThread.stop_retrying) self.splash_msg("Adding icons") self.set_icons() - # Create queue table - self.splash_msg("Creating job queue") - self.queue_table = QueueTable() - self.queueLayout.addWidget(self.queue_table) - # Create window for primary key input self.splash_msg("Creating input window") - self.primaryInputWindow = PrimaryInputWindow(window) + self.primaryInputWindow = PrimaryInputWindow(self.window) # Create api key page self.splash_msg("Creating API tab") - self.key_page = KeyPage(self.scrollAreaWidgetContents, DATA_DIR) + self.key_page = KeyTab(self.scrollAreaWidgetContents, DATA_DIR) # Create sources page self.splash_msg("Creating Source tab") - self.source_tabs = SourceTabs( + self.source_tabs = SourceTab( self, self.key_page, self.source_file, self.primaryInputWindow ) # Create progress page self.splash_msg("Creating progress tab") - self.progress_page = ProgressWidget(self.queue.job_update, self.tabWidget) + self.progress_page = ProgressWidget(self.queueThread.job_update, self.tabWidget) self.progressLayout.addWidget(self.progress_page) - if show: - self.splash_msg("Showing window") - window.show() - - def splash_msg(self, message): - self.splash.showMessage(message) - def enable_advanced_mode(self, bool): self.advanced_mode = bool @@ -139,6 +161,8 @@ def add_windows(self): self.settings_window = SettingsWindow(self) self.actionSettings.triggered.connect(self.settings_window.show) + self.primaryInputWindow = PrimaryInputWindow(self.window) + def set_icons(self): self.queueUp.setIcon(QIcon(f"{BUNDLE_DIR}{sep}ui/up.png")) self.queueDown.setIcon(QIcon(f"{BUNDLE_DIR}{sep}ui/down.png")) @@ -194,6 +218,59 @@ def quit(self, _): self.app.quit() +class MainTabs(QtWidgets.QTabWidget): + + def __init__(self, reaper): + super().__init__(reaper.window) + self.setTabBar(self.HorizontalTabWidget(self)) + self.setObjectName('mainTabs') + + reaper.centralLayout.addWidget(self) + reaper.centralLayout.setContentsMargins(0, 0, 0, 0) + + self.mainWindow = reaper + self.primaryInputWindow = reaper.primaryInputWindow + self.keyTab = None + self.sourceTab = None + self.queueTab = None + + self.setTabPosition(QtWidgets.QTabWidget.West) + + def add_key_tab(self): + self.keyTab = KeyTab(self) + self.addTab(self.keyTab, QIcon("ui/key.svg"), "") + + def add_source_tab(self): + self.queueTab = QueueWidget(self) + self.sourceTab = SourceTab(self) + self.addTab(self.sourceTab, QIcon("ui/add.svg"), "") + + def add_queue_tab(self): + self.addTab(self.queueTab, QIcon("ui/queue.svg"), "") + + class HorizontalTabWidget(QtWidgets.QTabBar): + def __init__(self, parent=None): + super().__init__(parent) + self.setObjectName('mainTabBar') + self.setExpanding(True) + self.setMouseTracking(True) + + self.toolTips = ["API Keys", "Add jobs", "List jobs"] + self.curTab = None + + def mouseMoveEvent(self, QMouseEvent): + cursorPos = QMouseEvent.globalPos() + tabNo = self.tabAt(self.mapFromGlobal(cursorPos)) + curTab = self.toolTips[tabNo] + + if not QtWidgets.QToolTip.isVisible() or curTab != self.curTab: + toolPos = self.mapToGlobal(self.pos()) + QtCore.QPoint(self.width(), (self.height() / 3 * tabNo) + 12) + if IS_MAC: + toolPos += QtCore.QPoint(self.height() / 2) + QtWidgets.QToolTip.showText(toolPos, curTab, self, QtCore.QRect(), 10000) + self.curTab = curTab + + if __name__ == "__main__": try: app = QtWidgets.QApplication(sys.argv) @@ -212,5 +289,7 @@ def quit(self, _): sys.exit(app.exec_()) except Exception as e: with open(LOG_DIR + "/log.log", "a") as f: + print(str(e)) + print(traceback.format_exc()) f.write(str(e)) f.write(traceback.format_exc()) diff --git a/styles/mac.css b/styles/mac.css new file mode 100644 index 0000000..11d8d58 --- /dev/null +++ b/styles/mac.css @@ -0,0 +1,3 @@ +QTabBar#mainTabBar::tab { + margin-right: 10px; +} \ No newline at end of file diff --git a/styles/style.css b/styles/style.css new file mode 100644 index 0000000..372d5cf --- /dev/null +++ b/styles/style.css @@ -0,0 +1,25 @@ +QTabBar#mainTabBar { + icon-size: 32px; + border: none; +} + +QTabBar#mainTabBar::tab { + height: 50px; + width: 100%; + border: none; + margin: 0px; + padding-bottom: 22px; +} + +QTabBar#mainTabBar::tab:hover { + background-color: rgba(66, 112, 129, 0.5); +} + +QTabBar#mainTabBar::tab:selected { + background-color: rgba(66, 112, 129, 1); +} + +QWidget#centralwidget { + margin: 0; + padding: 0; +} \ No newline at end of file diff --git a/styles/windows.css b/styles/windows.css new file mode 100644 index 0000000..15fa7e4 --- /dev/null +++ b/styles/windows.css @@ -0,0 +1,13 @@ +QTabBar#mainTabBar::tab { + margin-right: 1px; +} + +QWidget#centralwidget { + background-color: #3c3f41; +} + +QToolTip { + background-color: #3c3f41; + border: 0; + color: #ffffff; +} \ No newline at end of file diff --git a/ui/add.svg b/ui/add.svg new file mode 100644 index 0000000..ff9d99f --- /dev/null +++ b/ui/add.svg @@ -0,0 +1,59 @@ + + diff --git a/ui/key.svg b/ui/key.svg new file mode 100644 index 0000000..ebb9e48 --- /dev/null +++ b/ui/key.svg @@ -0,0 +1,58 @@ + + diff --git a/ui/mainwindow.py b/ui/mainwindow.py index c29a64c..938f06e 100644 --- a/ui/mainwindow.py +++ b/ui/mainwindow.py @@ -20,197 +20,8 @@ def setupUi(self, MainWindow): self.centralwidget = QtWidgets.QWidget(MainWindow) self.centralwidget.setStatusTip("") self.centralwidget.setObjectName("centralwidget") - self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.centralwidget) - self.verticalLayout_3.setObjectName("verticalLayout_3") - self.tabWidget = QtWidgets.QTabWidget(self.centralwidget) - self.tabWidget.setObjectName("tabWidget") - self.introTab = QtWidgets.QWidget() - self.introTab.setEnabled(True) - self.introTab.setObjectName("introTab") - self.gridLayout = QtWidgets.QGridLayout(self.introTab) - self.gridLayout.setObjectName("gridLayout") - self.horizontalLayout_6 = QtWidgets.QHBoxLayout() - self.horizontalLayout_6.setObjectName("horizontalLayout_6") - spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_6.addItem(spacerItem) - self.label_19 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(28) - self.label_19.setFont(font) - self.label_19.setObjectName("label_19") - self.horizontalLayout_6.addWidget(self.label_19) - spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_6.addItem(spacerItem1) - self.gridLayout.addLayout(self.horizontalLayout_6, 0, 0, 1, 1) - self.label_28 = QtWidgets.QLabel(self.introTab) - self.label_28.setText("") - self.label_28.setObjectName("label_28") - self.gridLayout.addWidget(self.label_28, 4, 0, 1, 1) - self.label_20 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_20.setFont(font) - self.label_20.setText("") - self.label_20.setObjectName("label_20") - self.gridLayout.addWidget(self.label_20, 1, 0, 1, 1) - spacerItem2 = QtWidgets.QSpacerItem(20, 40, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding) - self.gridLayout.addItem(spacerItem2, 6, 0, 1, 1) - self.label_41 = QtWidgets.QLabel(self.introTab) - self.label_41.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) - self.label_41.setOpenExternalLinks(True) - self.label_41.setObjectName("label_41") - self.gridLayout.addWidget(self.label_41, 7, 0, 1, 1) - self.horizontalLayout_12 = QtWidgets.QHBoxLayout() - self.horizontalLayout_12.setObjectName("horizontalLayout_12") - spacerItem3 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_12.addItem(spacerItem3) - self.verticalLayout_10 = QtWidgets.QVBoxLayout() - self.verticalLayout_10.setObjectName("verticalLayout_10") - self.label_22 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_22.setFont(font) - self.label_22.setObjectName("label_22") - self.verticalLayout_10.addWidget(self.label_22) - self.label_38 = QtWidgets.QLabel(self.introTab) - self.label_38.setText("") - self.label_38.setObjectName("label_38") - self.verticalLayout_10.addWidget(self.label_38) - self.label_23 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_23.setFont(font) - self.label_23.setObjectName("label_23") - self.verticalLayout_10.addWidget(self.label_23) - self.label_24 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_24.setFont(font) - self.label_24.setObjectName("label_24") - self.verticalLayout_10.addWidget(self.label_24) - self.label_25 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_25.setFont(font) - self.label_25.setObjectName("label_25") - self.verticalLayout_10.addWidget(self.label_25) - self.label_26 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_26.setFont(font) - self.label_26.setObjectName("label_26") - self.verticalLayout_10.addWidget(self.label_26) - self.label_27 = QtWidgets.QLabel(self.introTab) - font = QtGui.QFont() - font.setPointSize(14) - self.label_27.setFont(font) - self.label_27.setObjectName("label_27") - self.verticalLayout_10.addWidget(self.label_27) - self.horizontalLayout_12.addLayout(self.verticalLayout_10) - spacerItem4 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_12.addItem(spacerItem4) - self.gridLayout.addLayout(self.horizontalLayout_12, 3, 0, 1, 1) - self.tabWidget.addTab(self.introTab, "") - self.keyTab = QtWidgets.QWidget() - self.keyTab.setStyleSheet("") - self.keyTab.setObjectName("keyTab") - self.verticalLayout_2 = QtWidgets.QVBoxLayout(self.keyTab) - self.verticalLayout_2.setObjectName("verticalLayout_2") - self.label_42 = QtWidgets.QLabel(self.keyTab) - font = QtGui.QFont() - font.setBold(True) - font.setItalic(False) - font.setWeight(75) - self.label_42.setFont(font) - self.label_42.setAlignment(QtCore.Qt.AlignRight|QtCore.Qt.AlignTrailing|QtCore.Qt.AlignVCenter) - self.label_42.setObjectName("label_42") - self.verticalLayout_2.addWidget(self.label_42) - self.scrollArea = QtWidgets.QScrollArea(self.keyTab) - self.scrollArea.setEnabled(True) - self.scrollArea.setStyleSheet("QAbstractScrollArea\n" -"{\n" -"background-color: transparent;\n" -"}\n" -"QWidget#scrollAreaWidgetContents{\n" -"background-color: transparent; /*or a colour*/\n" -"} ") - self.scrollArea.setFrameShadow(QtWidgets.QFrame.Sunken) - self.scrollArea.setWidgetResizable(True) - self.scrollArea.setObjectName("scrollArea") - self.scrollAreaWidgetContents = QtWidgets.QWidget() - self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 98, 28)) - self.scrollAreaWidgetContents.setStyleSheet("") - self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") - self.scrollArea.setWidget(self.scrollAreaWidgetContents) - self.verticalLayout_2.addWidget(self.scrollArea) - self.tabWidget.addTab(self.keyTab, "") - self.sourceTab = QtWidgets.QWidget() - self.sourceTab.setStyleSheet("") - self.sourceTab.setObjectName("sourceTab") - self.verticalLayout_8 = QtWidgets.QVBoxLayout(self.sourceTab) - self.verticalLayout_8.setObjectName("verticalLayout_8") - self.label_14 = QtWidgets.QLabel(self.sourceTab) - self.label_14.setObjectName("label_14") - self.verticalLayout_8.addWidget(self.label_14) - self.label_15 = QtWidgets.QLabel(self.sourceTab) - self.label_15.setTextFormat(QtCore.Qt.AutoText) - self.label_15.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignVCenter) - self.label_15.setObjectName("label_15") - self.verticalLayout_8.addWidget(self.label_15) - self.sourcesTabs = QtWidgets.QTabWidget(self.sourceTab) - self.sourcesTabs.setTabPosition(QtWidgets.QTabWidget.North) - self.sourcesTabs.setTabShape(QtWidgets.QTabWidget.Rounded) - self.sourcesTabs.setElideMode(QtCore.Qt.ElideNone) - self.sourcesTabs.setUsesScrollButtons(True) - self.sourcesTabs.setTabsClosable(False) - self.sourcesTabs.setTabBarAutoHide(False) - self.sourcesTabs.setObjectName("sourcesTabs") - self.verticalLayout_8.addWidget(self.sourcesTabs) - self.tabWidget.addTab(self.sourceTab, "") - self.queueTab = QtWidgets.QWidget() - self.queueTab.setObjectName("queueTab") - self.verticalLayout = QtWidgets.QVBoxLayout(self.queueTab) - self.verticalLayout.setObjectName("verticalLayout") - self.queueLayout = QtWidgets.QVBoxLayout() - self.queueLayout.setObjectName("queueLayout") - self.groupBox = QtWidgets.QGroupBox(self.queueTab) - self.groupBox.setObjectName("groupBox") - self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox) - self.horizontalLayout_2.setContentsMargins(9, 9, 9, 9) - self.horizontalLayout_2.setObjectName("horizontalLayout_2") - self.queueStart = QtWidgets.QPushButton(self.groupBox) - self.queueStart.setObjectName("queueStart") - self.horizontalLayout_2.addWidget(self.queueStart) - self.queueStop = QtWidgets.QPushButton(self.groupBox) - self.queueStop.setObjectName("queueStop") - self.horizontalLayout_2.addWidget(self.queueStop) - self.queueClear = QtWidgets.QPushButton(self.groupBox) - self.queueClear.setObjectName("queueClear") - self.horizontalLayout_2.addWidget(self.queueClear) - spacerItem5 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) - self.horizontalLayout_2.addItem(spacerItem5) - self.queueUp = QtWidgets.QToolButton(self.groupBox) - self.queueUp.setToolButtonStyle(QtCore.Qt.ToolButtonIconOnly) - self.queueUp.setObjectName("queueUp") - self.horizontalLayout_2.addWidget(self.queueUp) - self.queueDown = QtWidgets.QToolButton(self.groupBox) - self.queueDown.setObjectName("queueDown") - self.horizontalLayout_2.addWidget(self.queueDown) - self.queueRemove = QtWidgets.QToolButton(self.groupBox) - self.queueRemove.setObjectName("queueRemove") - self.horizontalLayout_2.addWidget(self.queueRemove) - self.queueLayout.addWidget(self.groupBox) - self.verticalLayout.addLayout(self.queueLayout) - self.tabWidget.addTab(self.queueTab, "") - self.progressTab = QtWidgets.QWidget() - self.progressTab.setObjectName("progressTab") - self.verticalLayout_6 = QtWidgets.QVBoxLayout(self.progressTab) - self.verticalLayout_6.setObjectName("verticalLayout_6") - self.progressLayout = QtWidgets.QVBoxLayout() - self.progressLayout.setObjectName("progressLayout") - self.verticalLayout_6.addLayout(self.progressLayout) - self.tabWidget.addTab(self.progressTab, "") - self.verticalLayout_3.addWidget(self.tabWidget) + self.centralLayout = QtWidgets.QVBoxLayout(self.centralwidget) + self.centralLayout.setObjectName("centralLayout") MainWindow.setCentralWidget(self.centralwidget) self.menubar = QtWidgets.QMenuBar(MainWindow) self.menubar.setGeometry(QtCore.QRect(0, 0, 1082, 21)) @@ -316,37 +127,12 @@ def setupUi(self, MainWindow): self.menubar.addAction(self.menuHelp.menuAction()) self.retranslateUi(MainWindow) - self.tabWidget.setCurrentIndex(2) - self.sourcesTabs.setCurrentIndex(-1) QtCore.QMetaObject.connectSlotsByName(MainWindow) def retranslateUi(self, MainWindow): _translate = QtCore.QCoreApplication.translate MainWindow.setWindowTitle(_translate("MainWindow", "Reaper")) MainWindow.setStatusTip(_translate("MainWindow", "Visit http://reaper.social for help & tutorials")) - self.label_19.setText(_translate("MainWindow", "Welcome to Reaper!")) - self.label_41.setText(_translate("MainWindow", "
© Adam Smith, The University of Queensland
Developed by Adam Smith
")) - self.label_22.setText(_translate("MainWindow", "Reaper helps you gather social media data, no coding required.")) - self.label_23.setText(_translate("MainWindow", "Simply:")) - self.label_24.setText(_translate("MainWindow", "1. Add & verify your API Keys")) - self.label_25.setText(_translate("MainWindow", "2. Input your parameters")) - self.label_26.setText(_translate("MainWindow", "3. Add your scraping instruction to the queue")) - self.label_27.setText(_translate("MainWindow", "4. Download your data")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.introTab), _translate("MainWindow", "0. Introduction")) - self.label_42.setText(_translate("MainWindow", "By using these platforms, you are agreeing to their terms & conditions")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.keyTab), _translate("MainWindow", "1. API Keys")) - self.label_14.setText(_translate("MainWindow", "Select the source that you want to scrape from")) - self.label_15.setText(_translate("MainWindow", "Double-click a node to see and select its edges")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.sourceTab), _translate("MainWindow", "2. Sources")) - self.groupBox.setTitle(_translate("MainWindow", "Controls")) - self.queueStart.setText(_translate("MainWindow", "Start")) - self.queueStop.setText(_translate("MainWindow", "Stop")) - self.queueClear.setText(_translate("MainWindow", "Clear")) - self.queueUp.setText(_translate("MainWindow", "...")) - self.queueDown.setText(_translate("MainWindow", "...")) - self.queueRemove.setText(_translate("MainWindow", "...")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.queueTab), _translate("MainWindow", "3. Job Queue")) - self.tabWidget.setTabText(self.tabWidget.indexOf(self.progressTab), _translate("MainWindow", "4. Current Job")) self.menuFile.setTitle(_translate("MainWindow", "File")) self.menuOpen.setTitle(_translate("MainWindow", "Open")) self.menuBackups.setTitle(_translate("MainWindow", "Backups")) diff --git a/ui/mainwindow.ui b/ui/mainwindow.ui index 6beecac..4780804 100644 --- a/ui/mainwindow.ui +++ b/ui/mainwindow.ui @@ -26,442 +26,7 @@