lib/screens/main_menu.rb in manabu-desktop-0.0.3 vs lib/screens/main_menu.rb in manabu-desktop-0.0.4
- old
+ new
@@ -1,51 +1,154 @@
require_relative 'base'
require_relative 'login'
require_relative '../sessions'
require_relative '../windows'
+require_relative './components/server_list_item'
+STATUS_ICON_SIZE = 16
+
module ManabuDesktop
module Screens
class MainMenu < ManabuDesktop::Screens::Base
+
+ def _generate_server_list_item(user, server, port = 80)
+ sib_builder = Gtk::Builder.new()
+ sib_builder.add_from_file("#{__dir__}/../../layouts/server_listbox.glade")
+ lbr = sib_builder.get_object('server_instance.ListBoxRow')
+ label = sib_builder.get_object('server_id.Label')
+ label.set_label("#{user}@#{server}:#{port}")
+ lbr.show_all()
+ lbr
+ end
+
def initialize()
if ManabuDesktop::Windows.set_main_menu(self) == false
# TODO: handle multiple main menus..
STDERR.puts 'Tried to initialize multiple Main Menus!'
end
super('main_menu', :c)
+ @window.set_resizable(false) # Main menu is a fixed size
+ @window.gravity = Gdk::Gravity::NORTH_EAST # Float to top right
+ @window.move((Gdk::Screen.width - @window.width_request), 0) # Try to position manually
+ # Connection button
connect_button = @builder.get_object('connect.Button')
connect_button.set_label(I18n.t('main_menu.connect'))
connect_button.signal_connect('clicked') { ManabuDesktop::Screens::Login.new() }
+ # Settings button
settings_button = @builder.get_object('settings.Button')
settings_button.set_label(I18n.t('main_menu.settings'))
settings_button.signal_connect('clicked') { puts 'Settings coming soon' }
+ # Exit button (closes all other windows)
exit_button = @builder.get_object('exit.Button')
exit_button.set_label(I18n.t('main_menu.exit'))
exit_button.signal_connect('clicked') do |_widget|
ManabuDesktop::Windows.destroy_all()
Gtk.main_quit()
end
+ # Connection list
@connections_list = @builder.get_object('connections.ListBox')
+ # TODO: delete lines here after implementation [reference]
+ #sli = ManabuDesktop::Screens::Components::ServerListItem.new("a", "b")
+ #@connections_list.add(sli.list_box_row)
+ #sli = ManabuDesktop::Screens::Components::ServerListItem.new("c", "d")
+ #@connections_list.add(sli.list_box_row)
+ #@connections_list.add(ServerInstanceBox.new("c", "d"))
+ #lbr = Gtk::ListBoxRow.new()
+ #box = Gtk::Box.new(Gtk::Orientation::HORIZONTAL)
+ #lbr.add box
+ #label = Gtk::Label.new("test")
+ #box.pack_start(label, expand: false, fill: false, padding: 0)
+ #@connections_list.add(lbr)
+ @connections_list.show_all
@status_bar = @builder.get_object('status.Statusbar')
@status_bar_context_id = @status_bar.get_context_id('Connection Status')
set_connections_status(ManabuDesktop::Sessions.session_count)
+ # Status icon
+ @status_image = @builder.get_object('status.Image')
+ _load_status_icons()
+ _set_status_icon(:clear)
+
+ # Heartbeat icon
+ @heartbeat_image = @builder.get_object('heartbeat.Image')
+ _load_heartbeat_icons()
+ @heartbeat_image.set_pixbuf(@heart_icons[:black])
+
+ # Transmission and buffer status
+ @transfer_status_image = @builder.get_object('transfer_status.Image')
+ _load_transfer_icons()
+ @transfer_status_image.set_pixbuf(@transfer_icons[:none])
+ @buffer_status_progress_bar = @builder.get_object('buffer_status.ProgressBar')
+
_show()
end
def set_status(status_text)
@status_bar.push(@status_bar_context_id, status_text)
end
def set_connections_status(num)
set_status("#{I18n.t('main_menu.num_connections')}: #{num}")
+ end
+
+ def _load_status_icons()
+ @status_icons = {}
+ @status_icons[:none] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/black_circle.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @status_icons[:clear] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/white_circle.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @status_icons[:ok] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/blue_circle.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @status_icons[:ng] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/red_circle.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ end
+
+ def _set_status_icon(status_code)
+ if @status_icons.include? status_code
+ @status_image.set_pixbuf(@status_icons[status_code])
+ else
+ @status_image.set_pixbuf(@status_icons[:none])
+ end
+ end
+
+ def _load_heartbeat_icons()
+ @heart_icons = {}
+ @heart_icons[:black] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/black_heart.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @heart_icons[:red] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/heart.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ end
+
+ def heartbeat()
+ end
+
+ def _load_transfer_icons()
+ @transfer_icons = {}
+ @transfer_icons[:none] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/transfer_none.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @transfer_icons[:up] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/transfer_up.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @transfer_icons[:down] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/transfer_down.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
+ @transfer_icons[:updown] = GdkPixbuf::Pixbuf.new(
+ {file: "#{__dir__}/../../layouts/img/transfer_updown.png",
+ width: STATUS_ICON_SIZE, height: STATUS_ICON_SIZE})
end
end
end
end