Beispiel #1
0
    def do_input(line):
        """ Input mode """
        print("=== Input mode ===")

        card = ui_controller_main()

        card_type_by_id = dict([(card_type.id, card_type) \
            for card_type in card_types()])

        category_names_by_id = dict([(i, name) for (i, name) in \
            enumerate(database().category_names())])

        while True:
            # Select Card Type by user:
            print "Select Card Type:"
            print '\n'.join(["%s %s" % \
                  (type_id, card_type_by_id[type_id].name)\
                    for type_id in sorted(card_type_by_id.keys())])
            while True:
                inp = \
                raw_input(_("Enter number of Card Type or 'q' to quit ... "))
                if inp in ("q", "Q"):
                    return
                if inp in card_type_by_id:
                    card_type = card_type_by_id[inp]
                    break
                print(_("Input error, try again"))

            # Select the exist or Add the new Category
            print '\n'.join(["%s %s" % (cat_id, category_names_by_id[cat_id]) \
                for cat_id in sorted(category_names_by_id.keys())])
            inp = raw_input(_("Enter number of Category or "\
                "enter new category or 'q' to quit ... "))
            if inp in ("q", "Q"):
                return
            category_name = inp
            if inp in category_names_by_id:
                category_name = category_names_by_id[inp]

            # Enter all fields for the current type
            fact = {}
            for key, name in card_type.fields:
                print _("Enter field"), name
                inp = raw_input()
                if inp:
                    fact[key] = inp

            # Check necesary fields and create new card
            for required in card_type.required_fields():
                if required not in fact:
                    print(_("Error.This card is not saved in a database !!!"))
                    print(_("You didn't enter all necesary field(s) !!!"))
                    break
            else:
                # Create new card
                card.create_new_cards(fact, card_type, 0, [category_name])
                database().save(config()['path'])

            if raw_input(_("Do you want to add a new record? y/n ")) != "y":
                break
Beispiel #2
0
    def __init__(self, datadir=None, category=None, records=None):
        
        if datadir:
            datadir = os.path.abspath(datadir)
        elif os.path.exists(os.path.join(os.getcwdu(), ".mnemosyne")):
            datadir = os.path.abspath(os.path.join(os.getcwdu(), ".mnemosyne"))
        else:
            datadir = os.path.abspath(os.path.join(os.path.expanduser("~"), 
                        ".mnemosyne"))

        print 'datadir=', datadir

        libmnemosyne.initialise(datadir)

        self.card_type = FrontToBack()
        self.database = database()
        self.saved = False
        
        if records:
            self.records = records
        else:
            self.records = -1

        if not category:
            category = "English-Russian"
        
        self.category = category #Category(category)

        self.controller = ui_controller_main()
Beispiel #3
0
 def accept(self):
     try:
         fact_data = self.card_widget.get_data()
     except ValueError:
         return  # Let the user try again to fill out the missing data.
     cat_names = [c.strip() for c in unicode(self.categories.currentText()).split(",")]
     card_type_name = unicode(self.card_types.currentText())
     card_type = self.card_type_by_name[card_type_name]
     c = ui_controller_main()
     c.update_related_cards(self.fact, fact_data, card_type, cat_names)
Beispiel #4
0
    def __init__(self, extrasignals=None):
        """ Iniitialization """

        signals = ["review", "input", "configure"]
        if extrasignals:
            signals.extend(extrasignals)

        HildonBaseUi.__init__(self, signals)
        UiControllerMain.__init__(self, name="Hildon UI Main Controller")

        ui_controller_main().widget = self
Beispiel #5
0
 def __init__(self, filename, parent=None):
     QMainWindow.__init__(self, parent)
     self.setupUi(self)
     ui_controller_main().widget = self
     self.sched = QLabel("", self.statusbar)
     self.notmem = QLabel("", self.statusbar)
     self.all = QLabel("", self.statusbar)
     self.statusbar.addPermanentWidget(self.sched)
     self.statusbar.addPermanentWidget(self.notmem)
     self.statusbar.addPermanentWidget(self.all)
     self.statusbar.setSizeGripEnabled(0)
     try:
         initialise_user_plugins()
     except MnemosyneError, e:
         self.error_box(e)
Beispiel #6
0
    def new_cards(self, grade):

        """Note that we don't rebuild revision queue afterwards, as this can
        cause corruption for the current card.  The new cards will show up
        after the old queue is empty."""

        try:
            fact_data = self.card_widget.get_data()
        except ValueError:
            return # Let the user try again to fill out the missing data.
        cat_names = [c.strip() for c in \
                        unicode(self.categories.currentText()).split(',')]
        card_type_name = unicode(self.card_types.currentText())
        card_type = self.card_type_by_name[card_type_name]
        c = ui_controller_main()
        c.create_new_cards(fact_data, card_type, grade, cat_names)
        self.update_combobox(', '.join(cat_names))
        database().save(config()['path'])
        self.card_widget.clear()
Beispiel #7
0
    def __init__(self):

        cmd.Cmd.__init__(self)
        self.prompt = '====== Main =======\nPomni: '
        ui_controller_main().widget = self
Beispiel #8
0
 def update_dialog(self, redraw_all=False):
     w = self.widget
     # Update title.
     database_name = os.path.basename(config()["path"])[:-4]
     title = _("Mnemosyne") + " - " + database_name
     w.set_window_title(title)
     # Update menu bar.
     if config()["only_editable_when_answer_shown"] == True:
         if self.card != None and self.state == "SELECT GRADE":
             w.enable_edit_current_card(True)
         else:
             w.enable_edit_current_card(False)
     else:
         if self.card != None:
             w.enable_edit_current_card(True)
         else:
             w.enable_edit_current_card(False)
     w.enable_delete_current_card(self.card != None)
     w.enable_edit_deck(database().card_count() > 0)
     # Hide/show the question and answer boxes.
     if self.state == "SELECT SHOW":
         w.question_box_visible(True)
         if self.card.fact_view.a_on_top_of_q:
             w.answer_box_visible(False)
     elif self.state == "SELECT GRADE":
         w.answer_box_visible(True)
         if self.card.fact_view.a_on_top_of_q:
             w.question_box_visible(False)
     else:
         w.question_box_visible(True)
         w.answer_box_visible(True)
     # Update question label.
     question_label_text = _("Question:")
     if self.card != None and self.card.fact.cat[0].name != _("<default>"):
         for c in self.card.fact.cat:
             question_label_text += " " + c.name
     w.set_question_label(question_label_text)
     # Update question content.
     if self.card == None:
         w.clear_question()
     elif self.state == "SELECT SHOW" or redraw_all == True:
         w.set_question(self.card.question())
     # Update answer content.
     if self.card == None or self.state == "SELECT SHOW":
         w.clear_answer()
     else:
         w.set_answer(self.card.answer())
     # Update 'Show answer' button.
     if self.state == "EMPTY":
         show_enabled, default, text = False, True, _("Show answer")
         grades_enabled = False
     elif self.state == "SELECT SHOW":
         show_enabled, default, text = True,  True, _("Show answer")
         grades_enabled = False
     elif self.state == "SELECT GRADE":
         show_enabled, default, text = False, True, _("Show answer")
         grades_enabled = True
     elif self.state == "SELECT AHEAD":
         show_enabled, default, text = True,  False, \
                                  _("Learn ahead of schedule")
         grades_enabled = False
     w.update_show_button(text, default, show_enabled)
     # Update grade buttons.
     if self.card != None and self.card.grade in [0,1]:
         i = 0 # Acquisition phase.
         default_4 = False
     else:
         i = 1 # Retention phase.
         default_4 = True
     w.enable_grades(grades_enabled)
     if grades_enabled:
         w.grade_4_default(default_4)            
     # Tooltips and texts for the grade buttons.
     for grade in range(0,6):
         # Tooltip.
         if self.state == "SELECT GRADE" and \
            config()["show_intervals"] == "tooltips":
             w.set_grade_tooltip(grade, tooltip[i][grade] +\
                 self.next_rep_string(scheduler().process_answer(self.card, \
                                     grade, dry_run=True)))
         else:
             w.set_grade_tooltip(grade, tooltip[i][grade])
         # Button text.
         if self.state == "SELECT GRADE" and \
            config()["show_intervals"] == "buttons":
             w.set_grade_text(grade, str(scheduler().process_answer(\
                                         self.card, grade, dry_run=True)))
             w.set_grades_title(_("Pick days until next repetition:"))
         else:
             w.set_grade_text(grade, str(grade))
             w.set_grades_title(_("Grade your answer:"))
         # TODO: accelerator update needed?
         #self.grade_buttons[grade].setAccel(QKeySequence(str(grade)))
     # Update status bar.
     ui_controller_main().widget.update_status_bar()
     # Run possible update code that independent of the controller state.
     # TODO: remove when migration is complete.
     w.update_dialog()
Beispiel #9
0
 def add_cards(self):
     ui_controller_main().add_cards()
Beispiel #10
0
 def file_save_as(self):
     ui_controller_main().file_save_as()
Beispiel #11
0
 def file_open(self):
     ui_controller_main().file_open()
Beispiel #12
0
 def file_new(self):
     ui_controller_main().file_new()
Beispiel #13
0
 def edit_current_card(self):
     ui_controller_main().edit_current_card()
Beispiel #14
0
        self.statusbar.addPermanentWidget(self.notmem)
        self.statusbar.addPermanentWidget(self.all)
        self.statusbar.setSizeGripEnabled(0)
        try:
            initialise_user_plugins()
        except MnemosyneError, e:
            self.error_box(e)
        if filename == None:
            filename = config()["path"]
        try:
            database().load(filename)
        except MnemosyneError, e:
            self.error_box(e)            
            filename = os.path.join(os.path.split(filename)[0],"___TMP___.mem")
            database().new(filename)
        ui_controller_main().widget = self
        self.update_review_widget()
        ui_controller_review().new_question()

    def information_box(self, message, OK_string):
        QMessageBox.information(None, _("Mnemosyne"), message, OK_string)

    def question_box(self, question, option0, option1, option2):
        return QMessageBox.question(None, _("Mnemosyne"),
                                    question, option0, option1, option2, 0, -1)

    def error_box(self, event):
        if event.info:
            event.msg += "\n" + event.info        
            QMessageBox.critical(None, _("Mnemosyne"), event.msg,
                                 _("&OK"), "", "", 0, -1)