Received: from mail-pf1-f195.google.com (mail-pf1-f195.google.com [209.85.210.195]) by mail.sr.ht (Postfix) with ESMTPS id 268B340440 for <~sircmpwn/aerc@lists.sr.ht>; Mon, 28 Oct 2019 19:07:26 +0000 (UTC) Authentication-Results: mail.sr.ht; dkim=pass (2048-bit key) header.d=xcf-berkeley-edu.20150623.gappssmtp.com header.i=@xcf-berkeley-edu.20150623.gappssmtp.com header.b=pyJ4RTUd Received: by mail-pf1-f195.google.com with SMTP id c7so6349902pfo.12 for <~sircmpwn/aerc@lists.sr.ht>; Mon, 28 Oct 2019 12:07:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=xcf-berkeley-edu.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=bs5rw3XpvoWJmrqbXqIIJQt9/Htof1B3Fw8OCV7g42w=; b=pyJ4RTUdZK2RSZh5AwvBe85T9aPmmR+6bRIlzfeq6mO6yJMs/PTOmTy2pclA4ct+Z9 RhYlXWN+2Z/6t8tuZHuEtdq+UXTaOPAkkkX3wzWJgOXLaYFqCrveIAZnCpDkmj0/TAvP JlElo63BrYSuLfvQDRw/jwQyN7Gg8FD7bDTCjinLsV8lWtGAvMtdI0LDOU0TWlJDfvSr vluvRvPWWqxT8XjD4vMfH9TJV00jN8wrU92d2mcqsP5M0O/nrLIGpT9gapEeMWKE2e0v /2qgm8bypk/Gur+wbZxAGTI0Pu+eSn/7a3X9/DNlLgULzBU2fDhQCFza7WhPeQxYDJVK DG0A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=bs5rw3XpvoWJmrqbXqIIJQt9/Htof1B3Fw8OCV7g42w=; b=Mtf1xpIrsKkr9Ghilx3vHbtydTTeK+3ag2QrgRIhJEBs5iqwFcFt3iF28tOE8sbnIZ da0oThmVKtxkP/jyRBSv5fC0q1VXDsJBiNH51/EtvDzHwq+3NXPTEaFELJUzimlC+bq6 DC91vwqD45WaHo4Q8BhxbOm7pruHaXjWxUYA6V/5r0AKdaegge1SyYgFzJcUl4cBLcTW lS1Ch4Diw0Zpd7h1/EratUh8Na9Bj5hYukxzI86fKv4tcMbSlQYqFP8UHo6tWWUu7Xx2 0puRjX6CHt5PKF7e8rODi2D6l0gxgXaQhs+a2tPn6XMFmDYWdAulTBm3lU5uRD8Hqiya DriA== X-Gm-Message-State: APjAAAWJC1XEduEtHhP3mCDNtDNxAaOUPFBV3g06Nv00Sb7I1IdiOb6H 3pVbO4akeot/mSPDce/FCjzxRR/OCug= X-Google-Smtp-Source: APXvYqzCObXts02TU4Oz9YOLUjHyPlyumiGTQKTvzRKMAJVE98WwTEasoZCqq4z9JMZVmc6GlQtEYQ== X-Received: by 2002:aa7:9533:: with SMTP id c19mr17700647pfp.77.1572289645054; Mon, 28 Oct 2019 12:07:25 -0700 (PDT) Received: from localhost.localdomain (157-131-143-142.fiber.dynamic.sonic.net. [157.131.143.142]) by smtp.gmail.com with ESMTPSA id y16sm3092357pfo.62.2019.10.28.12.07.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 28 Oct 2019 12:07:23 -0700 (PDT) From: Kevin Kuehler To: ~sircmpwn/aerc@lists.sr.ht Cc: Kevin Kuehler Subject: [PATCH v2 3/9] [WIP] widgets/msglist: Draw each row in a function Date: Mon, 28 Oct 2019 12:07:02 -0700 Message-Id: <20191028190708.253770-3-keur@xcf.berkeley.edu> X-Mailer: git-send-email 2.23.0 In-Reply-To: <20191028190708.253770-1-keur@xcf.berkeley.edu> References: <20191028190708.253770-1-keur@xcf.berkeley.edu> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable This function can be reused by the threading code. Signed-off-by: Kevin Kuehler --- widgets/msglist.go | 98 +++++++++++++++++++++++++--------------------- 1 file changed, 54 insertions(+), 44 deletions(-) diff --git a/widgets/msglist.go b/widgets/msglist.go index 5c2d2f4..ac3d6cc 100644 --- a/widgets/msglist.go +++ b/widgets/msglist.go @@ -71,52 +71,9 @@ func (ml *MessageList) Draw(ctx *ui.Context) { =20 for i :=3D len(uids) - 1 - ml.scroll; i >=3D 0; i-- { uid :=3D uids[i] - msg :=3D store.Messages[uid] - - if row >=3D ctx.Height() { + if ml.drawRow(ctx, uid, i, row, &needsHeaders) { break } - - if msg =3D=3D nil { - needsHeaders =3D append(needsHeaders, uid) - ml.spinner.Draw(ctx.Subcontext(0, row, ctx.Width(), 1)) - row +=3D 1 - continue - } - - style :=3D tcell.StyleDefault - - // current row - if row =3D=3D ml.store.SelectedIndex()-ml.scroll { - style =3D style.Reverse(true) - } - // deleted message - if _, ok :=3D store.Deleted[msg.Uid]; ok { - style =3D style.Foreground(tcell.ColorGray) - } - // unread message - seen :=3D false - for _, flag :=3D range msg.Flags { - if flag =3D=3D models.SeenFlag { - seen =3D true - } - } - if !seen { - style =3D style.Bold(true) - } - - ctx.Fill(0, row, ctx.Width(), 1, ' ', style) - fmtStr, args, err :=3D format.ParseMessageFormat( - ml.conf.Ui.IndexFormat, - ml.conf.Ui.TimestampFormat, "", i, msg) - if err !=3D nil { - ctx.Printf(0, row, style, "%v", err) - } else { - line :=3D fmt.Sprintf(fmtStr, args...) - line =3D runewidth.Truncate(line, ctx.Width(), "=E2=80=A6") - ctx.Printf(0, row, style, "%s", line) - } - row +=3D 1 } =20 @@ -132,6 +89,59 @@ func (ml *MessageList) Draw(ctx *ui.Context) { } } =20 +// Draw one message. +// +// Return: If true, don't fetch any more messages +func (ml *MessageList) drawRow(ctx *ui.Context, uid uint32, number int, = row int, needsHeaders *[]uint32) bool { + store :=3D ml.store + msg :=3D store.Messages[uid] + + if row >=3D ctx.Height() { + return true + } + + if msg =3D=3D nil { + *needsHeaders =3D append(*needsHeaders, uid) + ml.spinner.Draw(ctx.Subcontext(0, row, ctx.Width(), 1)) + return false + } + + style :=3D tcell.StyleDefault + + // current row + if row =3D=3D ml.store.SelectedIndex()-ml.scroll { + style =3D style.Reverse(true) + } + // deleted message + if _, ok :=3D store.Deleted[msg.Uid]; ok { + style =3D style.Foreground(tcell.ColorGray) + } + // unread message + seen :=3D false + for _, flag :=3D range msg.Flags { + if flag =3D=3D models.SeenFlag { + seen =3D true + } + } + if !seen { + style =3D style.Bold(true) + } + + ctx.Fill(0, row, ctx.Width(), 1, ' ', style) + fmtStr, args, err :=3D format.ParseMessageFormat( + ml.conf.Ui.IndexFormat, + ml.conf.Ui.TimestampFormat, "", number, msg) + if err !=3D nil { + ctx.Printf(0, row, style, "%v", err) + } else { + line :=3D fmt.Sprintf(fmtStr, args...) + line =3D runewidth.Truncate(line, ctx.Width(), "=E2=80=A6") + ctx.Printf(0, row, style, "%s", line) + } + + return false +} + func (ml *MessageList) MouseEvent(localX int, localY int, event tcell.Ev= ent) { switch event :=3D event.(type) { case *tcell.EventMouse: --=20 2.23.0