.git* export-ignore
/README.rus.txt encoding=utf-8
+*.py encoding=utf-8
*.rst encoding=utf-8
*.txt text
return None
-def find_config_file(config_dirs=None):
+def find_config_file(config_dirs=None, config_filename='m_librarian.conf'):
if config_dirs is None:
config_dirs = find_config_dirs()
for d in config_dirs:
- ml_conf_file = os.path.join(d, 'm_librarian.conf')
+ ml_conf_file = os.path.join(d, config_filename)
if os.path.exists(ml_conf_file):
return ml_conf_file
else:
--- /dev/null
+# coding: utf-8
+
+import wx, wx.adv
+from ..__version__ import __version__
+from .session_config import get_session_config
+
+
+class MainWindow(wx.Frame):
+
+ def __init__(self):
+ session_config = get_session_config()
+ width = session_config.getint('main_window', 'width', 600)
+ height = session_config.getint('main_window', 'height', 400)
+ super(wx.Frame, self).__init__(
+ parent=None, id=-1, title=u"m_Librarian",
+ size=wx.Size(width=width, height=height),
+ )
+ self.InitMenu()
+ self.Show(True)
+ self.Bind(wx.EVT_SIZE, self.OnSize)
+
+ def InitMenu(self):
+ MenuBar = wx.MenuBar()
+ self.SetMenuBar(MenuBar)
+
+ file_menu = wx.Menu()
+ exit = file_menu.Append(wx.ID_EXIT, u"&Выход", u"Выйти из программы")
+ self.Bind(wx.EVT_MENU, self.OnQuit, exit)
+ MenuBar.Append(file_menu, u"&Файл")
+
+ about_menu = wx.Menu()
+ about = about_menu.Append(wx.ID_ABOUT,
+ u"&О m_Librarian", u"О m_Librarian")
+ self.Bind(wx.EVT_MENU, self.OnAbout, about)
+ MenuBar.Append(about_menu, u"&О программе")
+
+ def OnQuit(self, event):
+ self.Close(True)
+
+ def OnAbout(self, event):
+ aboutInfo = wx.adv.AboutDialogInfo()
+ aboutInfo.SetName(u'm_Librarian')
+ aboutInfo.SetVersion(__version__)
+ aboutInfo.SetDescription(
+ u'Библиотекарь для библиотек LibRusEc/Flibusta')
+ aboutInfo.AddDeveloper(u'Олег Бройтман')
+ aboutInfo.SetWebSite(u'https://phdru.name/Software/Python/m_librarian/')
+ aboutInfo.SetCopyright(u'(C) 2023 Олег Бройтман')
+ aboutInfo.SetLicense(u'GPL')
+ wx.adv.AboutBox(aboutInfo)
+
+ def OnSize(self, event):
+ """Save window size in the session config"""
+ size = event.GetSize()
+ session_config = get_session_config()
+ session_config.set('main_window', 'width', str(size.width))
+ session_config.set('main_window', 'height', str(size.height))
+ session_config.save()
+ event.Skip() # Call other handlers
+
+class Application(wx.App):
+
+ def OnInit(self):
+ frame = MainWindow()
+ self.SetTopWindow(frame)
+ return True
--- /dev/null
+#! /usr/bin/env python
+
+from __future__ import print_function
+import os
+
+from ..config import RawConfigParser, ConfigWrapper, find_config_file
+
+
+__all__ = ['get_session_config']
+
+
+def _find_config_dirs_posix():
+ config_dirs = []
+ if 'XDG_CACHE_HOME' in os.environ:
+ config_dirs.append(os.environ['XDG_CACHE_HOME'])
+ home_cache = os.path.expanduser('~/.cache')
+ if home_cache not in config_dirs:
+ config_dirs.append(home_cache)
+ return config_dirs
+
+
+def _find_config_dirs():
+ if os.name == 'posix':
+ return _find_config_dirs_posix()
+ return None
+
+
+_ml_session_config = None
+
+
+class SessionConfigWrapper(ConfigWrapper):
+ def __init__(self, config, config_path):
+ ConfigWrapper.__init__(self, config)
+ self.config_path = config_path
+
+ def set(self, section, option, value):
+ if not self.config.has_section(section):
+ self.config.add_section(section)
+ super(SessionConfigWrapper, self).set(section, option, value)
+
+ def save(self):
+ if self.config_path is None:
+ config_dirs = _find_config_dirs()
+ self.config_path = \
+ os.path.join(config_dirs[0], 'm_librarian_session.conf')
+ with open(self.config_path, 'wt') as fp:
+ self.config.write(fp)
+
+
+def get_session_config(config_path=None):
+ global _ml_session_config
+ if _ml_session_config is None:
+ _ml_session_config = RawConfigParser()
+ if config_path is None:
+ config_dirs = _find_config_dirs()
+ config_path = \
+ find_config_file(config_dirs, 'm_librarian_session.conf')
+ if config_path is not None:
+ _ml_session_config.read(config_path)
+ _ml_session_config = \
+ SessionConfigWrapper(_ml_session_config, config_path)
+ return _ml_session_config
+
+
+def _test():
+ config_dirs = _find_config_dirs()
+ print("Config dirs:", config_dirs)
+ print("Config file:",
+ find_config_file(config_dirs, 'm_librarian_session.conf'))
+
+
+if __name__ == '__main__':
+ _test()
--- /dev/null
+#! /usr/bin/env python
+
+import sys
+from m_librarian.wx.Application import Application
+
+
+def main():
+ if len(sys.argv) > 1:
+ sys.exit("This program doesn't accept any arguments")
+ app = Application()
+ app.MainLoop()
+
+
+if __name__ == '__main__':
+ main()
extras_require={
'pbar': ['m_lib>=3.1'],
'web': ['bottle', 'CT3'],
+ 'wx': ['wxPython'],
},
)