def load (self, gmwidg): # Specify whether the panel should have a horizontal layout: horizontal = True if horizontal: self.box = Gtk.HBox() else: self.box = Gtk.VBox() __widget__ = self.box # Use two engine output widgets for each player color: self.output_white = EngineOutput(True) self.output_black = EngineOutput(False) if horizontal: self.output_separator = Gtk.VSeparator() else: self.output_separator = Gtk.HSeparator() self.output_noengines = Gtk.TextView() set_textview_color(self.output_noengines) self.output_noengines.get_buffer().set_text( _("No chess engines (computer players) are participating in this game.")) self.output_noengines.set_editable(False) self.output_noengines.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) __widget__.pack_start(self.output_noengines, True, True, 0) __widget__.show_all() self.boardview = gmwidg.board.view self.boardview.model.connect_after("game_changed", self.game_changed) self.boardview.model.connect_after("players_changed", self.players_changed) self.boardview.model.connect_after("game_started", self.game_started) return __widget__
def __init__(self, window, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.window = window self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits the write view self.history = [] self.pos = 0 self.writeView = Gtk.Entry() # self.writeView.set_width_chars(80) self.pack_start(self.writeView, False, True, 0) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self): GObject.GObject.__init__(self) # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() set_textview_color(self.readView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.set_size_request(-1, 20) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[Gtk.StateType.INSENSITIVE]) self.pack1(BorderBox(sw, bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.TextView() set_textview_color(self.writeView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.add(self.writeView) self.writeView.props.wrap_mode = Gtk.WrapMode.WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw, top=True), resize=True, shrink=True) # Forces are reasonable position for the panner. def callback(widget, ctx): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position( int(max(0.70 * allocation.height, allocation.height - 60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__ (self): GObject.GObject.__init__(self) # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() set_textview_color(self.readView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.set_size_request(-1, 20) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[Gtk.StateType.INSENSITIVE]) self.pack1(BorderBox(sw,bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.TextView() set_textview_color(self.writeView) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) sw.add(self.writeView) self.writeView.props.wrap_mode = Gtk.WrapMode.WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw,top=True), resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, ctx): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.70*allocation.height, allocation.height-60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self, window, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.window = window self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 liststore = Gtk.ListStore(str) for command in FICS_COMMANDS: liststore.append([command]) for command in FICS_HELP: liststore.append(["help %s" % command]) entrycompletion = Gtk.EntryCompletion() entrycompletion.set_model(liststore) entrycompletion.set_text_column(0) entrycompletion.set_minimum_key_length(2) entrycompletion.set_popup_set_width(False) self.entry = Gtk.Entry() self.entry.set_completion(entrycompletion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress)
def __init__(self, connection): GObject.GObject.__init__(self) self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack1(sw, resize=True, shrink=True) # Inits the write view self.history = [] self.pos = 0 self.writeView = Gtk.Entry() #self.writeView.set_width_chars(80) self.pack2(self.writeView, resize=True, shrink=True) # Forces are reasonable position for the panner. def callback(widget, context): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position( int(max(0.79 * allocation.height, allocation.height - 60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self): GObject.GObject.__init__(self) #self.set_editable(False) #self.set_cursor_visible(False) self.set_wrap_mode(Gtk.WrapMode.WORD) self.cursor_standard = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) #self.cursor_hand = Gdk.Cursor.new(Gdk.HAND2) self.cursor_hand = Gdk.Cursor.new(Gdk.CursorType.HAND2) self.textview = self self.nodelist = [] self.oldWidth = 0 self.autoUpdateSelected = True self.connect("motion-notify-event", self.motion_notify_event) self.connect("button-press-event", self.button_press_event) bg_color, fg_color = set_textview_color(self.textview) self.textbuffer = self.get_buffer() color0 = fg_color color1 = Gdk.RGBA(red=0.2, green=0.0, blue=0.0) color2 = Gdk.RGBA(red=0.4, green=0.0, blue=0.0) color3 = Gdk.RGBA(red=0.6, green=0.0, blue=0.0) color4 = Gdk.RGBA(red=0.8, green=0.0, blue=0.0) color5 = Gdk.RGBA(red=1.0, green=0.0, blue=0.0) tag = self.textbuffer.create_tag("remove-variation") tag.connect("event", self.tag_event_handler) self.new_line_tag = self.textbuffer.create_tag("new_line") self.textbuffer.create_tag("head1") self.textbuffer.create_tag("head2", weight=Pango.Weight.BOLD) self.textbuffer.create_tag("move", weight=Pango.Weight.BOLD) self.textbuffer.create_tag("scored0", foreground_rgba=color0) self.textbuffer.create_tag("scored1", foreground_rgba=color1) self.textbuffer.create_tag("scored2", foreground_rgba=color2) self.textbuffer.create_tag("scored3", foreground_rgba=color3) self.textbuffer.create_tag("scored4", foreground_rgba=color4) self.textbuffer.create_tag("scored5", foreground_rgba=color5) self.textbuffer.create_tag("emt", foreground="darkgrey", weight=Pango.Weight.NORMAL) self.textbuffer.create_tag("comment", foreground="darkblue") self.textbuffer.create_tag("variation-toplevel", weight=Pango.Weight.NORMAL) self.textbuffer.create_tag("variation-even", foreground="darkgreen", style="italic") self.textbuffer.create_tag("variation-uneven", foreground="darkred", style="italic") self.textbuffer.create_tag("selected", background_full_height=True, background="grey") self.textbuffer.create_tag("margin", left_margin=4) self.textbuffer.create_tag("variation-margin0", left_margin=20) self.textbuffer.create_tag("variation-margin1", left_margin=36) self.textbuffer.create_tag("variation-margin2", left_margin=52)
def load(self, gmwidg): # Specify whether the panel should have a horizontal layout: horizontal = True if horizontal: self.box = Gtk.HBox() else: self.box = Gtk.VBox() __widget__ = self.box # Use two engine output widgets for each player color: self.output_white = EngineOutput(True) self.output_black = EngineOutput(False) if horizontal: self.output_separator = Gtk.VSeparator() else: self.output_separator = Gtk.HSeparator() self.output_noengines = Gtk.TextView() set_textview_color(self.output_noengines) self.output_noengines.get_buffer().set_text( _("No chess engines (computer players) are participating in this game." )) self.output_noengines.set_editable(False) self.output_noengines.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) __widget__.pack_start(self.output_noengines, True, True, 0) __widget__.show_all() self.boardview = gmwidg.board.view self.model_cids = [ self.boardview.model.connect_after("game_changed", self.game_changed), self.boardview.model.connect_after("players_changed", self.players_changed), self.boardview.model.connect_after("game_started", self.game_started), self.boardview.model.connect_after("game_terminated", self.on_game_terminated), ] return __widget__
def __init__ (self, connection): GObject.GObject.__init__(self) self.connection = connection # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw.set_shadow_type(Gtk.ShadowType.NONE) uistuff.keepDown(sw) sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack1(sw, resize=True, shrink=True) # Inits the write view self.history = [] self.pos = 0 self.writeView = Gtk.Entry() #self.writeView.set_width_chars(80) self.pack2(self.writeView, resize=True, shrink=True) # Forces are reasonable position for the panner. def callback (widget, context): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.79*allocation.height, allocation.height-60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.connection = connection self.connection.players.connect("FICSPlayerEntered", self.on_player_entered) self.connection.players.connect("FICSPlayerExited", self.on_player_exited) # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 self.liststore = Gtk.ListStore(str, int) for command in FICS_COMMANDS: self.liststore.append([command, TYPE_COMMAND]) for command in FICS_HELP: self.liststore.append([command, TYPE_HELP]) completion = Gtk.EntryCompletion() completion.set_model(self.liststore) completion.set_text_column(0) completion.set_minimum_key_length(2) completion.set_popup_set_width(False) def match(completion, entrystr, iter, data): modelstr = completion.get_model()[iter][0].lower() modeltype = completion.get_model()[iter][1] parts = entrystr.split() if len(parts) == 1 and modeltype == TYPE_COMMAND: return modelstr.startswith(entrystr) elif len(parts) == 2: if parts[0] == "help": return modelstr.startswith(parts[1]) and modeltype == TYPE_HELP else: return parts[0] in FICS_COMMANDS and modelstr.startswith(parts[1].lower()) and modeltype == TYPE_USER completion.set_match_func(match, None) def on_match_selected(completion, treemodel, treeiter): modelstr = treemodel[treeiter][0] modeltype = treemodel[treeiter][1] entry = completion.get_entry() parts = entry.get_text().split() if len(parts) == 1 and modeltype == TYPE_COMMAND: entry.set_text(modelstr) entry.set_position(-1) return True elif len(parts) == 2: entry.set_text("%s %s" % (parts[0], modelstr)) entry.set_position(-1) return True completion.connect('match-selected', on_match_selected) self.entry = Gtk.Entry() self.entry.set_completion(completion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress)
def __init__(self, gamemodel=None): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL) self.gamemodel = gamemodel # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() set_textview_color(self.readView) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 if isinstance(self.gamemodel, ICGameModel): self.refresh = Gtk.Image() self.refresh.set_from_pixbuf(load_icon(16, "view-refresh", "stock-refresh")) label = _("Observers") self.obs_btn = Gtk.Button() self.obs_btn.set_image(self.refresh) self.obs_btn.set_label(label) self.obs_btn.connect("clicked", self.on_obs_btn_clicked) vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) # Inits the observers view self.obsView = Gtk.TextView() self.obsView.set_cursor_visible(False) set_textview_color(self.obsView) self.obsView.set_editable(False) self.obsView.props.wrap_mode = Gtk.WrapMode.WORD self.obsView.props.pixels_below_lines = 1 self.obsView.props.pixels_above_lines = 2 self.obsView.props.left_margin = 2 text_buffer = self.obsView.get_buffer() iter = text_buffer.get_end_iter() anchor1 = text_buffer.create_child_anchor(iter) self.obsView.add_child_at_anchor(self.obs_btn, anchor1) self.button_tag = text_buffer.create_tag("observers") text_buffer.insert_with_tags_by_name(iter, " ", "observers") text_buffer.insert(iter, "\n") vbox.pack_start(self.obsView, False, True, 0) vbox.pack_start(self.sw, True, True, 0) self.pack_start(vbox, True, True, 0) else: self.pack_start(self.sw, True, True, 0) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.Entry() self.pack_start(self.writeView, False, False, 0) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self, white=True): GObject.GObject.__init__(self) self.attached_engine = None # engine attached to which we listen self.white = white self.clear_on_output = False # next thinking line belongs to new move # Title bar: self.title_label = Gtk.Label() self.title_color = Gtk.Image() self.title_hbox = Gtk.HBox() # self.title_hbox.pack_start(self.title_color, False) self.title_hbox.pack_start(self.title_color, False, False, 0) # self.title_hbox.pack_start(self.title_label, True, True) self.title_hbox.pack_start(self.title_label, True, True, 0) # Set black or white player icon in front: if white is True: self.title_color.set_from_file(addDataPrefix("glade/white.png")) else: self.title_color.set_from_file(addDataPrefix("glade/black.png")) # output scrolled window container: self.output_container = Gtk.ScrolledWindow() self.output_container.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) # scroll down on new output: -- not reliable with multilines added # uistuff.keepDown(self.output_container) # scroll down on new output: -- brute force variant def changed(vadjust): vadjust.set_value(vadjust.get_upper() - vadjust.get_page_size()) self.output_container.get_vadjustment().connect("changed", changed) # Text field for output: self.output = Gtk.TextView() set_textview_color(self.output) self.output_container.add(self.output) self.output.set_editable(False) self.output.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self.tag_bold = self.output.get_buffer().create_tag( "bold", weight=Pango.Weight.BOLD) self.tag_color = self.output.get_buffer().create_tag( "color", foreground="#0033ff") # Add all sub widgets to ourselves: # self.pack_start(self.title_hbox, False) # self.pack_start(self.output_container, True) self.pack_start(self.title_hbox, False, False, 0) self.pack_start(self.output_container, True, True, 0) # Precompile regexes we want to use: self.re_thinking_line_cecp = re.compile(r'^[0-9]+\.? +\-?[0-9]+ +') self.re_thinking_line_uci = re.compile( r'^info (.*) pv [a-hA-H][0-9][a-hA-H][0-9](.*)$') self.re_move_line_cecp_alg = re.compile( r'^(move +)?[a-hA-H][0-9][a-hA-H][0-9]$') self.re_move_line_cecp_san = re.compile( r'^(move +)?([QKNB]?[a-hA-H]?[xX@]?[a-hA-H][0-9]\+?#?|[oO]-[oO]-[oO]|[oO]-[oO])$' ) self.re_move_line_uci = re.compile( r'^bestmove +[a-hA-H][0-9][a-hA-H][0-9]( .*)?$') self.re_extract_cecp_all = re.compile( r'^([0-9]+)\.? +(\-?[0-9]+) +[0-9]+.?[0-9]* ([^ ].*)$') self.re_extract_uci_depth = re.compile(r'depth +([0-9]+) +') self.re_extract_uci_score = re.compile(r'score cp +(-?[0-9]+) +') self.re_extract_uci_score_mate_other = re.compile( r'score +mate +([0-9]+) +') self.re_extract_uci_score_mate_us = re.compile( r'score +mate +\-([0-9]+) +') self.re_extract_uci_score_lowerbound = re.compile( r'score +lowerbound +') self.re_extract_uci_score_upperbound = re.compile( r'score +upperbound +') self.re_extract_uci_pv = re.compile(r'pv +([a-hA-HoO].*[^ ]) *$')
def __init__ (self, gamemodel=None): GObject.GObject.__init__(self) self.gamemodel = gamemodel # States for the color generator self.colors = {} self.startpoint = random.random() # Inits the read view self.readView = Gtk.TextView() #self.readView.set_size_request(-1, 30) set_textview_color(self.readView) sw1 = Gtk.ScrolledWindow() sw1.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw1.set_shadow_type(Gtk.ShadowType.NONE) #sw1.set_size_request(-1, 300) uistuff.keepDown(sw1) sw1.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.readView.props.pixels_below_lines = 1 self.readView.props.pixels_above_lines = 2 self.readView.props.left_margin = 2 #self.readView.get_buffer().create_tag("log", # foreground = self.readView.get_style().fg[Gtk.StateType.INSENSITIVE]) if isinstance(self.gamemodel, ICGameModel): self.refresh = Gtk.Image() self.refresh.set_from_pixbuf(load_icon(16, "view-refresh", "stock-refresh")) vp = Gtk.VPaned() # Inits the observers view self.obsView = Gtk.TextView() self.obsView.set_cursor_visible(False) #self.obsView.set_size_request(-1, 3) set_textview_color(self.obsView) sw0 = Gtk.ScrolledWindow() sw0.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw0.set_shadow_type(Gtk.ShadowType.NONE) sw0.set_size_request(-1, 3) uistuff.keepDown(sw0) sw0.add(self.obsView) self.obsView.set_editable(False) self.obsView.props.wrap_mode = Gtk.WrapMode.WORD self.obsView.props.pixels_below_lines = 1 self.obsView.props.pixels_above_lines = 2 self.obsView.props.left_margin = 2 vp.pack1(BorderBox(sw0, bottom=True), resize=False, shrink=False) vp.pack2(BorderBox(sw1, top=True), resize=True, shrink=False) self.pack1(BorderBox(vp, bottom=True), resize=True, shrink=True) else: self.pack1(BorderBox(sw1, bottom=True), resize=True, shrink=True) # Create a 'log mark' in the beginning of the text buffer. Because we # query the log asynchronously and in chunks, we can use this to insert # it correctly after previous log messages, but before the new messages. start = self.readView.get_buffer().get_start_iter() self.readView.get_buffer().create_mark("logMark", start) # Inits the write view self.writeView = Gtk.TextView() set_textview_color(self.writeView) sw2 = Gtk.ScrolledWindow() sw2.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) sw2.set_shadow_type(Gtk.ShadowType.NONE) sw2.set_size_request(-1, 3) sw2.add(self.writeView) self.writeView.props.wrap_mode = Gtk.WrapMode.WORD self.writeView.props.pixels_below_lines = 1 self.writeView.props.pixels_above_lines = 2 self.writeView.props.left_margin = 2 self.pack2(BorderBox(sw2, top=True), resize=False, shrink=False) # Forces are reasonable position for the panner. def callback (widget, ctx): widget.disconnect(handle_id) allocation = widget.get_allocation() self.set_position(int(max(0.70*allocation.height, allocation.height-60))) handle_id = self.connect("draw", callback) self.writeView.connect("key-press-event", self.onKeyPress)
def __init__(self, connection): Gtk.Box.__init__(self, orientation=Gtk.Orientation.VERTICAL, spacing=6) self.connection = connection self.connection.players.connect("FICSPlayerEntered", self.on_player_entered) self.connection.players.connect("FICSPlayerExited", self.on_player_exited) # Inits the read view self.readView = Gtk.TextView() fontdesc = Pango.FontDescription("Monospace 10") self.readView.modify_font(fontdesc) self.textbuffer = self.readView.get_buffer() set_textview_color(self.readView) self.textbuffer.create_tag("text") self.textbuffer.create_tag("mytext", weight=Pango.Weight.BOLD) self.sw = Gtk.ScrolledWindow() self.sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) self.sw.set_shadow_type(Gtk.ShadowType.ETCHED_IN) uistuff.keepDown(self.sw) self.sw.add(self.readView) self.readView.set_editable(False) self.readView.set_cursor_visible(False) self.readView.props.wrap_mode = Gtk.WrapMode.WORD self.pack_start(self.sw, True, True, 0) # Inits entry self.history = [] self.pos = 0 self.liststore = Gtk.ListStore(str, int) for command in FICS_COMMANDS: self.liststore.append([command, TYPE_COMMAND]) for command in FICS_HELP: self.liststore.append([command, TYPE_HELP]) completion = Gtk.EntryCompletion() completion.set_model(self.liststore) completion.set_text_column(0) completion.set_minimum_key_length(2) completion.set_popup_set_width(False) def match(completion, entrystr, iter, data): modelstr = completion.get_model()[iter][0].lower() modeltype = completion.get_model()[iter][1] parts = entrystr.split() if len(parts) == 1 and modeltype == TYPE_COMMAND: return modelstr.startswith(entrystr) elif len(parts) == 2: if parts[0] == "help": return modelstr.startswith( parts[1]) and modeltype == TYPE_HELP else: return parts[0] in FICS_COMMANDS and modelstr.startswith( parts[1].lower()) and modeltype == TYPE_USER completion.set_match_func(match, None) def on_match_selected(completion, treemodel, treeiter): modelstr = treemodel[treeiter][0] modeltype = treemodel[treeiter][1] entry = completion.get_entry() parts = entry.get_text().split() if len(parts) == 1 and modeltype == TYPE_COMMAND: entry.set_text(modelstr) entry.set_position(-1) return True elif len(parts) == 2: entry.set_text("%s %s" % (parts[0], modelstr)) entry.set_position(-1) return True completion.connect('match-selected', on_match_selected) self.entry = Gtk.Entry() self.entry.set_completion(completion) self.pack_start(self.entry, False, True, 0) self.entry.connect("key-press-event", self.onKeyPress)
def load(self, gmwidg): """ The method initializes the widget, attached events, internal variables, layout... """ # Internal variables self.nodelist = [] self.boardview = gmwidg.board.view self.gamemodel = gmwidg.gamemodel self.variation_to_remove = None if self.gamemodel is None: return None # Internal objects/helpers self.cursor_standard = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) self.cursor_hand = Gdk.Cursor.new(Gdk.CursorType.HAND2) # Text area self.textview = Gtk.TextView() self.textview.set_wrap_mode(Gtk.WrapMode.WORD) self.textbuffer = self.textview.get_buffer() # Named tags self.tag_remove_variation = self.textbuffer.create_tag( "remove-variation") self.tag_new_line = self.textbuffer.create_tag("new_line") # Anonymous tags self.textbuffer.create_tag("move", weight=Pango.Weight.BOLD) bg_color, fg_color = set_textview_color(self.textview) self.textbuffer.create_tag("scored0", foreground_rgba=fg_color) self.textbuffer.create_tag("scored1", foreground_rgba=Gdk.RGBA(0.2, 0, 0, 1)) self.textbuffer.create_tag("scored2", foreground_rgba=Gdk.RGBA(0.4, 0, 0, 1)) self.textbuffer.create_tag("scored3", foreground_rgba=Gdk.RGBA(0.6, 0, 0, 1)) self.textbuffer.create_tag("scored4", foreground_rgba=Gdk.RGBA(0.8, 0, 0, 1)) self.textbuffer.create_tag("scored5", foreground_rgba=Gdk.RGBA(1.0, 0, 0, 1)) self.textbuffer.create_tag("emt", foreground="darkgrey", weight=Pango.Weight.NORMAL) self.textbuffer.create_tag("comment", foreground="darkblue") self.textbuffer.create_tag("variation-toplevel", weight=Pango.Weight.NORMAL) self.textbuffer.create_tag("variation-even", foreground="darkgreen", style="italic") self.textbuffer.create_tag("variation-uneven", foreground="darkred", style="italic") self.textbuffer.create_tag("selected", background_full_height=True, background="grey") self.textbuffer.create_tag("margin", left_margin=4) self.textbuffer.create_tag("variation-margin0", left_margin=20) self.textbuffer.create_tag("variation-margin1", left_margin=36) self.textbuffer.create_tag("variation-margin2", left_margin=52) # Game header self.label_info = Gtk.Label() self.label_info.props.xalign = 0 self.label_players = Gtk.Label() self.label_players.props.xalign = 0 self.label_event = Gtk.Label() self.label_event.props.xalign = 0 self.label_opening = Gtk.Label() self.label_opening.props.xalign = 0 # Events self.cids_textview = [ self.textview.connect("motion-notify-event", self.motion_notify_event), self.textview.connect("button-press-event", self.button_press_event), ] self.cid_shown_changed = self.boardview.connect( "shownChanged", self.on_shownChanged) self.cid_remove_variation = self.tag_remove_variation.connect( "event", self.tag_event_handler) self.cids_gamemodel = [ self.gamemodel.connect_after("game_loaded", self.on_game_loaded), self.gamemodel.connect_after("game_changed", self.on_game_changed), self.gamemodel.connect_after("game_started", self.update), self.gamemodel.connect_after("game_ended", self.update), self.gamemodel.connect_after("moves_undone", self.on_moves_undone), self.gamemodel.connect_after("opening_changed", self.update), self.gamemodel.connect_after("players_changed", self.on_players_changed), self.gamemodel.connect_after("game_terminated", self.on_game_terminated), self.gamemodel.connect("variation_added", self.variation_added), self.gamemodel.connect("variation_extended", self.variation_extended), self.gamemodel.connect("analysis_changed", self.analysis_changed), self.gamemodel.connect("analysis_finished", self.update), ] self.cids_conf = [] # Load of the preferences def cb_config_changed(*args): self.fetch_chess_conf() self.update() self.cids_conf.append( conf.notify_add("figuresInNotation", cb_config_changed)) self.cids_conf.append(conf.notify_add("showEmt", cb_config_changed)) self.cids_conf.append(conf.notify_add("showBlunder", cb_config_changed)) self.cids_conf.append(conf.notify_add("showEval", cb_config_changed)) self.fetch_chess_conf() # Layout __widget__ = Gtk.Box(orientation=Gtk.Orientation.VERTICAL) __widget__.pack_start(self.label_info, False, True, 1) __widget__.pack_start(self.label_players, False, True, 1) __widget__.pack_start(self.label_event, False, True, 1) __widget__.pack_start(self.label_opening, False, True, 1) sw = Gtk.ScrolledWindow() sw.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) sw.add(self.textview) __widget__.pack_start(sw, True, True, 0) if self.gamemodel.practice_game or self.gamemodel.lesson_game: self.infobar = LearnInfoBar(self.gamemodel, self.boardview) self.boardview.infobar = self.infobar __widget__.pack_start(self.infobar, False, False, 0) return __widget__
def load(self, gmwidg): self.textview = Gtk.TextView() self.textview.set_wrap_mode(Gtk.WrapMode.WORD) self.cursor_standard = Gdk.Cursor.new(Gdk.CursorType.LEFT_PTR) self.cursor_hand = Gdk.Cursor.new(Gdk.CursorType.HAND2) self.nodelist = [] self.oldWidth = 0 self.autoUpdateSelected = True self.textview_cids = [ self.textview.connect("motion-notify-event", self.motion_notify_event), self.textview.connect("button-press-event", self.button_press_event), ] bg_color, fg_color = set_textview_color(self.textview) self.textbuffer = self.textview.get_buffer() color0 = fg_color color1 = Gdk.RGBA(red=0.2, green=0.0, blue=0.0) color2 = Gdk.RGBA(red=0.4, green=0.0, blue=0.0) color3 = Gdk.RGBA(red=0.6, green=0.0, blue=0.0) color4 = Gdk.RGBA(red=0.8, green=0.0, blue=0.0) color5 = Gdk.RGBA(red=1.0, green=0.0, blue=0.0) self.remove_vari_tag = self.textbuffer.create_tag("remove-variation") self.rmv_cid = self.remove_vari_tag.connect("event", self.tag_event_handler) self.new_line_tag = self.textbuffer.create_tag("new_line") self.textbuffer.create_tag("head1") self.textbuffer.create_tag("head2", weight=Pango.Weight.BOLD) self.textbuffer.create_tag("move", weight=Pango.Weight.BOLD) self.textbuffer.create_tag("scored0", foreground_rgba=color0) self.textbuffer.create_tag("scored1", foreground_rgba=color1) self.textbuffer.create_tag("scored2", foreground_rgba=color2) self.textbuffer.create_tag("scored3", foreground_rgba=color3) self.textbuffer.create_tag("scored4", foreground_rgba=color4) self.textbuffer.create_tag("scored5", foreground_rgba=color5) self.textbuffer.create_tag("emt", foreground="darkgrey", weight=Pango.Weight.NORMAL) self.textbuffer.create_tag("comment", foreground="darkblue") self.textbuffer.create_tag("variation-toplevel", weight=Pango.Weight.NORMAL) self.textbuffer.create_tag("variation-even", foreground="darkgreen", style="italic") self.textbuffer.create_tag("variation-uneven", foreground="darkred", style="italic") self.textbuffer.create_tag("selected", background_full_height=True, background="grey") self.textbuffer.create_tag("margin", left_margin=4) self.textbuffer.create_tag("variation-margin0", left_margin=20) self.textbuffer.create_tag("variation-margin1", left_margin=36) self.textbuffer.create_tag("variation-margin2", left_margin=52) __widget__ = Gtk.ScrolledWindow() __widget__.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.ALWAYS) __widget__.add(self.textview) self.boardview = gmwidg.board.view self.cid = self.boardview.connect("shownChanged", self.shownChanged) self.gamemodel = gmwidg.gamemodel self.model_cids = [ self.gamemodel.connect_after("game_loaded", self.game_loaded), self.gamemodel.connect_after("game_changed", self.game_changed), self.gamemodel.connect_after("game_started", self.update), self.gamemodel.connect_after("game_ended", self.update), self.gamemodel.connect_after("moves_undone", self.moves_undone), self.gamemodel.connect_after("opening_changed", self.update), self.gamemodel.connect_after("players_changed", self.players_changed), self.gamemodel.connect_after("game_terminated", self.on_game_terminated), self.gamemodel.connect("variation_added", self.variation_added), self.gamemodel.connect("variation_extended", self.variation_extended), self.gamemodel.connect("analysis_changed", self.analysis_changed), ] # Connect to preferences self.conf_conids = [] self.fan = conf.get("figuresInNotation", False) def figuresInNotationCallback(none): self.fan = conf.get("figuresInNotation", False) self.update() self.conf_conids.append( conf.notify_add("figuresInNotation", figuresInNotationCallback)) # Elapsed move time self.showEmt = conf.get("showEmt", False) def showEmtCallback(none): self.showEmt = conf.get("showEmt", False) self.update() self.conf_conids.append(conf.notify_add("showEmt", showEmtCallback)) # Blunders self.showBlunder = conf.get("showBlunder", False) def showBlunderCallback(none): self.showBlunder = conf.get("showBlunder", False) self.update() self.conf_conids.append( conf.notify_add("showBlunder", showBlunderCallback)) # Eval values self.showEval = conf.get("showEval", False) def showEvalCallback(none): self.showEval = conf.get("showEval", False) self.update() self.conf_conids.append(conf.notify_add("showEval", showEvalCallback)) return __widget__
def __init__(self, white=True): GObject.GObject.__init__(self) self.attached_engine = None # engine attached to which we listen self.white = white self.clear_on_output = False # next thinking line belongs to new move # Title bar: self.title_label = Gtk.Label() self.title_color = Gtk.Image() self.title_hbox = Gtk.HBox() # self.title_hbox.pack_start(self.title_color, False) self.title_hbox.pack_start(self.title_color, False, False, 0) # self.title_hbox.pack_start(self.title_label, True, True) self.title_hbox.pack_start(self.title_label, True, True, 0) # Set black or white player icon in front: if white is True: self.title_color.set_from_file(addDataPrefix("glade/white.png")) else: self.title_color.set_from_file(addDataPrefix("glade/black.png")) # output scrolled window container: self.output_container = Gtk.ScrolledWindow() self.output_container.set_policy(Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC) # scroll down on new output: -- not reliable with multilines added # uistuff.keepDown(self.output_container) # scroll down on new output: -- brute force variant def changed(vadjust): vadjust.set_value(vadjust.get_upper() - vadjust.get_page_size()) self.output_container.get_vadjustment().connect("changed", changed) # Text field for output: self.output = Gtk.TextView() set_textview_color(self.output) self.output_container.add(self.output) self.output.set_editable(False) self.output.set_wrap_mode(Gtk.WrapMode.WORD_CHAR) self.tag_bold = self.output.get_buffer().create_tag( "bold", weight=Pango.Weight.BOLD) self.tag_color = self.output.get_buffer().create_tag( "color", foreground="#0033ff") # Add all sub widgets to ourselves: # self.pack_start(self.title_hbox, False) # self.pack_start(self.output_container, True) self.pack_start(self.title_hbox, False, False, 0) self.pack_start(self.output_container, True, True, 0) # Precompile regexes we want to use: self.re_thinking_line_cecp = re.compile(r'^[0-9]+\.? +\-?[0-9]+ +') self.re_thinking_line_uci = re.compile( r'^info (.*) pv [a-hA-H][0-9][a-hA-H][0-9](.*)$') self.re_move_line_cecp_alg = re.compile( r'^(move +)?[a-hA-H][0-9][a-hA-H][0-9]$') self.re_move_line_cecp_san = re.compile( r'^(move +)?([QKNB]?[a-hA-H]?[xX@]?[a-hA-H][0-9]\+?#?|[oO]-[oO]-[oO]|[oO]-[oO])$') self.re_move_line_uci = re.compile( r'^bestmove +[a-hA-H][0-9][a-hA-H][0-9]( .*)?$') self.re_extract_cecp_all = re.compile( r'^([0-9]+)\.? +(\-?[0-9]+) +[0-9]+.?[0-9]* ([^ ].*)$') self.re_extract_uci_depth = re.compile(r'depth +([0-9]+) +') self.re_extract_uci_score = re.compile(r'score cp +(-?[0-9]+) +') self.re_extract_uci_score_mate_other = re.compile( r'score +mate +([0-9]+) +') self.re_extract_uci_score_mate_us = re.compile( r'score +mate +\-([0-9]+) +') self.re_extract_uci_score_lowerbound = re.compile( r'score +lowerbound +') self.re_extract_uci_score_upperbound = re.compile( r'score +upperbound +') self.re_extract_uci_pv = re.compile(r'pv +([a-hA-HoO].*[^ ]) *$')