示例#1
0
def exitApplication():
    config.mainWindow.textCommandParser.stopTtsAudio()
    # Run shutdown plugins
    if config.enablePlugins:
        for plugin in FileUtil.fileNamesWithoutExtension(os.path.join("plugins", "shutdown"), "py"):
            if not plugin in config.excludeShutdownPlugins:
                script = os.path.join(os.getcwd(), "plugins", "shutdown", "{0}.py".format(plugin))
                config.mainWindow.execPythonFile(script)
    ConfigUtil.save()
    if config.restartUBA and hasattr(config, "cli"):
        subprocess.Popen("{0} uba.py gui".format(sys.executable), shell=True)
示例#2
0
def exitApplication():
    config.mainWindow.textCommandParser.stopTtsAudio()
    # Run shutdown plugins
    if config.enablePlugins:
        for plugin in FileUtil.fileNamesWithoutExtension(
                os.path.join("plugins", "shutdown"), "py"):
            if not plugin in config.excludeShutdownPlugins:
                script = os.path.join(os.getcwd(), "plugins", "shutdown",
                                      "{0}.py".format(plugin))
                config.mainWindow.execPythonFile(script)
    ConfigUtil.save()
示例#3
0
def addMenuLayoutItems(parent, menu):
    items = (
        ("menu1_aleph_menu_layout", lambda: parent.setMenuLayout("aleph")),
        ("menu1_focus_menu_layout", lambda: parent.setMenuLayout("focus")),
        ("menu1_classic_menu_layout", lambda: parent.setMenuLayout("classic")),
    )
    for feature, action in items:
        addMenuItem(menu, feature, parent, action)
    layouts = FileUtil.fileNamesWithoutExtension(
        os.path.join("plugins", "layout"), "py")
    if layouts:
        menu.addSeparator()
        for pluginLayout in layouts:
            addMenuItem(menu,
                        pluginLayout,
                        parent,
                        lambda: parent.setMenuLayout(pluginLayout),
                        translation=False)
示例#4
0
def runStartupPlugins():
    if config.enablePlugins:
        for plugin in FileUtil.fileNamesWithoutExtension(os.path.join("plugins", "startup"), "py"):
            if not plugin in config.excludeStartupPlugins:
                script = os.path.join(os.getcwd(), "plugins", "startup", "{0}.py".format(plugin))
                config.mainWindow.execPythonFile(script)
    def setupUI(self):
        mainLayout = QVBoxLayout()

        mainLayout.addWidget(QLabel(self.translation[0]))

        subLayout = QHBoxLayout()

        layout = QVBoxLayout()
        layout.addWidget(QLabel(self.translation[1]))
        dataView1 = QListView()
        dataView1.setEditTriggers(QAbstractItemView.NoEditTriggers)
        dataViewModel1 = QStandardItemModel(dataView1)
        dataView1.setModel(dataViewModel1)
        for plugin in FileUtil.fileNamesWithoutExtension(
                os.path.join("plugins", "startup"), "py"):
            item = QStandardItem(plugin)
            item.setToolTip(plugin)
            item.setCheckable(True)
            item.setCheckState(
                Qt.CheckState.Unchecked if plugin in
                config.excludeStartupPlugins else Qt.CheckState.Checked)
            dataViewModel1.appendRow(item)
        dataViewModel1.itemChanged.connect(self.itemChanged1)
        layout.addWidget(dataView1)
        subLayout.addLayout(layout)

        layout = QVBoxLayout()
        layout.addWidget(QLabel(self.translation[2]))
        dataView2 = QListView()
        dataView2.setEditTriggers(QAbstractItemView.NoEditTriggers)
        dataViewModel2 = QStandardItemModel(dataView2)
        dataView2.setModel(dataViewModel2)
        for plugin in FileUtil.fileNamesWithoutExtension(
                os.path.join("plugins", "menu"), "py"):
            item = QStandardItem(plugin)
            item.setToolTip(plugin)
            item.setCheckable(True)
            item.setCheckState(Qt.CheckState.Unchecked if plugin in config.
                               excludeMenuPlugins else Qt.CheckState.Checked)
            dataViewModel2.appendRow(item)
        dataViewModel2.itemChanged.connect(self.itemChanged2)
        layout.addWidget(dataView2)
        subLayout.addLayout(layout)

        layout = QVBoxLayout()
        layout.addWidget(QLabel(self.translation[3]))
        dataView3 = QListView()
        dataView3.setEditTriggers(QAbstractItemView.NoEditTriggers)
        dataViewModel3 = QStandardItemModel(dataView3)
        dataView3.setModel(dataViewModel3)
        for plugin in FileUtil.fileNamesWithoutExtension(
                os.path.join("plugins", "context"), "py"):
            item = QStandardItem(plugin)
            item.setToolTip(plugin)
            item.setCheckable(True)
            item.setCheckState(
                Qt.CheckState.Unchecked if plugin in
                config.excludeContextPlugins else Qt.CheckState.Checked)
            dataViewModel3.appendRow(item)
        dataViewModel3.itemChanged.connect(self.itemChanged3)
        layout.addWidget(dataView3)
        subLayout.addLayout(layout)

        layout = QVBoxLayout()
        layout.addWidget(QLabel(self.translation[4]))
        dataView4 = QListView()
        dataView4.setEditTriggers(QAbstractItemView.NoEditTriggers)
        dataViewModel4 = QStandardItemModel(dataView4)
        dataView4.setModel(dataViewModel4)
        for plugin in FileUtil.fileNamesWithoutExtension(
                os.path.join("plugins", "shutdown"), "py"):
            item = QStandardItem(plugin)
            item.setToolTip(plugin)
            item.setCheckable(True)
            item.setCheckState(
                Qt.CheckState.Unchecked if plugin in
                config.excludeShutdownPlugins else Qt.CheckState.Checked)
            dataViewModel4.appendRow(item)
        dataViewModel4.itemChanged.connect(self.itemChanged4)
        layout.addWidget(dataView4)
        subLayout.addLayout(layout)

        mainLayout.addLayout(subLayout)

        self.setLayout(mainLayout)
示例#6
0
    def addMenuActions(self):

        subMenu = QMenu()

        for text in self.parent.parent.textList:
            action = QAction(self)
            action.setText(text)
            action.triggered.connect(
                partial(self.openReferenceInBibleVersion, text))
            subMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subMenu.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["all"])
        action.triggered.connect(self.compareAllVersions)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["openReferences"])
        action.setMenu(subMenu)
        self.addAction(action)

        subMenu = QMenu()

        for text in self.parent.parent.textList:
            action = QAction(self)
            action.setText(text)
            action.triggered.connect(
                partial(self.compareReferenceWithBibleVersion, text))
            subMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subMenu.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["all"])
        action.triggered.connect(self.compareAllVersions)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["compareReferences"])
        action.setMenu(subMenu)
        self.addAction(action)

        subMenu = QMenu()

        for text in self.parent.parent.textList:
            action = QAction(self)
            action.setText(text)
            action.triggered.connect(
                partial(self.parallelReferenceWithBibleVersion, text))
            subMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subMenu.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["all"])
        action.triggered.connect(self.compareAllVersions)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["parallelReferences"])
        action.setMenu(subMenu)
        self.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        self.addAction(separator)

        subMenu = QMenu()

        searchBibleReferences = QAction(self)
        searchBibleReferences.setText(
            config.thisTranslation["openOnNewWindow"])
        searchBibleReferences.triggered.connect(self.displayVersesInNewWindow)
        subMenu.addAction(searchBibleReferences)

        searchBibleReferences = QAction(self)
        searchBibleReferences.setText(config.thisTranslation["bar1_menu"])
        searchBibleReferences.triggered.connect(
            self.displayVersesInBibleWindow)
        subMenu.addAction(searchBibleReferences)

        searchBibleReferences = QAction(self)
        searchBibleReferences.setText(config.thisTranslation["bottomWindow"])
        searchBibleReferences.triggered.connect(
            self.displayVersesInBottomWindow)
        subMenu.addAction(searchBibleReferences)

        action = QAction(self)
        action.setText(config.thisTranslation["displayVerses"])
        action.setMenu(subMenu)
        self.addAction(action)

        if self.name in ("main", "study"):

            subMenu = QMenu()

            if hasattr(config, "cli"):
                action = QAction(self)
                action.setText(config.thisTranslation["cli"])
                action.triggered.connect(self.switchToCli)
                subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["openOnNewWindow"])
            action.triggered.connect(self.openOnNewWindow)
            subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["pdfDocument"])
            action.triggered.connect(self.exportToPdf)
            subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["displayContent"])
            action.setMenu(subMenu)
            self.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        self.addAction(separator)

        subMenu = QMenu()

        copyText = QAction(self)
        copyText.setText(config.thisTranslation["text"])
        copyText.triggered.connect(self.copySelectedText)
        subMenu.addAction(copyText)

        copyReferences = QAction(self)
        copyReferences.setText(config.thisTranslation["bibleReferences"])
        copyReferences.triggered.connect(self.copyAllReferences)
        subMenu.addAction(copyReferences)

        copyHtml = QAction(self)
        copyHtml.setText(config.thisTranslation["htmlCode"])
        copyHtml.triggered.connect(self.copyHtmlCode)
        subMenu.addAction(copyHtml)

        action = QAction(self)
        action.setText(config.thisTranslation["context1_copy"])
        action.setMenu(subMenu)
        self.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        self.addAction(separator)

        if self.name == "main":
            subMenu = QMenu()

            # Instant highlight feature
            action = QAction(self)
            action.setText(config.thisTranslation["menu_highlight"])
            action.triggered.connect(self.instantHighlight)
            subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["remove"])
            action.triggered.connect(self.removeInstantHighlight)
            subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["instantHighlight"])
            action.setMenu(subMenu)
            self.addAction(action)

            separator = QAction(self)
            separator.setSeparator(True)
            self.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["context1_search"])
        action.triggered.connect(self.searchPanel)
        self.addAction(action)

        subMenu = QMenu()

        self.searchText = QAction(self)
        self.searchText.setText("{0} [{1}]".format(
            config.thisTranslation["context1_search"], config.mainText))
        self.searchText.triggered.connect(self.searchSelectedText)
        subMenu.addAction(self.searchText)

        self.searchTextInBook = QAction(self)
        self.searchTextInBook.setText(
            config.thisTranslation["context1_current"])
        self.searchTextInBook.triggered.connect(self.searchSelectedTextInBook)
        subMenu.addAction(self.searchTextInBook)

        searchFavouriteBible = QAction(self)
        searchFavouriteBible.setText(
            config.thisTranslation["context1_favourite"])
        searchFavouriteBible.triggered.connect(
            self.searchSelectedFavouriteBible)
        subMenu.addAction(searchFavouriteBible)

        action = QAction(self)
        action.setText(config.thisTranslation["cp0"])
        action.setMenu(subMenu)
        self.addAction(action)

        subMenu = QMenu()

        bibleVerseParser = BibleVerseParser(config.parserStandarisation)
        for bookNo in range(1, 67):
            action = QAction(self)
            action.setText(bibleVerseParser.standardFullBookName[str(bookNo)])
            action.triggered.connect(
                partial(self.searchSelectedTextInBook, bookNo))
            subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["bibleBook"])
        action.setMenu(subMenu)
        self.addAction(action)

        subMenu = QMenu()

        for text in self.parent.parent.textList:
            action = QAction(self)
            action.setText(text)
            action.triggered.connect(partial(self.searchSelectedText, text))
            subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["bibleVersion"])
        action.setMenu(subMenu)
        self.addAction(action)

        # Search Strong's number bibles, if installed
        if self.parent.parent.strongBibles:
            subMenu = QMenu()
            for text in self.parent.parent.strongBibles:
                action = QAction(self)
                action.setText(text)
                action.triggered.connect(partial(self.searchStrongBible, text))
                subMenu.addAction(action)

            separator = QAction(self)
            separator.setSeparator(True)
            subMenu.addAction(separator)

            action = QAction(self)
            action.setText(config.thisTranslation["all"])
            action.triggered.connect(self.searchAllStrongBible)
            subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["bibleConcordance"])
            action.setMenu(subMenu)
            self.addAction(action)

        subMenu = QMenu()
        for keyword in ("SEARCHBOOKNOTE", "SEARCHCHAPTERNOTE",
                        "SEARCHVERSENOTE"):
            action = QAction(self)
            action.setText(config.thisTranslation[keyword])
            action.triggered.connect(partial(self.searchBibleNote, keyword))
            subMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subMenu.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["removeNoteHighlight"])
        action.triggered.connect(self.removeNoteHighlight)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["menu6_notes"])
        action.setMenu(subMenu)
        self.addAction(action)

        subMenu = QMenu()

        searchBibleCharacter = QAction(self)
        searchBibleCharacter.setText(
            config.thisTranslation["menu5_characters"])
        searchBibleCharacter.triggered.connect(self.searchCharacter)
        subMenu.addAction(searchBibleCharacter)

        searchBibleName = QAction(self)
        searchBibleName.setText(config.thisTranslation["menu5_names"])
        searchBibleName.triggered.connect(self.searchName)
        subMenu.addAction(searchBibleName)

        searchBibleLocation = QAction(self)
        searchBibleLocation.setText(config.thisTranslation["menu5_locations"])
        searchBibleLocation.triggered.connect(self.searchLocation)
        subMenu.addAction(searchBibleLocation)

        subSubMenu = QMenu()

        action = QAction(self)
        action.setText(config.thisTranslation["previous"])
        action.triggered.connect(self.searchTopic)
        subSubMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subSubMenu.addAction(separator)

        for module in self.parent.parent.topicListAbb:
            action = QAction(self)
            action.setText(module)
            action.triggered.connect(partial(self.searchResource, module))
            subSubMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["menu5_topics"])
        action.setMenu(subSubMenu)
        subMenu.addAction(action)

        subSubMenu = QMenu()

        action = QAction(self)
        action.setText(config.thisTranslation["previous"])
        action.triggered.connect(self.searchDictionary)
        subSubMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subSubMenu.addAction(separator)

        for module in self.parent.parent.dictionaryListAbb:
            action = QAction(self)
            action.setText(module)
            action.triggered.connect(partial(self.searchResource, module))
            subSubMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["context1_dict"])
        action.setMenu(subSubMenu)
        subMenu.addAction(action)

        subSubMenu = QMenu()

        action = QAction(self)
        action.setText(config.thisTranslation["previous"])
        action.triggered.connect(self.searchEncyclopedia)
        subSubMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subSubMenu.addAction(separator)

        for module in self.parent.parent.encyclopediaListAbb:
            action = QAction(self)
            action.setText(module)
            action.triggered.connect(partial(self.searchResource, module))
            subSubMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["context1_encyclopedia"])
        action.setMenu(subSubMenu)
        subMenu.addAction(action)

        subSubMenu = QMenu()

        action = QAction(self)
        action.setText(config.thisTranslation["previous"])
        action.triggered.connect(self.searchHebrewGreekLexicon)
        subSubMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subSubMenu.addAction(separator)

        for module in self.parent.parent.lexiconList:
            action = QAction(self)
            action.setText(module)
            action.triggered.connect(
                partial(self.searchHebrewGreekLexiconSelected, module))
            subSubMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["menu5_lexicon"])
        action.setMenu(subSubMenu)
        subMenu.addAction(action)

        subSubMenu = QMenu()

        action = QAction(self)
        action.setText(config.thisTranslation["previous"])
        action.triggered.connect(self.searchThirdPartyDictionary)
        subSubMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subSubMenu.addAction(separator)

        for module in self.parent.parent.thirdPartyDictionaryList:
            action = QAction(self)
            action.setText(module)
            action.triggered.connect(
                partial(self.searchThirdPartyDictionarySelected, module))
            subSubMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["menu5_3rdDict"])
        action.setMenu(subSubMenu)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["bibleResources"])
        action.setMenu(subMenu)
        self.addAction(action)

        subMenu = QMenu()

        action = QAction(self)
        action.setText(config.thisTranslation["previous"])
        action.triggered.connect(self.searchPreviousBook)
        subMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subMenu.addAction(separator)

        subSubMenu = QMenu()

        for module in config.favouriteBooks:
            action = QAction(self)
            action.setText(module)
            action.triggered.connect(partial(self.searchSelectedBook, module))
            subSubMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subSubMenu.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["all"])
        action.triggered.connect(self.searchFavouriteBooks)
        subSubMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["context1_favouriteBooks"])
        action.setMenu(subSubMenu)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["context1_allBooks"])
        action.triggered.connect(self.searchAllBooks)
        subMenu.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        subMenu.addAction(separator)

        action = QAction(self)
        action.setText(config.thisTranslation["removeBookHighlight"])
        action.triggered.connect(self.removeBookHighlight)
        subMenu.addAction(action)

        action = QAction(self)
        action.setText(config.thisTranslation["installBooks"])
        action.setMenu(subMenu)
        self.addAction(action)

        separator = QAction(self)
        separator.setSeparator(True)
        self.addAction(separator)

        # TEXT-TO-SPEECH feature
        languages = self.parent.parent.getTtsLanguages()
        tts = QAction(self)
        tts.setText("{0} [{1}]".format(
            config.thisTranslation["context1_speak"],
            languages[config.ttsDefaultLangauge][1].capitalize()))
        tts.triggered.connect(self.textToSpeech)
        self.addAction(tts)

        if config.isTtsInstalled:
            ttsMenu = QMenu()
            languageCodes = list(languages.keys())
            items = [languages[code][1] for code in languageCodes]
            for index, item in enumerate(items):
                languageCode = languageCodes[index]
                action = QAction(self)
                action.setText(item.capitalize())
                action.triggered.connect(
                    partial(self.textToSpeechLanguage, languageCode))
                ttsMenu.addAction(action)

            tts = QAction(self)
            tts.setText(config.thisTranslation["context1_speak"])
            tts.setMenu(ttsMenu)
            self.addAction(tts)

        separator = QAction(self)
        separator.setSeparator(True)
        self.addAction(separator)

        # IBM-Watson Translation Service

        # Translate into User-defined Language
        userLanguage = config.userLanguage
        translateText = QAction(self)
        translateText.setText("{0} [{1}]".format(
            config.thisTranslation["context1_translate"], userLanguage))
        translateText.triggered.connect(self.checkUserLanguage)
        self.addAction(translateText)

        translateMenu = QMenu()
        for index, item in enumerate(Translator.toLanguageNames):
            languageCode = Translator.toLanguageCodes[index]
            action = QAction(self)
            action.setText(item)
            action.triggered.connect(
                partial(self.selectedTextToSelectedLanguage, languageCode))
            translateMenu.addAction(action)

        translate = QAction(self)
        translate.setText(config.thisTranslation["watsonTranslator"])
        translate.setMenu(translateMenu)
        self.addAction(translate)

        translateMenu = QMenu()
        for language, languageCode in Languages.googleTranslateCodes.items():
            action = QAction(self)
            action.setText(language)
            action.triggered.connect(
                partial(self.googleTranslate, languageCode))
            translateMenu.addAction(action)

        translate = QAction(self)
        translate.setText(config.thisTranslation["googleTranslate"])
        translate.setMenu(translateMenu)
        self.addAction(translate)

        # Context menu plugins
        if config.enablePlugins:

            separator = QAction(self)
            separator.setSeparator(True)
            self.addAction(separator)

            subMenu = QMenu()

            for plugin in FileUtil.fileNamesWithoutExtension(
                    os.path.join("plugins", "context"), "py"):
                if not plugin in config.excludeContextPlugins:
                    action = QAction(self)
                    if "_" in plugin:
                        feature, shortcut = plugin.split("_", 1)
                        action.setText(feature)
                        # The following line does not work
                        #action.setShortcut(QKeySequence(shortcut))
                        self.parent.parent.addContextPluginShortcut(
                            plugin, shortcut)
                    else:
                        action.setText(plugin)
                    action.triggered.connect(partial(self.runPlugin, plugin))
                    subMenu.addAction(action)

            separator = QAction(self)
            separator.setSeparator(True)
            subMenu.addAction(separator)

            action = QAction(self)
            action.setText(config.thisTranslation["enableIndividualPlugins"])
            action.triggered.connect(
                self.parent.parent.enableIndividualPluginsWindow)
            subMenu.addAction(action)

            action = QAction(self)
            action.setText(config.thisTranslation["menu_plugins"])
            action.setMenu(subMenu)
            self.addAction(action)
示例#7
0
config.activeVerseNoColour = config.activeVerseNoColourDark if config.theme == "dark" else config.activeVerseNoColourLight

# Assign mainWindow to config.mainWindow, to make it acessible from user customised user script
config.mainWindow = MainWindow()

# Check screen size
availableGeometry = app.desktop().availableGeometry(config.mainWindow)
setupMainWindow(availableGeometry)

# A container of functions to be run after UBA loaded history records on startup
# This offers a way for startup plugins to run codes after history records being loaded.
config.actionsRightAfterLoadingHistoryRecords = []

# Run startup plugins
if config.enablePlugins:
    for plugin in FileUtil.fileNamesWithoutExtension(
            os.path.join("plugins", "startup"), "py"):
        if not plugin in config.excludeStartupPlugins:
            script = os.path.join(os.getcwd(), "plugins", "startup",
                                  "{0}.py".format(plugin))
            config.mainWindow.execPythonFile(script)

# Run initial commands
if config.populateTabsOnStartup:
    openBibleWindowContentOnNextTab, openStudyWindowContentOnNextTab = config.openBibleWindowContentOnNextTab, config.openStudyWindowContentOnNextTab
    config.openBibleWindowContentOnNextTab = True
    config.openStudyWindowContentOnNextTab = True
    # Execute initial command on Bible Window
    populateTabsOnStartup("main")
    # Execute initial command on Study Window
    populateTabsOnStartup("study")
    config.openBibleWindowContentOnNextTab, config.openStudyWindowContentOnNextTab = openBibleWindowContentOnNextTab, openStudyWindowContentOnNextTab