mirror of
https://github.com/Guake/guake.git
synced 2025-10-26 11:27:13 +00:00
GuakeWidget class has been updated
This commit is contained in:
parent
51be6c9b09
commit
ba32f74243
@ -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">
|
||||
|
||||
@ -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, "")
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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()
|
||||
|
||||
@ -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
|
||||
|
||||
Loading…
Reference in New Issue
Block a user