def __init__(self, parent): gtk.Dialog.__init__(self, u"Find anagrams", parent, gtk.DIALOG_MODAL) self.wordlists = parent.wordlists hbox = gtk.HBox(False, 0) hbox.set_border_width(12) hbox.set_spacing(18) main = gtk.VBox(False, 0) main.set_spacing(18) main.pack_start(create_entry(f_change=self.on_buffer_changed), False, False, 0) self.store = gtk.ListStore(str) self.tree = gtk.TreeView(self.store) cell = gtk.CellRendererText() column = gtk.TreeViewColumn(u"Contained words", cell, text=0) self.tree.append_column(column) scrolled_window = gtk.ScrolledWindow() scrolled_window.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC) scrolled_window.add(self.tree) scrolled_window.set_size_request(300, 300) main.pack_start(scrolled_window, True, True, 0) hbox.pack_start(main, True, True, 0) self.vbox.pack_start(hbox, True, True, 0) self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self.timer = glib.timeout_add(INPUT_DELAY, self.find_words)
def __init__(self, parent): super(FindWordsDialog, self).__init__(parent, u"Find words") self.wordlists = parent.wordlists self.sort_option = 0 self.pattern = None self.pack(create_label(u"Use ? for an unknown letter and * for zero or more unknown letters.")) def on_entry_changed(widget): glib.source_remove(self.timer) self.launch_pattern(widget.get_text().strip()) self.pack(create_entry(f_change=on_entry_changed), False) # word path score self.store, self.tree, s_window = create_tree((str, str, int) , [(u"Word", 0), (u"Word list", 1), (u"Score", 2)] , window_size=(-1, 300) ) self.tree.get_column(0).set_sizing(gtk.TREE_VIEW_COLUMN_FIXED) self.tree.get_column(0).set_fixed_width(250) self.pack(s_window) self.n_label = create_label("") self.set_n_label(0) self.pack(self.n_label, False) sort_hbox = gtk.HBox(False, 6) sort_hbox.pack_start(create_label(u"Sort by:"), False, False, 0) def on_sort_changed(combo): self.sort_option = combo.get_active() self.launch_pattern(self.pattern) sort_hbox.pack_start(create_combo(["Alphabet", "Length", "Score"] , active=self.sort_option, f_change=on_sort_changed)) self.pack(sort_hbox, False) self.add_button(gtk.STOCK_OK, gtk.RESPONSE_OK) self.launch_pattern(None)
def create_contents_tab(self): self.selected_word = None self.selected_offset = None def on_select_word(item, offset=None): self.selected_word = None if item is None else item[0] self.selected_offset = offset self.word_entry.set_sensitive(item is not None) self.word_spinner.set_sensitive(item is not None) if item is not None: word, score, h = item self.word_entry.set_text(word) self.word_spinner.set_value(score) self.word_widget = EditWordWidget(on_select_word) vbox = gtk.VBox() vbox.set_border_width(6) vbox.set_spacing(6) vbox.pack_start(create_scroll(self.word_widget, True, size=(300, -1))) edit_hbox = gtk.HBox() def on_word_changed(widget): word = widget.get_text().strip() self.word_widget.update(word, self.selected_offset) self.word_entry = create_entry(on_word_changed) self.word_entry.modify_font(pango.FontDescription('monospace')) def on_update(widget): score = widget.get_value_as_int() self.word_widget.update_score(score, self.selected_offset) word = self.word_widget.get_selected_word() self.current_wlist.update_score(word, score) self.word_spinner = create_spinner(0, 0, 100, f_change=on_update) self.clear_word_edit_controls() edit_hbox.pack_start(self.word_entry) edit_hbox.pack_start(self.word_spinner, False, False) vbox.pack_start(edit_hbox, False, False) def on_edit_scores(button): on_done = lambda window: window.get_settings() response, settings = launch_dialog(WordListScoreDialog, self , self.current_wlist, f_done=on_done) if response == gtk.RESPONSE_APPLY: self.clear_word_edit_controls() self.current_wlist.change_scores(*settings) self.word_widget.set_words(get_words_by_length(self.current_wlist)) self.scores_button = create_button(u"Edit scores", f_click=on_edit_scores, align=(0, 0)) self.wlist_sensitives.append(self.scores_button) self.scores_button.set_sensitive(False) vbox.pack_start(self.scores_button, False, False) hbox = gtk.HBox() hbox.set_spacing(6) vbox.pack_start(hbox, False, False) return vbox