Skip to content

Commit 468d37c

Browse files
committed
implement new project settings
1 parent 448f25e commit 468d37c

File tree

2 files changed

+91
-14
lines changed

2 files changed

+91
-14
lines changed

GDL.py

Lines changed: 41 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,12 +4,13 @@
44
import sublime
55
import sublime_plugin
66
import sys
7-
import logging as log
7+
import logging
8+
9+
log = logging.getLogger(__name__)
810

911
PACKAGE_SETTINGS = "GDL.sublime-settings"
1012
DEFAULT_AC_PATH = "C:/Program Files/GRAPHISOFT/ARCHICAD 23"
1113

12-
1314
def save_all_files():
1415
""" Saves all files open in Sublime.
1516
Mimics the 'save on build' behavior of Sublime Text.
@@ -42,6 +43,20 @@ def get_project_data(view, invoke):
4243
sublime.error_message("Something went wrong.")
4344
return
4445

46+
def get_project_newroot(view):
47+
""" Gets the data of the .sublime-project file.
48+
Returns a relative path, if set.
49+
(Useful, if you have many subfolders.)
50+
"""
51+
try:
52+
project_data = view.window().project_data()
53+
new_root_setting = project_data.get('root')
54+
except:
55+
new_root_setting = ""
56+
57+
return new_root_setting
58+
59+
4560
# Future addition. Sadly not working as by now.
4661
# class AutocompleteCaps(sublime_plugin.EventListener):
4762
# def on_query_completions(self, view, prefix, locations):
@@ -60,17 +75,25 @@ def run(self, *args, **kwargs):
6075
if self.view.settings().get("auto_save", True):
6176
save_all_files()
6277

63-
folders = self.window.folders()
64-
if len(folders) <= 0:
78+
self.nr_path = get_project_newroot(self.view)
79+
log.debug(self.nr_path)
80+
# see if there is a relative path set in the project settings
81+
if self.nr_path != "":
82+
nr_path_abs = os.path.join(self.window.folders()[0], self.nr_path)
83+
self.folders = [directory for directory in os.listdir(nr_path_abs) if os.path.isdir(os.path.join(nr_path_abs, directory))]
84+
else:
85+
self.folders = self.window.folders()
86+
87+
if len(self.folders) <= 0:
6588
sublime.error_message("GDL build command error: You must have a project open.")
6689
else:
67-
if len(folders) == 1:
90+
if len(self.folders) == 1:
6891
self.multipleFolders = False
69-
self.project_folder = folders[0]
92+
self.project_folder = self.folders[0]
7093
self.on_done_proj() # go on here
7194
else:
7295
self.multipleFolders = True
73-
self.pick_project_folder(folders)
96+
self.pick_project_folder(self.folders)
7497

7598
def check_system(self):
7699
""" Returns the path to the LP_XML converter.
@@ -103,7 +126,8 @@ def pick_project_folder(self, folders):
103126
self.show_quick_panel(folderNames, self.select_project)
104127

105128
def select_project(self, select):
106-
folders = self.window.folders()
129+
#folders = self.window.folders()
130+
folders = self.folders
107131
if select < 0: # will be -1 if panel was cancelled
108132
return
109133
self.project_folder = folders[select]
@@ -192,16 +216,19 @@ def on_done_proj(self):
192216
def find_hsf(self):
193217
""" Finds all possible folders for converting to GSM.
194218
"""
195-
self.folders = [fldr for fldr in os.listdir(self.project_folder) if os.path.isdir(os.path.join(self.project_folder, fldr))]
219+
#self.folders = [fldr for fldr in os.listdir(self.project_folder) if os.path.isdir(os.path.join(self.project_folder, fldr))]
196220

197221
if len(self.folders) <= 0:
198222
sublime.error_message("GDL build error: No HSF found.")
199223

200-
if len(self.folders) > 1:
201-
self.show_quick_panel(self.folders, self.select_hsf)
202-
else:
203-
self.folder_to_convert = os.path.join(self.project_folder,self.folders[0])
204-
self.on_done_file() # go on here
224+
# if len(self.folders) > 1:
225+
# self.show_quick_panel(self.folders, self.select_hsf)
226+
# else:
227+
# self.folder_to_convert = os.path.join(self.project_folder,self.folders[0])
228+
# self.on_done_file() # go on here
229+
230+
self.folder_to_convert = self.project_folder
231+
self.on_done_file() # go on here
205232

206233
def select_hsf(self, select):
207234
""" Selects on of the possible of folders of the find_hsf() def.

_logging.py

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
# logger based on <https://github.com/SublimeText/PackageDev/blob/master/_logging.py>
2+
# Python docs <https://docs.python.org/3/library/logging.html>
3+
4+
import logging
5+
import sublime
6+
7+
# usage in other files in package:
8+
# log = logging.getLogger(__name__)
9+
10+
DEFAULT_LOG_LEVEL = logging.WARNING
11+
DEFAULT_LOG_LEVEL_NAME = logging.getLevelName(DEFAULT_LOG_LEVEL)
12+
EVENT_LEVEL = logging.INFO
13+
14+
package_logger = logging.getLogger(__package__)
15+
handler = logging.StreamHandler()
16+
formatter = logging.Formatter(fmt="[{name}] {levelname}: {message}", style='{')
17+
handler.setFormatter(formatter)
18+
package_logger.addHandler(handler)
19+
package_logger.setLevel(DEFAULT_LOG_LEVEL)
20+
21+
logger = logging.getLogger(__name__)
22+
23+
24+
def _settings():
25+
return sublime.load_settings("GDLDev.sublime-settings")
26+
27+
28+
def plugin_loaded():
29+
def on_settings_reload():
30+
cur_log_level = package_logger.getEffectiveLevel()
31+
cur_log_level_name = logging.getLevelName(cur_log_level)
32+
new_log_level_name = _settings().get('log_level', DEFAULT_LOG_LEVEL_NAME).upper()
33+
new_log_level = getattr(logging, new_log_level_name, DEFAULT_LOG_LEVEL)
34+
35+
if new_log_level_name != cur_log_level_name:
36+
if cur_log_level > EVENT_LEVEL and new_log_level <= EVENT_LEVEL:
37+
# Only set level before emitting log event if it would not be seen otherwise
38+
package_logger.setLevel(new_log_level)
39+
logger.log(EVENT_LEVEL,
40+
"Changing log level from %r to %r",
41+
cur_log_level_name, new_log_level_name)
42+
package_logger.setLevel(new_log_level) # Just set it again to be sure
43+
44+
_settings().add_on_change(__name__, on_settings_reload)
45+
on_settings_reload() # trigger on inital settings load, too
46+
47+
48+
def plugin_unloaded():
49+
_settings().clear_on_change(__name__)
50+
package_logger.removeHandler(handler)

0 commit comments

Comments
 (0)