Ejemplo n.º 1
0
Archivo: main.py Proyecto: yncat/falcon
    def Initialize(self):
        t = misc.Timer()
        self.log.debug("created")
        self.events = Events(self, self.identifier)
        title = ""
        if(ctypes.windll.shell32.IsUserAnAdmin()):
            title += "[" + _("管理者") + "]"
        title += constants.APP_NAME
        super().Initialize(
            title,
            self.app.config.getint(self.identifier, "sizeX", 800, 400),
            self.app.config.getint(self.identifier, "sizeY", 600, 300),
            self.app.config.getint(self.identifier, "positionX", 50, 0),
            self.app.config.getint(self.identifier, "positionY", 50, 0)
        )
        self.menu = Menu(self.identifier)
        self.AddUserCommandKey()
        self.InstallMenuEvent(self.menu, self.events.OnMenuSelect)
        self.AddUserCommandMenu()

        self.tabs = []
        self.activeTab = None  # 最初なので空
        self.hTabCtrl = self.creator.tabCtrl(_("タブ選択"), self.ChangeTab, 0, wx.EXPAND, 1)
        self.MakeFirstTab()
        self.activeTab.hListCtrl.SetFocus()
        self.hFrame.Bind(wx.EVT_CLOSE, self.OnClose)
        self.hFrame.Bind(wx.EVT_MENU_OPEN, self.events.OnMenuOpen)
        if self.app.config.getboolean(self.identifier, "maximized", False):
            self.hFrame.Maximize()
        self.hFrame.Show()
        self.app.SetTopWindow(self.hFrame)
        self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
        return True
Ejemplo n.º 2
0
    def Initialize(self):
        t = misc.Timer()
        self.identifier = "wxFontTestView"  #このビューを表す文字列
        self.log = getLogger("falcon.%s" % self.identifier)
        self.log.debug("created")
        self.app = globalVars.app
        super().Initialize("wxテスト", 800, 600)
        manager = FontManager()
        self.InstallControls()
        self.hFrame.Show()
        """
		# FontDataを生成し、設定を行う
		fontData=wx.FontData()
		fontData.EnableEffects(False)		#取り消し線などは設定できない
		fontData.SetAllowSymbols(False)		#シンボルフォントの設定は認めない
		fontData.SetRange(5,35)
		fontchooser=wx.FontDialog(self.hFrame,fontData)
		fontchooser.ShowModal()
		font=fontchooser.GetFontData().GetChosenFont()
		if not font.IsOk():
			dialog("エラー","有効なフォントではありません。")
			return True
		#アサーションエラーの対策
		"""
        font = manager.GetFont()

        manager.ShowSettingDialog(self.hFrame)
        font = manager.GetFont()
        dialog("test", str(manager.GetSize()))
        dialog("test", manager.GetName())
        globalVars.app.config["view"]["font"] = manager.GetInfo()
        return True
Ejemplo n.º 3
0
 def Initialize(self, lst=None, silent=False):
     """ドライブ情報を取得し、リストを初期化する。"""
     self.log.debug("Getting drives list...")
     self.rootDirectory = ""
     t = misc.Timer()
     if isinstance(
             lst, list
     ):  # パラメータがリストなら、browsableObjects のリストとして処理刷る(ファイルリストを取得しないでコピーする)
         self._copyFromList(lst)
         return errorCodes.OK
     # end copy
     self.drives.clear()
     self.unusableDrives.clear()
     self.networkResources.clear()
     if not silent:
         globalVars.app.say(_("ドライブ洗濯"))
     drv = win32api.GetLogicalDrives()
     check = 1
     for i in range(26):
         if drv & check:
             self.Append(i)  # ドライブ検出
         check <<= 1
     # end ドライブ25個分調べる
     # ネットワークリソースの追加はタブ側から来ることになった
     self.log.debug("Drives list created in %d seconds." % t.elapsed)
     self.log.debug("%d drives and %d unusableDrives found." %
                    (len(self.drives), len(self.unusableDrives)))
     self.log.debug("Triggering sorting")
     self.ApplySort()
     return errorCodes.OK
Ejemplo n.º 4
0
 def run(self):
     while (True):
         item = tasks.get()
         self.log.debug("picked up job")
         if isinstance(item, Stop_task):  # ワーカースレッド終了
             self.log.debug("Received stop signal. Exiting thread...")
             tasks.task_done()
             break
         # end 終了
         if stopped:
             continue  # 終了した後にはタスクをもらっても働かない
         if item.canceled:  # 出したけどキャンセル済み
             tasks.task_done()
             self.log.debug("Already canceled, skipping this task...")
             continue
         # end キャンセル済みタスク
         func = item.func
         params = item.params
         active_task_states.append(item)
         t = misc.Timer()
         item.setWorkingState(True)
         ret = func(item, params)
         if ret is True:
             item.FinishCallback()
         else:
             item.CancelCallback()
         # end どっちのcallbackを呼ぶか
         tasks.task_done()
         self.log.debug("task finished in %f seconds." %
                        (t.elapsed) if ret else "Task canceled.")
         item.setWorkingState(False)
         active_task_states.remove(item)
Ejemplo n.º 5
0
    def Initialize(self):
        t = misc.Timer()
        self.identifier = "mainView"  #このビューを表す文字列
        self.log = getLogger("falcon.%s" % self.identifier)
        self.log.debug("created")
        self.app = globalVars.app
        self.events = Events(self, self.identifier)
        title = ""
        if (ctypes.windll.shell32.IsUserAnAdmin()):
            title += "[" + _("管理者") + "]"
        title += constants.APP_NAME
        super().Initialize(
            title, self.app.config.getint(self.identifier, "sizeX", 800, 400),
            self.app.config.getint(self.identifier, "sizeY", 600, 300),
            self.app.config.getint(self.identifier, "positionX", 50, 0),
            self.app.config.getint(self.identifier, "positionY", 50, 0))
        self.menu = Menu()
        self.menu.InitShortcut(self.identifier)

        #お気に入りフォルダと「ここで開く」のショートカットキーを登録
        for target in (globalVars.app.userCommandManagers):
            for v in target.keyMap:
                if target == globalVars.app.openHereCommand:
                    tabs.base.FalconTabBase.selectItemMenuConditions[0].append(
                        target.refHead + v)
                    tabs.base.FalconTabBase.selectItemMenuConditions[2].append(
                        target.refHead + v)
                    tabs.base.FalconTabBase.selectItemTypeMenuConditions[
                        browsableObjects.File].append(target.refHead + v)
                    tabs.base.FalconTabBase.selectItemTypeMenuConditions[
                        browsableObjects.NetworkResource].append(
                            target.refHead + v)
                    tabs.streamList.StreamListTab.blockMenuList.append(
                        target.refHead + v)
                self.menu.keymap.add(self.identifier, target.refHead + v,
                                     target.keyMap[v])
        errors = self.menu.keymap.GetError(self.identifier)
        if errors:
            tmp = _(
                "お気に入りディレクトリもしくは「ここで開く」で設定されたショートカットキーが正しくありません。キーが重複しているか、存在しないキー名を指定しています。以下のキーの設定内容をご確認ください。\n\n"
            )
            for v in errors:
                tmp += v + "\n"
            dialog(_("エラー"), tmp)

        self.InstallMenuEvent(self.menu, self.events)

        self.tabs = []
        self.activeTab = None  #最初なので空
        self.hTabCtrl = self.creator.tabCtrl(_("タブ選択"), self.ChangeTab, 0, 1,
                                             wx.EXPAND)
        self.MakeFirstTab()
        self.hFrame.Bind(wx.EVT_CLOSE, self.OnClose)
        self.hFrame.Show()
        self.app.SetTopWindow(self.hFrame)
        self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
        return True
Ejemplo n.º 6
0
Archivo: test.py Proyecto: yncat/falcon
 def Initialize(self):
     t = misc.Timer()
     self.identifier = "registOriginalAssociationDialog"  # このビューを表す文字列
     self.log = getLogger("falcon.%s" % self.identifier)
     self.log.debug("created")
     super().Initialize(self.app.hMainView.hFrame, _("拡張子の独自関連付け"))
     self.InstallControls()
     self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
     return True
Ejemplo n.º 7
0
Archivo: base.py Proyecto: yncat/falcon
 def _sort(self, attrib, descending):
     """指定した要素で、リストを並べ替える。"""
     self.log.debug("Begin sorting (attrib %s, descending %s)" %
                    (attrib, descending))
     t = misc.Timer()
     f = self._getSortFunction(attrib)
     for l in self.lists:
         l.sort(key=f, reverse=(descending == 1))
     self.log.debug("Finished sorting (%f seconds)" % t.elapsed)
Ejemplo n.º 8
0
	def Initialize(self):
		t=misc.Timer()
		self.identifier="execProgramDialog"#このビューを表す文字列
		self.log=getLogger("falcon.%s" % self.identifier)
		self.log.debug("created")
		self.app=globalVars.app
		super().Initialize(self.app.hMainView.hFrame,_("ファイル名を指定して実行"))
		self.InstallControls()
		self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
		return True
Ejemplo n.º 9
0
	def Initialize(self,detailText=""):
		t=misc.Timer()
		self.identifier="newNameEditDialog"#このビューを表す文字列
		self.log=getLogger("falcon.%s" % self.identifier)
		self.log.debug("created")
		self.app=globalVars.app
		super().Initialize(self.app.hMainView.hFrame,_("新しい名前を入力"))
		self.InstallControls(detailText)
		self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
		return True
Ejemplo n.º 10
0
 def Initialize(self, dic):
     t = misc.Timer()
     self.identifier = "objectDetailDialog"  #このビューを表す文字列
     self.log = getLogger("falcon.%s" % self.identifier)
     self.log.debug("created")
     self.app = globalVars.app
     super().Initialize(self.app.hMainView.hFrame, _("詳細情報"))
     self.InstallControls(dic)
     self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
     return True
Ejemplo n.º 11
0
 def Initialize(self):
     t = misc.Timer()
     self.identifier = "OperationSelecterDialog"  #このビューを表す文字列
     self.log = getLogger("falcon.%s" % self.identifier)
     self.log.debug("created")
     self.app = globalVars.app
     if self.enableCancel:
         super().Initialize(self.app.hMainView.hFrame, _("ファイル操作確認"))
     else:
         super().Initialize(self.app.hMainView.hFrame, _("ファイル操作確認"), 0)
     self.InstallControls()
     self.log.debug("Finished creating main view (%f seconds)" % t.elapsed)
     return True
Ejemplo n.º 12
0
    def Initialize(self, path, silent=False):
        """リソースの情報を取得し、リストを初期化する。"""
        self.log.debug("Getting resources list...")
        self.rootDirectory = path
        t = misc.Timer()
        if isinstance(
                path, list
        ):  # パラメータがリストなら、browsableObjects のリストとして処理刷る(ファイルリストを取得しないでコピーする)
            self.resources += path
            return errorCodes.OK
        # end copy
        self.resources.clear()
        if not silent:
            globalVars.app.say(path[2:])

        # 取得対象を構造体にセット
        rootResource = win32wnet.NETRESOURCE()
        rootResource.lpRemoteName = path

        # リソースリストの取得
        try:
            h = win32wnet.WNetOpenEnum(2, 1, 0, rootResource)
            # 2=RESOURCE_GLOBALNET
            # 1=RESOURCETYPE_DISK
            lst = win32wnet.WNetEnumResource(h, 64)  # 65以上の指定不可
            win32wnet.WNetCloseEnum(h)
        except win32wnet.error as er:
            dialog(
                _("エラー"),
                _("ネットワーク上のリソース一覧を取得できませんでした(%(error)s)") % {"error": str(er)})
            return errorCodes.ACCESS_DENIED

        for l in lst:
            ret, shfileinfo = shell.SHGetFileInfo(l.lpRemoteName, 0,
                                                  shellcon.SHGFI_ICON)
            s = browsableObjects.NetworkResource()
            self.log.debug("network resource found and check IP address:" +
                           l.lpRemoteName[2:])
            s.Initialize(l.lpRemoteName[len(path) + 1:], l.lpRemoteName, "",
                         shfileinfo[0])
            self.resources.append(s)

        self.log.debug("Network resource list created in %d seconds." %
                       t.elapsed)
        self.log.debug(str(len(self.resources)) + " resources found.")
        return errorCodes.OK
Ejemplo n.º 13
0
Archivo: base.py Proyecto: yncat/falcon
    def UpdateListContent(self, content, soft=False):
        """
            リストコントロールの中身を更新し、並び替え状況を示すアイコンを再配置する。
            カラムの数やテキストは変更しない。
            soft=Trueの場合は、同一リストの再描画。読み込んだアイコン画像とチェック状態が維持される。
        """
        self.log.debug("Updating list control...")
        if soft:
            self.ClearAllItems()
        else:
            self.DeleteAllItems()

        t = misc.Timer()
        for elem in content:
            self._AppendElement(elem)
        # end 追加
        self.log.debug("List control updated in %f seconds." % t.elapsed)
Ejemplo n.º 14
0
 def _process(self):
     """ファイルオペレーション実行処理本体。スレッドで実行することもあるので、関数がべつになっている。"""
     self.working = True
     op = self.instructions["operation"]
     self.log.info("Starting file operation: %s" % op)
     self.opTimer = misc.Timer()
     if op == "rename":  # リネーム
         retry = rename.Execute(self)
     # end rename
     if op == "changeAttribute":  # 属性変更
         retry = changeAttribute.Execute(self)
     # end changeAttribute
     if op == "mkdir":  # フォルダ作成
         retry = mkdir.Execute(self)
     # end mkdir
     if op == "trash":  # ゴミ箱
         retry = trash.Execute(self)
     # end trash
     if op == "shortcut":
         retry = shortcut.Execute(self)
     # end shortcut
     if op == "symbolicLink":
         retry = symbolicLink.Execute(self)
     # end symbolicLink
     if op == "hardLink":
         retry = hardLink.Execute(self)
     # end hardLink
     if op == "delete":
         retry = delete.Execute(self)
     # end hardLink
     if op == "past":
         retry = past.Execute(self, resume=self.resume)
     # end hardLink
     self.log.debug(
         "success %s, retry %s, need to confirm %s, failure %s." %
         (self.output["succeeded"], retry,
          len(self.output["need_to_confirm"]), len(self.output["failed"])))
     if not self.elevated and retry > 0:
         self._elevate()  # 昇格してリトライ
     if self.elevated:
         self._postElevation()  # 昇格した後の後処理
     self.working = False
     self.log.info("Finished (%f sec)" % self.opTimer.elapsed)
     self._doCallback("finished")
Ejemplo n.º 15
0
    def __init__(self):
        t = misc.Timer()
        self.identifier = "wxFontManager"
        self.log = getLogger("falcon.%s" % self.identifier)
        self.log.debug("created")
        self.app = globalVars.app

        # 設定ファイルの情報を基にfontを生成
        self.font = wx.Font()
        if not self.font.SetNativeFontInfoUserDesc(
                self.app.config.get("view", "font")):
            dialog(_("エラー"), _("設定されているフォント情報が不正です。デフォルトのフォントを適用します。"))
            self.log.warning("fontString error. SetNativeFontInfoUserDesc(" +
                             self.app.config.get("view", "font") +
                             ") returned false.")
            self.font.SetNativeFontInfoUserDesc(
                DefaultSettings.get("view", "font"))
            self.app.config.set("view", "font",
                                DefaultSettings.get("view", "font"))
            with open(constants.SETTING_FILE_NAME, "w") as f:
                self.config.write(f)
Ejemplo n.º 16
0
    def Initialize(self, file, silent=False):
        """ファイル名から副ストリーム情報を取得し、リストを初期化する。入力は絶対パスでなければならない。情報が取得できなかった場合、errorCodes.OK以外が返る。。"""
        t = misc.Timer()
        if isinstance(
                file, list
        ):  #パラメータがリストなら、browsableObjects のリストとして処理刷る(ファイルリストを取得しないでコピーする)
            self.streams = file
            self.lists = [self.streams]
            return
        #end copy

        self.streams.clear()
        file_spl = file.split("\\")
        self.rootDirectory = file
        level = len(file_spl)
        if not silent:
            globalVars.app.say("%s%d %s" %
                               (file[0], level, file_spl[level - 1]))
        self.log.debug("Getting stream list for %s..." % file)
        try:
            lst = win32file.FindStreams(file)
        except win32file.error as er:
            dialog(
                _("エラー"),
                _("NTFS 副ストリーム情報を取得できませんでした(%(error)s)") % {"error": str(er)})
            return False
        #end 情報取得失敗
        lst = lst[1:]  #先頭はファイル本体なので省く
        for elem in lst:
            s = browsableObjects.Stream()
            s.Initialize(file, elem[1][1:-6], file + elem[1][0:-6], elem[0])
            self.streams.append(s)
        #end 追加ループ
        self.log.debug("stream list created in %d milliseconds." % t.elapsed)
        self.log.debug(str(len(self.streams)) + " objects found.")
        if self.sortCursor != 0 or self.sortDescending != 0:
            self.log.debug("Triggering sorting")
            self.ApplySort()
        #end ソートが必要ならソート
        return errorCodes.OK
Ejemplo n.º 17
0
    def UpdateListContent(self, content):
        """
			リストコントロールの中身を更新し、並び替え状況を示すアイコンを再配置する。
			カラムの数やテキストは変更しない。
		"""
        self.log.debug("Updating list control...")
        self._cancelBackgroundTasks()
        self.hListCtrl.DeleteAllItems()
        self.ItemSelected()  #メニューバーのアイテムの状態更新処理。選択中アイテムがいったん0になってる場合があるため必要。
        self.checkedItem = set()
        globalVars.app.hMainView.menu.Enable(
            menuItemsStore.getRef("EDIT_UNMARKITEM_ALL"), False)
        self.hilightIndex = -1

        t = misc.Timer()
        for elem in content:
            self.hListCtrl.Append(elem)
        #end 追加
        self.log.debug("List control updated in %f seconds." % t.elapsed)

        #アイコン設定
        self.hIconList = wx.ImageList(32, 32, False, len(self.listObject))
        self.hListCtrl.AssignImageList(self.hIconList, wx.IMAGE_LIST_SMALL)

        for elem in self.listObject:
            icon = wx.Icon()
            if elem.hIcon >= 0:
                icon.CreateFromHICON(elem.hIcon)
                index = self.hIconList.Add(icon)
                if index >= 0:
                    self.hListCtrl.SetItemImage(index, index, index)

        #カラム用アイコンを登録
        self.hIconList.Add(wx.Icon("fx/dummy.ico"))
        self.hIconList.Add(wx.Icon("fx/ascending.ico"))
        self.hIconList.Add(wx.Icon("fx/descending.ico"))
        self._SetSortIcon()
Ejemplo n.º 18
0
    def initialize(self):
        """アプリを初期化する。"""
        self.initUpdater()
        # プロキシの設定を適用
        self.proxyEnviron = proxyUtil.virtualProxyEnviron()
        self.setProxyEnviron()
        # スレッドで例外が起きてもsys.exceptHookが呼ばれるようにする
        self.installThreadExcepthook()
        # アップデートを実行
        if self.config.getboolean("general", "update"):
            globalVars.update.update(True)

        t = misc.Timer()

        wx.DisableAsserts()
        self.error_sound_handle = None
        self.InitSound()
        self.LoadUserCommandSettings()
        self.LoadUserExtentionSettings()
        self.InitCaches()
        workerThreads.Start()

        # 起動サウンドの再生
        self.PlaySound(self.config["sounds"]["startup"])

        self.log.debug("finished environment setup (%f seconds from start)" %
                       t.elapsed)

        # メインビューを表示
        from views import main
        self.hMainView = main.View("mainView")
        self.hMainView.Initialize()
        misc.InitContextMenu(self.hMainView.hFrame.GetHandle())
        self.log.debug("Finished mainView setup (%f seconds from start)" %
                       t.elapsed)
        return True
Ejemplo n.º 19
0
 def __init__(self, _screen):
     self.screen = _screen
     self.timer = misc.Timer(_length=500, _func=self.create_star)
     self.star_list = []
Ejemplo n.º 20
0
 def create_star(self):
     new_star = Star(self.screen, rand.randint(0, 640), rand.randint(1, 2))
     self.star_list.append(new_star)
     self.timer = misc.Timer(_length=500, _func=self.create_star)
Ejemplo n.º 21
0
 def Initialize(self, dir, silent=False):
     """ディレクトリからファイル情報を取得し、リストを初期化する。入力は絶対パスでなければならない。情報が取得できなかった場合、errorCodes.OK以外が返る。silentがTrueなら読み上げは行われない。"""
     self.ClearCache()
     if isinstance(
             dir, list
     ):  # パラメータがリストなら、browsableObjects のリストとして処理刷る(ファイルリストを取得しないでコピーする)
         self._copyFromList(dir)
         return errorCodes.OK
     # end copy
     self.files.clear()
     self.folders.clear()
     dir_spl = dir[len(os.path.splitdrive(dir)[0]) + 1:].split("\\")
     level = len(dir_spl)
     if dir_spl[0] == "":
         level -= 1
     if not silent:
         r = []
         if globalVars.app.config['on_list_moved'][
                 'read_directory_level'] == 'True':
             drive = os.path.splitdrive(dir)[0]
             if len(drive) == 2:
                 drive = drive[0]
             if level == 0:
                 r.append("%sルート" % drive)
             else:
                 r.append("%sの%d " % (drive, level))
                 if globalVars.app.config['on_list_moved'][
                         'read_directory_name'] == 'True':
                     r.append(dir_spl[level - 1])
         if len(r) > 0:
             globalVars.app.say("".join(r))
     # end read
     self.rootDirectory = dir
     self.log.debug("Getting file list for %s..." % self.rootDirectory)
     t = misc.Timer()
     try:
         lst = win32api.FindFiles(os.path.join(dir, "*"))
     except pywintypes.error as err:
         self.log.error("Cannot open the directory! {0}".format(err))
         if err.winerror == 5:
             return errorCodes.ACCESS_DENIED
         dialog(_("エラー"),
                _("フォルダを開くことができませんでした(%(error)s)") % {"error": str(err)})
         return errorCodes.FATAL
     # end except
     if len(lst) == 0:
         self.log.debug("Blank folder.")
         return errorCodes.OK
     # end 空のフォルダだったらさっさと帰る
     for elem in lst:
         if elem[8] == "." or elem[8] == "..":
             continue
         fullpath = os.path.join(dir, elem[8])
         shfileinfo = self.GetShellInfo(fullpath)
         if os.path.isfile(fullpath):
             f = browsableObjects.File()
             f.Initialize(dir, elem[8], fullpath, (elem[4] << 32) + elem[5],
                          elem[3], elem[0], shfileinfo[4], elem[1], elem[9],
                          shfileinfo[0])
             self.files.append(f)
         else:
             f = browsableObjects.Folder()
             f.Initialize(dir, elem[8], fullpath, -1, elem[3], elem[0],
                          shfileinfo[4], elem[1], elem[9], shfileinfo[0])
             self.folders.append(f)
         # end どっちについかするか?
     # end 追加ループ
     self.log.debug("File list created in %f seconds." % t.elapsed)
     self.log.debug(
         str(len(self.folders)) + " directories and " +
         str(len(self.files)) + " files found.")
     if self.sortCursor != 0 or self.sortDescending != 0:
         self.log.debug("Triggering sorting")
         self.ApplySort()
     # end ソートが必要ならソート
     return errorCodes.OK
Ejemplo n.º 22
0
    def initialize(self):
        """アプリを初期化する。"""
        t = misc.Timer()
        self.frozen = hasattr(sys, "frozen")
        self.InitLogger()
        self.error_sound_handle = None
        self.LoadSettings()
        wx.DisableAsserts()
        try:
            if self.config["general"]["locale"] != None:
                locale.setlocale(locale.LC_TIME,
                                 self.config["general"]["locale"])
            else:
                locale.setlocale(locale.LC_TIME)
        except:
            locale.setlocale(locale.LC_TIME)
            self.config["general"]["locale"] = ""
        self.SetTimeZone()
        self.InitTranslation()
        self.LoadUserCommandSettings()
        self.LoadUserExtentionSettings()
        self.InitSound()
        self.InitCaches()
        workerThreads.Start()

        # 起動サウンドの再生
        self.PlaySound(self.config["sounds"]["startup"])

        # 音声読み上げの準備
        reader = self.config["speech"]["reader"]
        if (reader == "PCTK"):
            self.log.info("use reader 'PCTalker'")
            self.speech = accessible_output2.outputs.pc_talker.PCTalker()
        elif (reader == "NVDA"):
            self.log.info("use reader 'NVDA'")
            self.speech = accessible_output2.outputs.nvda.NVDA()
#		elif(reader=="SAPI4"):
#			self.log.info("use reader 'SAPI4'")
#			self.speech=accessible_output2.outputs.sapi4.Sapi4()
        elif (reader == "SAPI5"):
            self.log.info("use reader 'SAPI5'")
            self.speech = accessible_output2.outputs.sapi5.SAPI5()
        elif (reader == "AUTO"):
            self.log.info("use reader 'AUTO'")
            self.speech = accessible_output2.outputs.auto.Auto()
        elif (reader == "JAWS"):
            self.log.info("use reader 'JAWS'")
            self.speech = accessible_output2.outputs.jaws.Jaws()
        elif (reader == "CLIPBOARD"):
            self.log.info("use reader 'CLIPBOARD'")
            self.speech = accessible_output2.outputs.clipboard.Clipboard()
        elif (reader == "NOSPEECH"):
            self.log.info("use reader 'NOSPEECH'")
            self.speech = accessible_output2.outputs.nospeech.NoSpeech()
        else:
            self.config.set("speech", "reader", "AUTO")
            self.log.warning("Setting missed! speech.reader reset to 'AUTO'")
            self.speech = accessible_output2.outputs.auto.Auto()

        self.log.debug("finished environment setup (%f seconds from start)" %
                       t.elapsed)

        # メインビューを表示
        self.hMainView = main.View()
        self.hMainView.Initialize()
        misc.InitContextMenu(self.hMainView.hFrame.GetHandle())
        self.log.debug("Finished mainView setup (%f seconds from start)" %
                       t.elapsed)
        return True