Skip to content

Commit e599235

Browse files
committed
canvasmain -> __main__.py: Reimplement survey and statistics request as notifications
1 parent 894e189 commit e599235

File tree

3 files changed

+61
-66
lines changed

3 files changed

+61
-66
lines changed

Orange/canvas/__main__.py

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import pkg_resources
2121

22-
from AnyQt.QtGui import QFont, QColor, QPalette, QDesktopServices
22+
from AnyQt.QtGui import QFont, QColor, QPalette, QDesktopServices, QIcon
2323
from AnyQt.QtWidgets import QMessageBox
2424
from AnyQt.QtCore import (
2525
Qt, QDir, QUrl, QSettings, QThread, pyqtSignal, QT_VERSION
@@ -39,6 +39,7 @@
3939
from Orange.canvas.registry import qt
4040
from Orange.canvas.registry import WidgetRegistry, set_global_registry
4141
from Orange.canvas.registry import cache
42+
from Orange.canvas.utils.overlay import NotificationWidget, NotificationOverlay
4243

4344
log = logging.getLogger(__name__)
4445

@@ -180,6 +181,57 @@ def make_sql_logger(level=logging.INFO):
180181
sql_log.addHandler(handler)
181182

182183

184+
def setup_notifications():
185+
settings = config.settings()
186+
187+
# If run for the fifth time, prompt short survey
188+
show_survey = settings["startup/show-short-survey"] and \
189+
settings["startup/launch-count"] >= 5
190+
if show_survey:
191+
surveyDialogButtons = NotificationWidget.Ok | NotificationWidget.Close
192+
surveyDialog = NotificationWidget(icon=QIcon("Orange/widgets/icons/information.png"),
193+
title="Survey",
194+
text="We want to understand our users better.\n"
195+
"Would you like to take a short survey?",
196+
standardButtons=surveyDialogButtons)
197+
198+
def handle_response(button):
199+
if surveyDialog.buttonRole(button) == NotificationWidget.AcceptRole:
200+
success = QDesktopServices.openUrl(
201+
QUrl("https://orange.biolab.si/survey/short.html"))
202+
settings["startup/show-short-survey"] = not success
203+
elif surveyDialog.buttonRole(button) == NotificationWidget.RejectRole:
204+
settings["startup/show-short-survey"] = False
205+
206+
surveyDialog.clicked.connect(handle_response)
207+
208+
NotificationOverlay.registerNotification(surveyDialog)
209+
210+
# data collection permission
211+
if not settings["error-reporting/permission-requested"]:
212+
permDialogButtons = NotificationWidget.Ok | NotificationWidget.Close
213+
permDialog = NotificationWidget(icon=QIcon("distribute/icon-48.png"),
214+
title="Anonymous Usage Statistics",
215+
text="Do you wish to opt-in to sharing "
216+
"statistics about how you use Orange?\n"
217+
"All data is anonymized and used "
218+
"exclusively for understanding how users "
219+
"interact with Orange.",
220+
standardButtons=permDialogButtons)
221+
btnOK = permDialog.button(NotificationWidget.AcceptRole)
222+
btnOK.setText("Allow")
223+
224+
def handle_response(button):
225+
if permDialog.buttonRole(button) != permDialog.DismissRole:
226+
settings["error-reporting/permission-requested"] = True
227+
if permDialog.buttonRole(button) == permDialog.AcceptRole:
228+
settings["error-reporting/send-statistics"] = True
229+
230+
permDialog.clicked.connect(handle_response)
231+
232+
NotificationOverlay.registerNotification(permDialog)
233+
234+
183235
def check_for_updates():
184236
settings = QSettings()
185237
check_updates = settings.value('startup/check-updates', True, type=bool)
@@ -244,8 +296,8 @@ def compare_versions(latest):
244296
thread.start()
245297
return thread
246298

247-
def send_usage_statistics():
248299

300+
def send_usage_statistics():
249301
class SendUsageStatistics(QThread):
250302
def run(self):
251303
try:
@@ -259,6 +311,7 @@ def run(self):
259311
thread.start()
260312
return thread
261313

314+
262315
def main(argv=None):
263316
if argv is None:
264317
argv = sys.argv
@@ -531,6 +584,9 @@ def show_message(message):
531584
open_requests[-1])
532585
canvas_window.load_scheme(open_requests[-1].toLocalFile())
533586

587+
# initialize notifications
588+
setup_notifications()
589+
534590
# local references prevent destruction
535591
update_check = check_for_updates()
536592
send_stat = send_usage_statistics()

Orange/canvas/application/canvasmain.py

Lines changed: 0 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -386,70 +386,6 @@ def touch():
386386

387387
self.notification_overlay = NotificationOverlay(self.scheme_widget)
388388

389-
self.setup_notifications()
390-
391-
def setup_notifications(self):
392-
settings = config.settings()
393-
394-
# If run for the first time, prompt short survey
395-
show_survey = settings["startup/show-survey"]
396-
if show_survey:
397-
surveyDialogButtons = NotificationWidget.Ok | NotificationWidget.Close
398-
surveyDialog = NotificationWidget(parent=self.scheme_widget,
399-
icon=QIcon("Orange/Dlg_down3.png"),
400-
title="Survey",
401-
text="We want to get to know our users better.\n"
402-
"Would you care to fill out a "
403-
"1-minute survey?",
404-
wordWrap=True,
405-
standardButtons=surveyDialogButtons)
406-
407-
def handle_response(button):
408-
if surveyDialog.buttonRole(button) == NotificationWidget.AcceptRole:
409-
success = QDesktopServices.openUrl(
410-
QUrl("https://orange.biolab.si/survey/short.html"))
411-
settings["startup/show-survey"] = not success
412-
elif surveyDialog.buttonRole(button) == NotificationWidget.RejectRole:
413-
settings["startup/show-survey"] = False
414-
415-
surveyDialog.clicked.connect(handle_response)
416-
417-
surveyDialog.setWidget(self.scheme_widget)
418-
surveyDialog.show()
419-
420-
# data collection permission
421-
if not settings["error-reporting/permission-requested"]:
422-
permDialogButtons = NotificationWidget.AcceptRole | NotificationWidget.RejectRole
423-
permDialog = NotificationWidget(parent=self.scheme_widget,
424-
text="Do you wish to share anonymous usage "
425-
"statistics to help improve Orange?",
426-
wordWrap=True,
427-
standardButtons=permDialogButtons)
428-
btnOK = permDialog.button(NotificationWidget.AcceptRole)
429-
btnOK.setText("Allow")
430-
431-
def respondToRequest():
432-
settings["error-reporting/permission-requested"] = True
433-
434-
def shareData():
435-
settings["error-reporting/send-statistics"] = True
436-
437-
permDialog.clicked.connect(respondToRequest)
438-
permDialog.accepted.connect(shareData)
439-
440-
permDialog.setStyleSheet("""
441-
MessageOverlayWidget {
442-
background: qlineargradient(
443-
x1: 0, y1: 0, x2: 0, y2: 1,
444-
stop:0 #666, stop:0.3 #6D6D6D, stop:1 #666)
445-
}
446-
MessageOverlayWidget QLabel#text-label {
447-
color: white;
448-
}""")
449-
450-
permDialog.setWidget(self.scheme_widget)
451-
permDialog.show()
452-
453389
def setup_actions(self):
454390
"""Initialize main window actions.
455391
"""

Orange/canvas/config.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,9 @@ def init():
5858

5959
("startup/launch-count", int, 0, ""),
6060

61+
("startup/show-short-survey", bool, True,
62+
"Has the user not been asked to take a short survey yet"),
63+
6164
("stylesheet", str, "orange",
6265
"QSS stylesheet to use"),
6366

0 commit comments

Comments
 (0)