GuakeWidget class has been updated

This commit is contained in:
Mikhail Koshel 2017-01-24 02:32:04 +06:00
parent 51be6c9b09
commit ba32f74243
5 changed files with 118 additions and 30 deletions

View File

@ -14,7 +14,82 @@
<property name="decorated">False</property>
<property name="has_resize_grip">True</property>
<child>
<placeholder/>
<object class="GtkBox" id="GuakeBox">
<property name="visible">True</property>
<property name="can_focus">False</property>
<property name="hexpand">True</property>
<property name="vexpand">True</property>
<property name="orientation">vertical</property>
<child>
<object class="GtkNotebook" id="GuakeNotebook">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="tab_pos">bottom</property>
<property name="scrollable">True</property>
<child>
<object class="GtkFixed" id="fixed3">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
</child>
<child type="tab">
<object class="GtkButton" id="GuakeNewPageButton">
<property name="label">gtk-add</property>
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="receives_default">True</property>
<property name="opacity">0.92941176470588238</property>
<property name="halign">start</property>
<property name="valign">start</property>
<property name="use_stock">True</property>
<property name="image_position">top</property>
</object>
<packing>
<property name="tab_fill">False</property>
</packing>
</child>
</object>
<packing>
<property name="expand">True</property>
<property name="fill">True</property>
<property name="position">0</property>
</packing>
</child>
<child>
<object class="GtkPaned" id="GuakeResizer">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="orientation">vertical</property>
<property name="wide_handle">True</property>
<child>
<object class="GtkFixed" id="fixed1">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
<child>
<object class="GtkFixed" id="fixed2">
<property name="visible">True</property>
<property name="can_focus">False</property>
</object>
<packing>
<property name="resize">False</property>
<property name="shrink">True</property>
</packing>
</child>
</object>
<packing>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">end</property>
<property name="position">1</property>
</packing>
</child>
</object>
</child>
</object>
<object class="GtkMenu" id="context-menu">

View File

@ -23,7 +23,7 @@ from __future__ import print_function
from __future__ import unicode_literals
import logging
# import os
import os
# from time import sleep
@ -85,8 +85,11 @@ class GuakeApplication(Gtk.Application):
return 0
def do_activate(self):
self.window = GuakeApplicationWindow(application=self, visible=self.show_on_start)
# notebook = GuakeNotebook()
datapath = "./data"
filename = os.path.join(datapath, "ui", "app.ui")
builder = Gtk.Builder()
builder.add_from_file(filename)
self.window = GuakeApplicationWindow(builder, application=self, visible=self.show_on_start)
keystr = "F2"
Keybinder.init()
Keybinder.bind(keystr, self.window.show_hide_handler, "")

View File

@ -43,16 +43,16 @@ logger = logging.getLogger(__name__)
class GuakeApplicationWindow(GuakeWidget, Gtk.ApplicationWindow):
__filename__ = "app.ui"
def __init__(self, *args, **kwargs):
def __init__(self, builder, *args, **kwargs):
app = kwargs.get("application")
if app is not None:
self.set_application(app)
self._set_window_position()
self._set_window_size()
note = GuakeNotebook()
self.add(note)
# self.note = self.builder.get_object("GuakeNotebook")
self.note = GuakeNotebook(builder)
self.resizer = builder.get_object("GuakeResizer")
self.resizer.connect("motion-notify-event", self.change_size_handler)
self.visible = kwargs.get("visible", False)
@property
@ -97,3 +97,13 @@ class GuakeApplicationWindow(GuakeWidget, Gtk.ApplicationWindow):
def show_hide_handler(self, *args):
self.visible = not self.visible
return
def change_size_handler(self, widget, event):
# got from
# http://stackoverflow.com/questions/13638782/resize-borderless-window-with-vpaned-in-pythongtk3
if Gdk.ModifierType.BUTTON1_MASK & event.get_state() != 0:
mouse_y = event.device.get_position()[2]
new_height = mouse_y - self.get_position()[1]
if new_height > 0:
self.resize(self.get_allocation().width, new_height)
self.show_all()

View File

@ -23,7 +23,7 @@ from __future__ import print_function
from __future__ import unicode_literals
import logging
import os
# pylint: disable=wrong-import-position,wrong-import-order,unused-import
from guake import gi
assert gi # hack to "use" the import so pep8/pyflakes are happy
@ -32,31 +32,37 @@ assert gi # hack to "use" the import so pep8/pyflakes are happy
from gi.repository import Gtk
# pylint: enable=wrong-import-position,wrong-import-order,unused-import
from guake.widgets.terminal import GuakeTerminal
from guake.widgets.widget import GuakeWidget
logger = logging.getLogger(__name__)
class GuakeNotebook(Gtk.Notebook):
class GuakeNotebook(GuakeWidget, Gtk.Notebook):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
# TODO: choose from settings
self.set_tab_pos(Gtk.PositionType.BOTTOM)
self.new_page_button = self._get_new_page_button()
_page_counter = 0
def __init__(self, builder, *args, **kwargs):
self.new_page_button = builder.get_object("GuakeNewPageButton")
self.new_page_button.connect("clicked", self.new_page_handler)
self._add_new_page()
self.show_all()
@property
def page_counter(self):
self._page_counter += 1
return self._page_counter
def _add_new_page(self):
pages_number = self.get_n_pages()
position = 0 if pages_number < 2 else pages_number - 1
self.insert_page(GuakeTerminal(), Gtk.Label("Terminal"), position)
self.insert_page(
GuakeTerminal(),
Gtk.Label("{}:".format(self.page_counter)),
position
)
self.show_all()
self.set_current_page(position)
return
def _get_new_page_button(self):
button = Gtk.Button("+")
self.append_page(Gtk.Frame(), button)
button.connect("clicked", self.new_page_handler)
return button
def new_page_handler(self, *args):
self._add_new_page()

View File

@ -38,16 +38,10 @@ class GuakeWidget(object):
# __filename__ should be set in a child class
__filename__ = None
def __new__(cls, *args, **kwargs):
def __new__(cls, builder, *args, **kwargs):
"""Create application from glade .ui file;
ApplicationWindow identifier in the ui-file should be equal to cls.__name__"""
assert isinstance(cls.__filename__, str), "%s has invalid __filename__!" % cls
datapath = kwargs.get("datapath", "./data")
filename = os.path.join(datapath, "ui", cls.__filename__)
builder = Gtk.Builder()
builder.add_from_file(filename)
instance = builder.get_object(cls.__name__)
assert instance is not None, "Gtk widget %s not found!" % cls.__name__
instance.__class__ = cls
del builder
return instance