Implement simple resizing

This commit is contained in:
Paul Nameless 2019-02-17 23:00:37 +01:00
parent 4986d39987
commit 473f96902f
2 changed files with 60 additions and 14 deletions

View file

@ -19,18 +19,15 @@ class Controller:
self.lock = threading.Lock() self.lock = threading.Lock()
def init(self): def init(self):
self.view.draw_chats( pass
self.model.current_chat, # self.refresh_chats()
self.model.get_chats() # self.refresh_msgs()
)
msgs = self.model.get_current_msgs()
self.view.draw_msgs(self.model.get_current_msg(), msgs)
def run(self): def run(self):
try: try:
self.handle() self.handle()
except Exception as e: except Exception as e:
logger.exception('Error happened on run') logger.exception('Error happened in main loop')
# def send_msg(self): # def send_msg(self):
# import curses # import curses
@ -68,6 +65,12 @@ class Controller:
# self.view.draw_msgs(msgs) # self.view.draw_msgs(msgs)
def handle_msgs(self): def handle_msgs(self):
# set width to 0.25, move window to left
# refresh everything
self.view.chats.resize(0.25)
self.view.msgs.resize(0.25)
self.refresh_chats()
while True: while True:
key = self.view.get_key(self.view.chats.h, self.view.chats.w) key = self.view.get_key(self.view.chats.h, self.view.chats.w)
@ -86,6 +89,12 @@ class Controller:
elif key == 'k': elif key == 'k':
if self.model.prev_msg(): if self.model.prev_msg():
self.refresh_msgs() self.refresh_msgs()
elif key == 'G':
# move to the bottom
pass
elif key == 'gg':
# move to the top
pass
elif key == 'e': elif key == 'e':
# edit msg # edit msg
pass pass
@ -107,14 +116,18 @@ class Controller:
self.model.current_chat, self.model.current_chat,
self.model.get_chats() self.model.get_chats()
) )
msgs = self.model.get_current_msgs() self.refresh_msgs()
self.view.draw_msgs(self.model.get_current_msg(), msgs)
def refresh_msgs(self): def refresh_msgs(self):
msgs = self.model.get_current_msgs() msgs = self.model.get_current_msgs()
self.view.draw_msgs(self.model.get_current_msg(), msgs) self.view.draw_msgs(self.model.get_current_msg(), msgs)
def handle_chats(self): def handle_chats(self):
# set width to 0.5, move window to center?
# refresh everything
self.view.chats.resize(0.5)
self.view.msgs.resize(0.5)
self.refresh_chats()
while True: while True:
key = self.view.get_key(self.view.chats.h, self.view.chats.w) key = self.view.get_key(self.view.chats.h, self.view.chats.w)
@ -125,6 +138,9 @@ class Controller:
rc = self.handle_msgs() rc = self.handle_msgs()
if rc == 'QUIT': if rc == 'QUIT':
return return
self.view.chats.resize(0.5)
self.view.msgs.resize(0.5)
self.refresh_chats()
elif key == 'j': elif key == 'j':
is_changed = self.model.next_chat() is_changed = self.model.next_chat()
@ -145,7 +161,7 @@ class Controller:
chat_id = update['message']['chat_id'] chat_id = update['message']['chat_id']
self.model.msgs.msgs[chat_id].append(update['message']) self.model.msgs.msgs[chat_id].append(update['message'])
msgs = self.model.get_current_msgs() msgs = self.model.get_current_msgs()
self.view.draw_msgs(msgs) self.refresh_msgs()
try: try:
notify(update['message']['content']['text']['text']) notify(update['message']['content']['text']['text'])
except Exception: except Exception:

38
view.py
View file

@ -46,6 +46,20 @@ class View:
# return _input # return _input
class StatusView:
def __init__(self, stdscr):
# self.stdscr = stdscr
pass
def resize(self):
pass
def draw(self, msg):
# draw msg on the last line
pass
emoji_pattern = re.compile( emoji_pattern = re.compile(
"[" "["
"\U0001F600-\U0001F64F" # emoticons "\U0001F600-\U0001F64F" # emoticons
@ -58,11 +72,16 @@ emoji_pattern = re.compile(
class ChatView: class ChatView:
def __init__(self, stdscr): def __init__(self, stdscr, p=0.5):
self.h = curses.LINES - 1 self.h = curses.LINES - 1
self.w = int((curses.COLS - 1) * 0.25) self.w = int((curses.COLS - 1) * p)
self.win = stdscr.subwin(self.h, self.w, 0, 0) self.win = stdscr.subwin(self.h, self.w, 0, 0)
def resize(self, p=0.25):
self.h = curses.LINES - 1
self.w = int((curses.COLS - 1) * p)
self.win.resize(self.h, self.w)
def draw(self, current, chats): def draw(self, current, chats):
self.win.clear() self.win.clear()
# self.win.vline(0, self.w-1, curses.ACS_VLINE, self.h) # self.win.vline(0, self.w-1, curses.ACS_VLINE, self.h)
@ -80,13 +99,24 @@ class ChatView:
class MsgView: class MsgView:
def __init__(self, stdscr): def __init__(self, stdscr, p=0.5):
self.stdscr = stdscr
self.h = curses.LINES - 1 self.h = curses.LINES - 1
self.w = curses.COLS - int((curses.COLS - 1) * 0.25) self.w = curses.COLS - int((curses.COLS - 1) * p)
self.s = curses.COLS - self.w self.s = curses.COLS - self.w
self.win = stdscr.subwin(self.h, self.w, 0, self.s) self.win = stdscr.subwin(self.h, self.w, 0, self.s)
self.lines = 0 self.lines = 0
def resize(self, p=0.25):
self.h = curses.LINES - 1
self.w = curses.COLS - int((curses.COLS - 1) * p)
logger.info('msgs view width: %s', self.w)
self.s = curses.COLS - self.w
self.win = self.stdscr.subwin(self.h, self.w, 0, self.s)
self.win.mvwin(0, self.s)
self.win.resize(self.h, self.w)
def draw(self, current, msgs): def draw(self, current, msgs):
logger.info('Dwaring msgs') logger.info('Dwaring msgs')
self.win.clear() self.win.clear()