##// END OF EJS Templates
chistedit: move layout() and dependencies onto state class...
Martin von Zweigbergk -
r49016:9006eafa default
parent child Browse files
Show More
@@ -1408,9 +1408,11 b' class _chistedit_state(object):'
1408 self,
1408 self,
1409 repo,
1409 repo,
1410 rules,
1410 rules,
1411 stdscr,
1411 ):
1412 ):
1412 self.repo = repo
1413 self.repo = repo
1413 self.rules = rules
1414 self.rules = rules
1415 self.stdscr = stdscr
1414 self.pos = 0
1416 self.pos = 0
1415 self.selected = None
1417 self.selected = None
1416 self.mode = (MODE_INIT, MODE_INIT)
1418 self.mode = (MODE_INIT, MODE_INIT)
@@ -1475,6 +1477,46 b' class _chistedit_state(object):'
1475 win.addstr(y, 1, conflictstr[:length])
1477 win.addstr(y, 1, conflictstr[:length])
1476 win.noutrefresh()
1478 win.noutrefresh()
1477
1479
1480 def helplines(self):
1481 if self.mode[0] == MODE_PATCH:
1482 help = b"""\
1483 ?: help, k/up: line up, j/down: line down, v: stop viewing patch
1484 pgup: prev page, space/pgdn: next page, c: commit, q: abort
1485 """
1486 else:
1487 help = b"""\
1488 ?: help, k/up: move up, j/down: move down, space: select, v: view patch
1489 d: drop, e: edit, f: fold, m: mess, p: pick, r: roll
1490 pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort
1491 """
1492 return help.splitlines()
1493
1494 def render_help(self, win):
1495 maxy, maxx = win.getmaxyx()
1496 for y, line in enumerate(self.helplines()):
1497 if y >= maxy:
1498 break
1499 addln(win, y, 0, line, curses.color_pair(COLOR_HELP))
1500 win.noutrefresh()
1501
1502 def layout(self):
1503 maxy, maxx = self.stdscr.getmaxyx()
1504 helplen = len(self.helplines())
1505 mainlen = maxy - helplen - 12
1506 if mainlen < 1:
1507 raise error.Abort(
1508 _(b"terminal dimensions %d by %d too small for curses histedit")
1509 % (maxy, maxx),
1510 hint=_(
1511 b"enlarge your terminal or use --config ui.interface=text"
1512 ),
1513 )
1514 return {
1515 b'commit': (12, maxx),
1516 b'help': (helplen, maxx),
1517 b'main': (mainlen, maxx),
1518 }
1519
1478
1520
1479 def _chisteditmain(repo, rules, stdscr):
1521 def _chisteditmain(repo, rules, stdscr):
1480 try:
1522 try:
@@ -1503,29 +1545,6 b' def _chisteditmain(repo, rules, stdscr):'
1503 except curses.error:
1545 except curses.error:
1504 pass
1546 pass
1505
1547
1506 def helplines(mode):
1507 if mode == MODE_PATCH:
1508 help = b"""\
1509 ?: help, k/up: line up, j/down: line down, v: stop viewing patch
1510 pgup: prev page, space/pgdn: next page, c: commit, q: abort
1511 """
1512 else:
1513 help = b"""\
1514 ?: help, k/up: move up, j/down: move down, space: select, v: view patch
1515 d: drop, e: edit, f: fold, m: mess, p: pick, r: roll
1516 pgup/K: move patch up, pgdn/J: move patch down, c: commit, q: abort
1517 """
1518 return help.splitlines()
1519
1520 def renderhelp(win, state):
1521 maxy, maxx = win.getmaxyx()
1522 mode, _ = state.mode
1523 for y, line in enumerate(helplines(mode)):
1524 if y >= maxy:
1525 break
1526 addln(win, y, 0, line, curses.color_pair(COLOR_HELP))
1527 win.noutrefresh()
1528
1529 def renderrules(rulesscr, state):
1548 def renderrules(rulesscr, state):
1530 rules = state.rules
1549 rules = state.rules
1531 pos = state.pos
1550 pos = state.pos
@@ -1600,30 +1619,12 b' pgup/K: move patch up, pgdn/J: move patc'
1600 content = state.modes[MODE_PATCH][b'patchcontents']
1619 content = state.modes[MODE_PATCH][b'patchcontents']
1601 renderstring(win, state, content[start:], diffcolors=True)
1620 renderstring(win, state, content[start:], diffcolors=True)
1602
1621
1603 def layout(mode):
1604 maxy, maxx = stdscr.getmaxyx()
1605 helplen = len(helplines(mode))
1606 mainlen = maxy - helplen - 12
1607 if mainlen < 1:
1608 raise error.Abort(
1609 _(b"terminal dimensions %d by %d too small for curses histedit")
1610 % (maxy, maxx),
1611 hint=_(
1612 b"enlarge your terminal or use --config ui.interface=text"
1613 ),
1614 )
1615 return {
1616 b'commit': (12, maxx),
1617 b'help': (helplen, maxx),
1618 b'main': (mainlen, maxx),
1619 }
1620
1621 def drawvertwin(size, y, x):
1622 def drawvertwin(size, y, x):
1622 win = curses.newwin(size[0], size[1], y, x)
1623 win = curses.newwin(size[0], size[1], y, x)
1623 y += size[0]
1624 y += size[0]
1624 return win, y, x
1625 return win, y, x
1625
1626
1626 state = _chistedit_state(repo, rules)
1627 state = _chistedit_state(repo, rules, stdscr)
1627
1628
1628 # eventloop
1629 # eventloop
1629 ch = None
1630 ch = None
@@ -1645,8 +1646,8 b' pgup/K: move patch up, pgdn/J: move patc'
1645 if size != stdscr.getmaxyx():
1646 if size != stdscr.getmaxyx():
1646 curses.resizeterm(*size)
1647 curses.resizeterm(*size)
1647
1648
1649 sizes = state.layout()
1648 curmode, unused = state.mode
1650 curmode, unused = state.mode
1649 sizes = layout(curmode)
1650 if curmode != oldmode:
1651 if curmode != oldmode:
1651 state.page_height = sizes[b'main'][0]
1652 state.page_height = sizes[b'main'][0]
1652 # Adjust the view to fit the current screen size.
1653 # Adjust the view to fit the current screen size.
@@ -1680,7 +1681,7 b' pgup/K: move patch up, pgdn/J: move patc'
1680 else:
1681 else:
1681 renderrules(mainwin, state)
1682 renderrules(mainwin, state)
1682 state.render_commit(commitwin)
1683 state.render_commit(commitwin)
1683 renderhelp(helpwin, state)
1684 state.render_help(helpwin)
1684 curses.doupdate()
1685 curses.doupdate()
1685 # done rendering
1686 # done rendering
1686 ch = encoding.strtolocal(stdscr.getkey())
1687 ch = encoding.strtolocal(stdscr.getkey())
General Comments 0
You need to be logged in to leave comments. Login now