compose window
This commit is contained in:
parent
7b7c3e637f
commit
77070e5823
2 changed files with 72 additions and 8 deletions
21
src/main.py
21
src/main.py
|
@ -29,7 +29,7 @@ gi.require_version('Handy', '1')
|
|||
from gi.repository import Handy
|
||||
Handy.init()
|
||||
|
||||
from .widgets import LoginPage, Timeline, PostItem
|
||||
from .widgets import LoginPage, Timeline, PostItem, ComposeWindow
|
||||
|
||||
class Application(Gtk.Application):
|
||||
|
||||
|
@ -58,13 +58,13 @@ class Application(Gtk.Application):
|
|||
pass
|
||||
|
||||
def do_activate(self):
|
||||
win = self.props.active_window
|
||||
if not win:
|
||||
win = Gtk.ApplicationWindow(application=self)
|
||||
win.set_default_size(320, 480)
|
||||
self.win = self.props.active_window
|
||||
if not self.win:
|
||||
self.win = Gtk.ApplicationWindow(application=self)
|
||||
self.win.set_default_size(320, 480)
|
||||
|
||||
title_bar = Handy.TitleBar()
|
||||
win.set_titlebar(title_bar)
|
||||
self.win.set_titlebar(title_bar)
|
||||
|
||||
self.header = Handy.HeaderBar(show_close_button=True)
|
||||
title_bar.add(self.header)
|
||||
|
@ -94,8 +94,8 @@ class Application(Gtk.Application):
|
|||
vbox.pack_start(self.stack, True, True, 0)
|
||||
vbox.pack_end(stack_switcher_bar, False, False, 0)
|
||||
|
||||
win.add(vbox)
|
||||
win.show_all()
|
||||
self.win.add(vbox)
|
||||
self.win.show_all()
|
||||
|
||||
def blarp(self, args=None):
|
||||
logging.debug("BLARP")
|
||||
|
@ -130,6 +130,7 @@ class Application(Gtk.Application):
|
|||
self.stack.add_titled(global_tl, "global", "Global")
|
||||
|
||||
new_post_button = Gtk.Button.new_from_icon_name('list-add-symbolic', 1)
|
||||
new_post_button.connect('clicked', self.on_new_post)
|
||||
self.header.pack_start(new_post_button)
|
||||
|
||||
reload_button = Gtk.Button.new_from_icon_name('view-refresh-symbolic', 1)
|
||||
|
@ -144,6 +145,10 @@ class Application(Gtk.Application):
|
|||
timeline = self.stack.get_visible_child()
|
||||
timeline.emit('refresh')
|
||||
|
||||
def on_new_post(self, button):
|
||||
compose = ComposeWindow()
|
||||
compose.set_transient_for(self.win)
|
||||
|
||||
def main(version):
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
app = Application()
|
||||
|
|
|
@ -28,6 +28,65 @@ from gi.repository import GObject, Gdk, Gtk, Gio, GLib
|
|||
gi.require_version('Handy', '1')
|
||||
from gi.repository import Handy
|
||||
|
||||
class ComposeWindow(Handy.Window):
|
||||
|
||||
def __init__(self):
|
||||
super().__init__(modal=True)
|
||||
self.set_default_size(500, 300)
|
||||
self.set_type_hint(Gdk.WindowTypeHint.DIALOG)
|
||||
|
||||
box = Gtk.Box(orientation='vertical')
|
||||
header = Handy.HeaderBar(show_close_button=False)
|
||||
|
||||
cancel_button = Gtk.Button(label='Cancel')
|
||||
cancel_button.connect('clicked', self.cancel_post)
|
||||
post_button = Gtk.Button(label='Post')
|
||||
post_button.connect('clicked', self.send_post)
|
||||
|
||||
header.set_title('New Post')
|
||||
header.pack_start(cancel_button)
|
||||
header.pack_end(post_button)
|
||||
|
||||
scroller = Gtk.ScrolledWindow(halign='fill')
|
||||
textarea = Gtk.TextView(
|
||||
left_margin=8,
|
||||
right_margin=8,
|
||||
top_margin=8,
|
||||
bottom_margin=8
|
||||
)
|
||||
textarea.set_wrap_mode(Gtk.WrapMode.WORD)
|
||||
scroller.add(textarea)
|
||||
self.buffer = textarea.get_buffer()
|
||||
|
||||
self.max_length = 256
|
||||
actionbar = Gtk.ActionBar()
|
||||
self.counter_label = Gtk.Label()
|
||||
self.counter_label.set_text(str(self.max_length))
|
||||
actionbar.pack_end(self.counter_label)
|
||||
|
||||
self.buffer.connect('changed', self.validate)
|
||||
|
||||
box.pack_start(header, False, False, 0)
|
||||
box.pack_start(scroller, True, True, 0)
|
||||
box.pack_end(actionbar, False, False, 0)
|
||||
self.add(box)
|
||||
|
||||
self.show_all()
|
||||
|
||||
def validate(self, widget):
|
||||
self.counter = self.max_length - self.buffer.get_char_count()
|
||||
self.counter_label.set_text(str(self.counter))
|
||||
|
||||
def send_post(self, button):
|
||||
start = self.buffer.get_start_iter()
|
||||
end = self.buffer.get_end_iter()
|
||||
text = self.buffer.get_text(start, end, False)
|
||||
pnutpy.api.create_post(data={'text': text})
|
||||
self.close()
|
||||
|
||||
def cancel_post(self, button):
|
||||
self.close()
|
||||
|
||||
class LoginPage(Gtk.Box):
|
||||
|
||||
__gsignals__ = {
|
||||
|
|
Loading…
Reference in a new issue