6d2b07f807ab4862a99d3e3d3fafc6b4794ceb24
[blender-addons-contrib.git] / ui_splash_tips / __init__.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 # <pep8 compliant>
20
21 bl_info = {
22     "name": "Splash Startup Tips",
23     "description": "Show a tip on startup",
24     "blender": (2, 73, 0),
25     "location": "Splash Screen",
26     "warning": "",
27     "category": "UI",
28 }
29
30
31 def find_random_line(f):
32     import os
33
34     chunk_size = 16
35     with open(f, 'rb') as f_handle:
36         import random
37         f_handle.seek(0, os.SEEK_END)
38         size = f_handle.tell()
39         i = random.randint(1, size)
40
41         # find the line
42         while i != 0:
43             i -= chunk_size
44             if i < 0:
45                 i = 0
46             f_handle.seek(i, os.SEEK_SET)
47             d = f_handle.read(chunk_size)
48             i_newline = d.rfind(b'\n')
49             if i_newline == -1:
50                 pass
51             else:
52                 i += i_newline + 1
53                 break
54
55         f_handle.seek(i, os.SEEK_SET)
56         data_chunks = []
57         i_newline = -1
58         while i_newline == -1:
59             d = f_handle.read(chunk_size)
60             i_newline = d.find(b'\n')
61             if i_newline != -1:
62                 d = d[:i_newline]
63             data_chunks.append(d)
64         return b''.join(data_chunks)
65
66     return data
67
68
69 def find_random_tip():
70     import os
71
72     text = find_random_line(
73             os.path.join(os.path.dirname(__file__), "tips.txt"),
74             )
75
76     url_index = text.rfind(b' ~')
77     if url_index != -1:
78         text, url = text[:url_index], text[url_index + 2:]
79     else:
80         url = b''
81     print(text)
82     print(url)
83     return text.decode("utf-8"), url.decode("utf-8")
84
85
86 def menu_func(self, context):
87     url_prefix = "https://www.blender.org/manual"
88
89     layout = self.layout
90     tip, url = find_random_tip()
91     col = layout.row()
92     col.label(tip)
93     if url:
94         col.operator("wm.url_open", text="", icon='INFO').url = url_prefix + url
95     layout.separator()
96
97
98 import bpy
99
100
101 def register():
102     bpy.types.USERPREF_MT_splash_footer.append(menu_func)
103
104
105 def unregister():
106     bpy.types.USERPREF_MT_splash_footer.remove(menu_func)
107
108
109 if __name__ == "__main__":
110     register()