Exemplo n.º 1
0
 def build_layout(self, model):
     self.clear_layout(self.dicts_layout)
     label1 = QLabel("")
     label1.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
     label2 = QLabel(_("DICTS"))
     label2.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
     label3 = QLabel(_("DICT_FIELDS"))
     label3.setSizePolicy(QSizePolicy.Preferred, QSizePolicy.Fixed)
     self.dicts_layout.addWidget(label1, 0, 0)
     self.dicts_layout.addWidget(label2, 0, 1)
     self.dicts_layout.addWidget(label3, 0, 2)
     maps = config.get_maps(model['id'])
     for i, fld in enumerate(model['flds']):
         ord = fld['ord']
         name = fld['name']
         if maps:
             for j, each in enumerate(maps):
                 if each.get('fld_ord', -1) == ord:
                     self.add_dict_layout(j,
                                          fld_name=name,
                                          word_checked=each['word_checked'],
                                          dict=each['dict'],
                                          dict_field=each['dict_field'],
                                          dict_path=each.get(
                                              'dict_path', ''))
                     break
             else:
                 self.add_dict_layout(i, fld_name=name)
         else:
             self.add_dict_layout(i, fld_name=name)
     self.setLayout(self.main_layout)
Exemplo n.º 2
0
    def on_action_enable_share(self):
        if not self.cap_screen:
            return

        self.ipc = Ipc(self.on_rpc_event)
        ret, share_id = self.ipc.producer_init(config.REDIS_HOST, config.REDIS_PORT, config.REDIS_DB)
        if not ret:
            QtWidgets.QMessageBox.critical(
                self, _(config.TITLE_ERROR),
                _("Fail to connect redis server\n%s:%d" % (config.REDIS_HOST, config.REDIS_PORT)))
            self.ipc = None
            return

        # 若定时器未初始化过,则先初始化并绑定信号槽
        if self.frame_timer is None:
            self.frame_timer = QtCore.QTimer()
            self.frame_timer.timeout.connect(self.update_frame_in_timer)

        self.frame_queue.clear()
        self.frame_timer.start(10)

        self.set_tip_message(_("Sharing with ID: %d") % share_id)
        self.ipc.start()

        self.ui.actionShare.setText(_("Disable share"))
Exemplo n.º 3
0
 def build(self):
     layout = QVBoxLayout()
     btn_layout = QHBoxLayout()
     add_btn = QPushButton("+")
     remove_btn = QPushButton("-")
     btn_layout.addWidget(add_btn)
     btn_layout.addWidget(remove_btn)
     add_btn.clicked.connect(self.add_folder)
     remove_btn.clicked.connect(self.remove_folder)
     self.folders_lst = QListWidget()
     self.folders_lst.addItems(config.get_dirs())
     self.chk_use_filename = QCheckBox(_('CHECK_FILENAME_LABEL'))
     self.chk_export_media = QCheckBox(_('EXPORT_MEDIA'))
     self.chk_use_filename.setChecked(config.use_filename())
     self.chk_export_media.setChecked(config.export_media())
     chk_layout = QHBoxLayout()
     chk_layout.addWidget(self.chk_use_filename)
     chk_layout.addWidget(self.chk_export_media)
     btnbox = QDialogButtonBox(QDialogButtonBox.Ok, Qt.Horizontal, self)
     btnbox.accepted.connect(self.accept)
     layout.addLayout(btn_layout)
     layout.addWidget(self.folders_lst)
     layout.addLayout(chk_layout)
     layout.addWidget(btnbox)
     self.setLayout(layout)
Exemplo n.º 4
0
    def on_action_start_recorder(self):
        if len(self.record_frames) > 0:
            QtWidgets.QMessageBox.critical(
                self, _(config.TITLE_INFO),
                _("Please try after current video been saved"))
            return
        self.record_timer.start(config.MAX_RECORD_MIN * 60 * 1000)
        self.recording = True
        self.set_tip_message(_("Recording (time limit %d min)...") % config.MAX_RECORD_MIN)
        mp4file = os.path.join(config.VIDEO_DIR, time.strftime("%y-%m-%d/%H-%M-%S.mp4"))
        _dir = os.path.dirname(mp4file)
        if not os.path.exists(_dir):
            try:
                os.makedirs(_dir)
            except OSError as err:
                logger.error("fail to create video path: %s" % err)
                mp4file = "tmp.mp4"
        orientation = self.ui.screen.get_orientation()
        if orientation == self.ui.screen.VERTICAL:
            logger.debug("VERTICAL recorder")
            width, height = self.mini_cap_head.virtual_width, self.mini_cap_head.virtual_height
        else:
            logger.debug("HORIZONTAL recorder")
            width, height = self.mini_cap_head.virtual_height, self.mini_cap_head.virtual_width
        recorder.init(mp4file, 40, width, height)
        self.record_frames = []

        self.ui.actionRecorder.setText(_("Stop video recorder ..."))
Exemplo n.º 5
0
def query_from_menu():
    browser = context['browser']
    if not browser:
        return
    notes = [browser.mw.col.getNote(note_id)
             for note_id in browser.selectedNotes()]
    if len(notes) == 0:
        return
    if len(notes) == 1:
        context['editor'] = browser.editor
        query_from_editor()
    if len(notes) > 1:
        fields_number = 0
        update_progress_label.kwargs = defaultdict(str)
        mw.progress.start(immediate=True, label="Querying...")
        for i, note in enumerate(notes):
            word_ord, word, maps = inspect_note(note)
            if not word:
                continue
            results = query_all_flds(word_ord, word, maps)
            for j, q in results.items():
                if not isinstance(q, QueryResult):
                    continue
                update_note_field(note, j, q)
                # note.flush()
            fields_number += len(results)
            update_progress_label(
                {'words_number': i + 1, 'fields_number': fields_number})
        browser.model.reset()
        mw.progress.finish()
        # browser.model.reset()
        # browser.endReset()
        tooltip(u'%s %d %s' % (_('UPDATED'), len(notes), _('CARDS')))
Exemplo n.º 6
0
 def on_action_send_text(self):
     """向设备发送文本"""
     if not self.cap_screen:
         return
     text, ret = QtWidgets.QInputDialog.getText(self, _("Send text"), _("Please input the content"))
     if not ret:
         return
     self.cap_screen.touch.send_text(text)
Exemplo n.º 7
0
 def on_rotation_changed(self, angle, virtual_width=config.DEFAULT_WIDTH):
     logger.debug("on_rotation_changed. angle={}".format(angle))
     self.angle = angle
     if self.cap_screen:
         self.cap_screen.stop()
     adb_helper.restart_mini_cap(angle=angle, virtual_width=virtual_width)
     self.ui.screen.set_orientation(angle)
     self.show_starting_dialog(title=_("Rotating"), text=_("Adapting screen rotation, wait about 3 seconds"),
                               cap_start=True)
Exemplo n.º 8
0
 def on_start_result(self, ret):
     if ret == 0:
         self.update_ui_on_started()
     else:
         self.dismiss_starting_dialog()
         QtWidgets.QMessageBox.critical(
             self, _(config.TITLE_ERROR),
             _("Connect failed, please retry after reset your USB line"))
         self.close()
Exemplo n.º 9
0
def update_progress_label(info):
    update_progress_label.kwargs.update(info)
    words_number, fields_number = update_progress_label.kwargs.get(
        'words_number', 0), update_progress_label.kwargs.get('fields_number', 0)
    number_info = '<br>%s %d %s, %d %s' % (_('QUERIED'), words_number, _(
        'WORDS'), fields_number, _('FIELDS')) if words_number and fields_number else ""
    mw.progress.update(label="Querying <b>%s</b>...<br>[%s] %s%s" % (
        update_progress_label.kwargs[
            'word'], update_progress_label.kwargs['service_name'],
        update_progress_label.kwargs['field_name'], number_info))
Exemplo n.º 10
0
    def on_action_remote_screen(self):
        if self.share_proc:
            return self.on_disconnect_remote_screen()

        share_id, ret = QtWidgets.QInputDialog.getInt(
            self, _("Remote share"), _("Please input your share id"), value=Ipc.MIN_SHARE_ID)
        if not ret:
            return
        frame_queue, tmp = Ipc.make_queue(share_id)
        self.share_val.value = 0
        self.share_proc = multiprocessing.Process(target=remote_screen.start, args=(self.share_val, frame_queue, ))
        self.share_proc.start()
        Toast.show_(self, _("Remote screen started, waiting frame ..."))
        logger.debug("remote screen started, pid: %d" % self.share_proc.pid)
        self.ui.actionRemote_screen.setText(_("Disconnect remote screen..."))
Exemplo n.º 11
0
    def __init__(self, parent=None):
        QtWidgets.QMainWindow.__init__(self, parent)
        self.ui = Ui_MainWindow()
        self.setup_ui()
        self.ui.screen.set_disconnect_callback(self.on_disconnected)
        self.setup_signal()
        self.cap_screen = None
        self.queue = multiprocessing.Queue()
        self.starting_dialog = None
        self.timer = None
        self.check_code = -1
        self.recording = False
        self.record_frames = []
        self.record_timer = QtCore.QTimer()
        self.record_timer.timeout.connect(self.on_record_timeout)
        self.mini_cap_head = None
        self.ipc = None
        # 是否连接过本地手机
        self.cap_used = False
        self.is_first_start = True
        self.customer_running = False
        self.device_name = ""
        self.angle = 0
        self.virtual_width = config.DEFAULT_WIDTH
        self.rotation_watcher = None
        self.share_proc = None
        self.share_val = multiprocessing.Value("i", 0)

        self.frame_timer = None
        self.frame_queue = deque()

        self.donate_scene = QtWidgets.QGraphicsScene(self)
        self.donate_view = QtWidgets.QGraphicsView(self.donate_scene)
        self.donate_view.setWindowTitle(_("Donate"))
        self.donate_scene.addItem(QtWidgets.QGraphicsPixmapItem(QtGui.QPixmap(":/app/icons/app/donate.jpg")))
Exemplo n.º 12
0
 def save_task(frames):
     recorder.write_frames(frames)
     mp4file = recorder.finish()
     self.set_tip_message("%s" % mp4file.replace("\\", "/"))
     self.record_frames = []
     self.ui.actionRecorder.setEnabled(not self.recording)
     self.ui.actionRecorder.setText(_("Start video recorder ..."))
Exemplo n.º 13
0
def query_from_editor():
    editor = context['editor']
    if not editor:
        return
    word, word_ord = None, 0
    fld_index = editor.currentField
    word_ord, word, maps = inspect_note(editor.note)
    if not word:
        showInfo(_("NO_QUERY_WORD"))
        return
    mw.progress.start(immediate=True, label="Querying...")
    update_progress_label.kwargs = defaultdict(str)
    # if the focus falls into the word field, then query all note fields,
    # else only query the current focused field.
    if fld_index == word_ord:
        results = query_all_flds(word_ord, word, maps)
        # showText(str(results))
        for i, q in results.items():
            if not isinstance(q, QueryResult):
                continue
            update_note_field(editor.note, i, q)
    else:
        q = query_single_fld(word, fld_index, maps)
        if not isinstance(q, QueryResult):
            return
        update_note_field(editor.note, fld_index, q)

    # editor.note.flush()
    # showText(str(editor.note.model()['tmpls']))
    mw.progress.finish()
    editor.setNote(editor.note, focus=True)
    editor.saveNow()
Exemplo n.º 14
0
    def add_dict_layout(self, i, **kwargs):
        """
        kwargs:
        word_checked  dict  fld_name dict_field
        """
        word_checked, dict_name, dict_path, fld_name, dict_field = kwargs.get(
            'word_checked',
            False), kwargs.get('dict', _('NOT_DICT_FIELD')), kwargs.get(
                'dict_path', ''), kwargs.get('fld_name',
                                             ''), kwargs.get('dict_field', '')

        fldname_label = QRadioButton(fld_name)
        fldname_label.setMinimumSize(100, 0)
        fldname_label.setMaximumSize(100, 30)
        fldname_label.setSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed)
        fldname_label.setCheckable(True)
        fldname_label.clicked.connect(self.radio_btn_checked)
        fldname_label.setChecked(word_checked)

        dict_combo = QComboBox()
        dict_combo.setMinimumSize(130, 0)
        dict_combo.setFocusPolicy(0x1 | 0x2 | 0x8 | 0x4)
        dict_combo.setEnabled(not word_checked)
        dict_combo.currentIndexChanged.connect(
            self.dict_combobox_index_changed)
        self.fill_dict_combo_options(dict_combo)
        self.set_combo_options(dict_combo, dict_name)
        # dict_combo.activated.connect(self.dict_combobox_activated)

        field_combo = QComboBox()
        field_combo.setMinimumSize(130, 0)
        # field_combo.setMaximumSize(130, 30)
        field_combo.setEnabled((not word_checked)
                               and (dict_name != _('NOT_DICT_FIELD')))
        field_combo.setEditable(True)
        field_combo.setEditText(dict_field)
        self.fill_field_combo_options(field_combo, dict_name, dict_path)

        # self.connect(dict_check, SIGNAL("clicked()"),
        #              self.signal_mapper_chk, SLOT("map()"))
        # self.signal_mapper_chk.setMapping(dict_check, i)
        # self.dicts_layout.addWidget(dict_check, i, 0)
        self.dicts_layout.addWidget(fldname_label, i + 1, 0)
        self.dicts_layout.addWidget(dict_combo, i + 1, 1)
        self.dicts_layout.addWidget(field_combo, i + 1, 2)

        self.setLayout(self.main_layout)
Exemplo n.º 15
0
 def radio_btn_checked(self):
     rbs = self.findChildren(QRadioButton)
     dict_cbs, fld_cbs = self._get_combos(2)
     for i, rb in enumerate(rbs):
         dict_cbs[i].setEnabled(not rb.isChecked())
         fld_cbs[i].setEnabled(
             (dict_cbs[i].currentText() != _('NOT_DICT_FIELD'))
             and (not rb.isChecked()))
Exemplo n.º 16
0
 def __init__(self):
     
     self.win = gtk.Window(gtk.WINDOW_TOPLEVEL)
     self.win.connect("destroy", lambda w : gtk.main_quit())
     
     self.fixed = gtk.Fixed()
     self.ok_btn = gtk.Button(_(0))
     self.can_btn = gtk.Button(_(1))
     self.en_btn = gtk.Button("替换英文")
     self.en_btn.connect("clicked", self.en_btn_clicked)
     self.cn_btn = gtk.Button("替换成中文")
     self.cn_btn.connect("clicked", self.cn_btn_clicked)
     self.fixed.put(self.ok_btn, 50, 50)
     self.fixed.put(self.can_btn, 150, 50)
     self.fixed.put(self.en_btn, 250, 50)
     self.fixed.put(self.cn_btn, 380, 50)
     self.win.add(self.fixed)
     self.win.show_all()
Exemplo n.º 17
0
 def on_start_up_timer():
     value = self.starting_dialog.value()
     self.starting_dialog.setValue(value + 1)
     pid = adb_helper.current_device().get_pid(config.MINICAP)
     if pid:
         logger.debug("minicap pid is %s" % pid)
         if not cap_start:
             self.dismiss_starting_dialog()
             return
         self.dismiss_starting_dialog()
         self.on_action_start(ready=True)
         mini_touch_pid = adb_helper.current_device().get_pid(config.MINITOUCH)
         logger.debug("minitouch pid is %s" % mini_touch_pid)
     elif value >= max_value - 1:
         self.dismiss_starting_dialog()
         QtWidgets.QMessageBox.critical(
             self, _(config.TITLE_ERROR),
             _("Fatal error occurred, please restart"))
         self.close()
Exemplo n.º 18
0
    def on_action_disable_share(self):
        if self.ipc is None:
            logger.error("self.ipc is None")
            return
        self.frame_timer.stop()
        self.ipc.stop()
        self.ipc = None
        self.set_tip_message("")

        self.ui.actionShare.setText(_("Enable share"))
Exemplo n.º 19
0
 def fill_dict_combo_options(self, dict_combo):
     dict_combo.clear()
     dict_combo.addItem(_('NOT_DICT_FIELD'))
     dict_combo.insertSeparator(dict_combo.count())
     for each in mdx_service_manager.services:
         # combo_data.insert("data", each.label)
         dict_combo.addItem(each.title, userData=each.label)
     dict_combo.insertSeparator(dict_combo.count())
     for s in web_service_manager.services:
         # combo_data.insert("data", "webservice")
         dict_combo.addItem(s.label, userData="webservice")
Exemplo n.º 20
0
    def build(self):
        self.main_layout = QVBoxLayout()
        models_layout = QHBoxLayout()
        # add buttons
        mdx_button = QPushButton(_('DICTS_FOLDERS'))
        mdx_button.clicked.connect(self.show_mdx_dialog)
        self.models_button = QPushButton(_('CHOOSE_NOTE_TYPES'))
        self.models_button.clicked.connect(self.btn_models_pressed)
        models_layout.addWidget(mdx_button)
        models_layout.addWidget(self.models_button)
        self.main_layout.addLayout(models_layout)
        # add dicts mapping
        dicts_widget = QWidget()
        self.dicts_layout = QGridLayout()
        self.dicts_layout.setSizeConstraint(QLayout.SetMinAndMaxSize)
        dicts_widget.setLayout(self.dicts_layout)

        scroll_area = QScrollArea()
        scroll_area.setWidgetResizable(True)
        scroll_area.setWidget(dicts_widget)

        self.main_layout.addWidget(scroll_area)
        # add description of radio buttons AND ok button
        bottom_layout = QHBoxLayout()
        btnbox = QDialogButtonBox(QDialogButtonBox.Ok, Qt.Horizontal, self)
        btnbox.accepted.connect(self.accept)
        bottom_layout.addWidget(QLabel(_("RADIOS_DESC")))
        bottom_layout.addWidget(btnbox)
        self.main_layout.addLayout(bottom_layout)
        # self.signal_mapper_chk.mapped.connect(self.chkbox_state_changed)
        self.setLayout(self.main_layout)

        # init saved data
        if config.last_model_id:
            model = get_model_byId(mw.col.models, config.last_model_id)
            if model:
                self.models_button.setText(
                    u'%s [%s]' % (_('CHOOSE_NOTE_TYPES'), model['name']))
                # build fields -- dicts layout
                self.build_layout(model)
Exemplo n.º 21
0
    def show_starting_dialog(self, title=_("First start"),
                             text=_("Init env, please wait(about 6 seconds)..."),
                             cap_start=False):
        logger.debug("show starting dialog")
        if self.timer:
            return
        max_value = 30
        self.timer = QtCore.QTimer()
        self.starting_dialog = QtWidgets.QProgressDialog(self)
        self.starting_dialog.setWindowModality(QtCore.Qt.ApplicationModal)
        self.starting_dialog.setWindowTitle(title)
        self.starting_dialog.setLabelText(text)
        self.starting_dialog.setMaximum(max_value)
        self.starting_dialog.setCancelButton(None)

        def on_start_up_timer():
            value = self.starting_dialog.value()
            self.starting_dialog.setValue(value + 1)
            pid = adb_helper.current_device().get_pid(config.MINICAP)
            if pid:
                logger.debug("minicap pid is %s" % pid)
                if not cap_start:
                    self.dismiss_starting_dialog()
                    return
                self.dismiss_starting_dialog()
                self.on_action_start(ready=True)
                mini_touch_pid = adb_helper.current_device().get_pid(config.MINITOUCH)
                logger.debug("minitouch pid is %s" % mini_touch_pid)
            elif value >= max_value - 1:
                self.dismiss_starting_dialog()
                QtWidgets.QMessageBox.critical(
                    self, _(config.TITLE_ERROR),
                    _("Fatal error occurred, please restart"))
                self.close()

        self.timer.timeout.connect(on_start_up_timer)
        self.timer.start(100)
        self.starting_dialog.show()
Exemplo n.º 22
0
    def on_action_stop_recorder(self):
        self.recording = False
        if self.record_timer.isActive():
            self.record_timer.stop()

        if len(self.record_frames) < 1:
            QtWidgets.QMessageBox.critical(self, _(config.TITLE_ERROR), _("No any frame, your screen didn't change!"))
            self.set_tip_message("")
            self.ui.actionRecorder.setText(_("Start video recorder ..."))
            return

        self.set_tip_message(_("Saving video ..."))
        self.ui.actionRecorder.setEnabled(self.recording)

        def save_task(frames):
            recorder.write_frames(frames)
            mp4file = recorder.finish()
            self.set_tip_message("%s" % mp4file.replace("\\", "/"))
            self.record_frames = []
            self.ui.actionRecorder.setEnabled(not self.recording)
            self.ui.actionRecorder.setText(_("Start video recorder ..."))

        task = threading.Thread(target=save_task, args=(self.record_frames,))
        task.start()
Exemplo n.º 23
0
 def show_models(self):
     self.save()
     edit = QPushButton(anki.lang._("Manage"),
                        clicked=lambda: aqt.models.Models(mw, self))
     ret = StudyDeck(mw,
                     names=lambda: sorted(mw.col.models.allNames()),
                     accept=anki.lang._("Choose"),
                     title=anki.lang._("Choose Note Type"),
                     help="_notes",
                     parent=self,
                     buttons=[edit],
                     cancel=True,
                     geomKey="selectModel")
     if ret.name:
         model = mw.col.models.byName(ret.name)
         config.last_model_id = model['id']
         self.models_button.setText(u'%s [%s]' %
                                    (_('CHOOSE_NOTE_TYPES'), ret.name))
         return model
Exemplo n.º 24
0
 def on_mini_touch_connect_result(self, ret):
     if not ret:
         QtWidgets.QMessageBox.warning(
             self, _(config.TITLE_WARNING),
             _("Fail to connect minitouch\nThe screen is OK, but you couldn't control"))
Exemplo n.º 25
0
 def on_action_about(self):
     QtWidgets.QMessageBox.information(self, _("About"), version.about)
Exemplo n.º 26
0
 def cn_btn_clicked(self, widget):
     print "cn_btn_clicked.."
     lang.set_lang("cn.ini")
     self.ok_btn.set_label(_(0))
     self.can_btn.set_label(_(1))
Exemplo n.º 27
0
 def on_screenshots_result(self, filename, show_toast=True):
     if show_toast:
         Toast.show_(self, _("Saved: %s") % filename)
Exemplo n.º 28
0
 def on_disconnect_remote_screen(self):
     self.share_val.value = 1
     self.share_proc = None
     logger.debug("kill share process")
     self.ui.actionRemote_screen.setText(_("Connect remote screen..."))
Exemplo n.º 29
0
 def en_btn_clicked(self, widget):
     print "en_btn_clicked.."
     lang.set_lang("en.ini")
     print "_(0):", _(0)
     self.ok_btn.set_label(_(0))
     self.can_btn.set_label(_(1))
Exemplo n.º 30
0
 def on_disconnected(self):
     self.on_action_stop()
     self.setWindowTitle(version.app_name)
     QtWidgets.QMessageBox.critical(
         self, _("Disconnected"),
         _("USB line pulled out or you closed USB-DEBUG mode"))