2018-04-16 18:50:48 +03:00
|
|
|
import locale
|
|
|
|
|
import os
|
|
|
|
|
|
|
|
|
|
import gi
|
2018-12-17 18:31:57 +03:00
|
|
|
from enum import Enum, IntEnum
|
2018-04-16 18:50:48 +03:00
|
|
|
|
|
|
|
|
gi.require_version('Gtk', '3.0')
|
|
|
|
|
from gi.repository import Gtk, Gdk
|
|
|
|
|
|
|
|
|
|
# path to *.glade files
|
|
|
|
|
UI_RESOURCES_PATH = "app/ui/" if os.path.exists("app/ui/") else "/usr/share/demoneditor/app/ui/"
|
|
|
|
|
|
2019-05-09 14:48:29 +03:00
|
|
|
IS_GNOME_SESSION = int(bool(os.environ.get("GNOME_DESKTOP_SESSION_ID")))
|
|
|
|
|
|
2018-04-16 18:50:48 +03:00
|
|
|
# translation
|
|
|
|
|
TEXT_DOMAIN = "demon-editor"
|
|
|
|
|
if UI_RESOURCES_PATH == "app/ui/":
|
|
|
|
|
LANG_DIR = UI_RESOURCES_PATH + "lang"
|
|
|
|
|
locale.bindtextdomain(TEXT_DOMAIN, UI_RESOURCES_PATH + "lang")
|
|
|
|
|
|
|
|
|
|
theme = Gtk.IconTheme.get_default()
|
|
|
|
|
_IMAGE_MISSING = theme.load_icon("image-missing", 16, 0) if theme.lookup_icon("image-missing", 16, 0) else None
|
|
|
|
|
CODED_ICON = theme.load_icon("emblem-readonly", 16, 0) if theme.lookup_icon(
|
|
|
|
|
"emblem-readonly", 16, 0) else _IMAGE_MISSING
|
2018-07-08 14:58:41 +03:00
|
|
|
LOCKED_ICON = theme.load_icon("changes-prevent-symbolic", 16, 0) if theme.lookup_icon(
|
2018-04-16 18:50:48 +03:00
|
|
|
"system-lock-screen", 16, 0) else _IMAGE_MISSING
|
|
|
|
|
HIDE_ICON = theme.load_icon("go-jump", 16, 0) if theme.lookup_icon("go-jump", 16, 0) else _IMAGE_MISSING
|
|
|
|
|
TV_ICON = theme.load_icon("tv-symbolic", 16, 0) if theme.lookup_icon("tv-symbolic", 16, 0) else _IMAGE_MISSING
|
2019-04-20 20:44:56 +03:00
|
|
|
IPTV_ICON = theme.load_icon("emblem-shared", 16, 0) if theme.lookup_icon("emblem-shared", 16, 0) else None
|
|
|
|
|
EPG_ICON = theme.load_icon("gtk-index", 16, 0) if theme.lookup_icon("gtk-index", 16, 0) else None
|
2019-12-22 20:42:29 +03:00
|
|
|
DEFAULT_ICON = theme.load_icon("emblem-default", 16, 0) if theme.lookup_icon("emblem-default", 16, 0) else None
|
2018-04-16 18:50:48 +03:00
|
|
|
|
2018-11-05 00:31:44 +03:00
|
|
|
|
|
|
|
|
class KeyboardKey(Enum):
|
2019-03-10 15:33:28 +03:00
|
|
|
""" The raw(hardware) codes of the keyboard keys. """
|
|
|
|
|
Q = 24
|
2018-11-05 00:31:44 +03:00
|
|
|
E = 26
|
|
|
|
|
R = 27
|
|
|
|
|
T = 28
|
2019-03-18 23:04:05 +03:00
|
|
|
U = 30
|
2019-03-10 15:33:28 +03:00
|
|
|
O = 32
|
2018-11-05 00:31:44 +03:00
|
|
|
P = 33
|
|
|
|
|
S = 39
|
2019-03-18 23:04:05 +03:00
|
|
|
D = 40
|
2018-11-05 00:31:44 +03:00
|
|
|
H = 43
|
|
|
|
|
L = 46
|
|
|
|
|
X = 53
|
|
|
|
|
C = 54
|
|
|
|
|
V = 55
|
2019-03-18 23:04:05 +03:00
|
|
|
B = 56
|
2018-12-02 00:45:55 +03:00
|
|
|
W = 25
|
2018-11-23 15:03:10 +03:00
|
|
|
Z = 52
|
2018-11-05 00:31:44 +03:00
|
|
|
INSERT = 118
|
|
|
|
|
HOME = 110
|
|
|
|
|
END = 115
|
|
|
|
|
UP = 111
|
|
|
|
|
DOWN = 116
|
|
|
|
|
PAGE_UP = 112
|
|
|
|
|
PAGE_DOWN = 117
|
|
|
|
|
LEFT = 113
|
|
|
|
|
RIGHT = 114
|
2018-11-12 11:26:11 +03:00
|
|
|
F2 = 68
|
2019-02-09 15:16:03 +03:00
|
|
|
SPACE = 65
|
2018-11-05 00:31:44 +03:00
|
|
|
DELETE = 119
|
|
|
|
|
BACK_SPACE = 22
|
|
|
|
|
CTRL_L = 37
|
|
|
|
|
CTRL_R = 105
|
2018-11-05 11:09:15 +03:00
|
|
|
# Laptop codes
|
|
|
|
|
HOME_KP = 79
|
|
|
|
|
END_KP = 87
|
|
|
|
|
PAGE_UP_KP = 81
|
|
|
|
|
PAGE_DOWN_KP = 89
|
2018-11-05 00:31:44 +03:00
|
|
|
|
|
|
|
|
@classmethod
|
2018-11-09 14:14:24 +03:00
|
|
|
def value_exist(cls, value):
|
|
|
|
|
return value in (val.value for val in cls.__members__.values())
|
2018-11-05 00:31:44 +03:00
|
|
|
|
|
|
|
|
|
2018-11-02 21:58:10 +03:00
|
|
|
# Keys for move in lists. KEY_KP_(NAME) for laptop!!!
|
2018-11-05 00:31:44 +03:00
|
|
|
MOVE_KEYS = (KeyboardKey.UP, KeyboardKey.PAGE_UP, KeyboardKey.DOWN, KeyboardKey.PAGE_DOWN, KeyboardKey.HOME,
|
2018-11-05 11:09:15 +03:00
|
|
|
KeyboardKey.END, KeyboardKey.HOME_KP, KeyboardKey.END_KP, KeyboardKey.PAGE_UP_KP, KeyboardKey.PAGE_DOWN_KP)
|
2018-11-02 23:13:51 +03:00
|
|
|
|
|
|
|
|
|
2019-03-10 15:33:28 +03:00
|
|
|
class FavClickMode(IntEnum):
|
|
|
|
|
""" Double click mode on the service in the bouquet(FAV) list. """
|
|
|
|
|
DISABLED = 0
|
|
|
|
|
STREAM = 1
|
|
|
|
|
PLAY = 2
|
|
|
|
|
ZAP = 3
|
|
|
|
|
|
|
|
|
|
|
2018-04-16 18:50:48 +03:00
|
|
|
class ViewTarget(Enum):
|
2019-03-10 15:33:28 +03:00
|
|
|
""" Used for set target view. """
|
2018-04-16 18:50:48 +03:00
|
|
|
BOUQUET = 0
|
|
|
|
|
FAV = 1
|
|
|
|
|
SERVICES = 2
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class BqGenType(Enum):
|
2019-03-10 15:33:28 +03:00
|
|
|
""" Bouquet generation type. """
|
2018-04-16 18:50:48 +03:00
|
|
|
SAT = 0
|
|
|
|
|
EACH_SAT = 1
|
|
|
|
|
PACKAGE = 2
|
|
|
|
|
EACH_PACKAGE = 3
|
|
|
|
|
TYPE = 4
|
|
|
|
|
EACH_TYPE = 5
|
|
|
|
|
|
|
|
|
|
|
2018-12-17 18:31:57 +03:00
|
|
|
class Column(IntEnum):
|
2018-12-16 17:28:07 +03:00
|
|
|
""" Column nums in the views """
|
|
|
|
|
# main view
|
|
|
|
|
SRV_CAS_FLAGS = 0
|
|
|
|
|
SRV_STANDARD = 1
|
|
|
|
|
SRV_CODED = 2
|
|
|
|
|
SRV_SERVICE = 3
|
|
|
|
|
SRV_LOCKED = 4
|
|
|
|
|
SRV_HIDE = 5
|
|
|
|
|
SRV_PACKAGE = 6
|
|
|
|
|
SRV_TYPE = 7
|
|
|
|
|
SRV_PICON = 8
|
|
|
|
|
SRV_PICON_ID = 9
|
|
|
|
|
SRV_SSID = 10
|
|
|
|
|
SRV_FREQ = 11
|
|
|
|
|
SRV_RATE = 12
|
|
|
|
|
SRV_POL = 13
|
|
|
|
|
SRV_FEC = 14
|
|
|
|
|
SRV_SYSTEM = 15
|
|
|
|
|
SRV_POS = 16
|
|
|
|
|
SRV_DATA_ID = 17
|
|
|
|
|
SRV_FAV_ID = 18
|
|
|
|
|
SRV_TRANSPONDER = 19
|
|
|
|
|
SRV_TOOLTIP = 20
|
|
|
|
|
SRV_BACKGROUND = 21
|
|
|
|
|
# fav view
|
|
|
|
|
FAV_NUM = 0
|
|
|
|
|
FAV_CODED = 1
|
|
|
|
|
FAV_SERVICE = 2
|
|
|
|
|
FAV_LOCKED = 3
|
|
|
|
|
FAV_HIDE = 4
|
|
|
|
|
FAV_TYPE = 5
|
|
|
|
|
FAV_POS = 6
|
|
|
|
|
FAV_ID = 7
|
|
|
|
|
FAV_PICON = 8
|
2018-12-16 22:44:45 +03:00
|
|
|
FAV_TOOLTIP = 9
|
|
|
|
|
FAV_BACKGROUND = 10
|
2019-02-09 12:43:27 +03:00
|
|
|
# bouquets view
|
|
|
|
|
BQ_NAME = 0
|
|
|
|
|
BQ_LOCKED = 1
|
|
|
|
|
BQ_HIDDEN = 2
|
|
|
|
|
BQ_TYPE = 3
|
2018-12-16 17:28:07 +03:00
|
|
|
|
|
|
|
|
def __index__(self):
|
|
|
|
|
""" Overridden to get the index in slices directly """
|
|
|
|
|
return self.value
|
|
|
|
|
|
|
|
|
|
|
2018-04-16 18:50:48 +03:00
|
|
|
if __name__ == "__main__":
|
|
|
|
|
pass
|