File: udialog.py

package info (click to toggle)
far2l 2.7.0~beta%2Bds-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 44,304 kB
  • sloc: cpp: 263,566; ansic: 53,886; python: 7,048; sh: 1,516; perl: 410; javascript: 279; xml: 145; makefile: 31
file content (115 lines) | stat: -rw-r--r-- 3,295 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
import logging
from far2l.plugin import PluginBase


log = logging.getLogger(__name__)


class Plugin(PluginBase):
    label = "Python udialog"
    openFrom = ["PLUGINSMENU"]

    @staticmethod
    def HandleCommandLine(line):
        return line in ("dialog", "exec")

    def CommandLine(self, line):
        if line == "dialog":
            log.debug("dialog")

            @self.ffi.callback("FARWINDOWPROC")
            def KeyDialogProc(hDlg, Msg, Param1, Param2):
                # if Msg == self.ffic.DN_KEY:
                #    if Param2 == 27:
                #        return 0
                return self.info.DefDlgProc(hDlg, Msg, Param1, Param2)

            fdis = [
                (
                    self.ffic.DI_DOUBLEBOX,
                    2,
                    1,
                    31,
                    4,
                    0,
                    {"Selected": 0},
                    0,
                    0,
                    self.s2f("Python"),
                    0,
                ),
                (
                    self.ffic.DI_TEXT,
                    -1,
                    2,
                    0,
                    2,
                    0,
                    {"Selected": 0},
                    0,
                    0,
                    self.s2f("Plugin path"),
                    0,
                ),
                (
                    self.ffic.DI_EDIT,
                    5,
                    3,
                    28,
                    3,
                    0,
                    {"Selected": 0},
                    0,
                    0,
                    self.ffi.NULL,
                    0,
                ),
            ]
            fdi = self.ffi.new("struct FarDialogItem []", fdis)
            hDlg = self.info.DialogInit(
                self.info.ModuleNumber,
                -1,
                -1,
                34,
                6,
                self.s2f("Set Python Path"),
                fdi,
                len(fdi),
                0,
                0,
                KeyDialogProc,
                0,
            )
            res = self.info.DialogRun(hDlg)
            if res != -1:
                sptr = self.info.SendDlgMessage(
                    hDlg, self.ffic.DM_GETCONSTTEXTPTR, 2, 0
                )
                path = self.f2s(sptr)
                log.debug("path: {0}".format(path))
            self.info.DialogFree(hDlg)
            log.debug("end dialog")
        else:
            line = line.split(" ", 1)[1]
            exec(line, globals(), locals())

    def OpenPlugin(self, OpenFrom):
        _MsgItems = [
            self.s2f("Python"),
            self.s2f(""),
            self.s2f("python.cpp: compiling..."),
            self.s2f("   0 error(s), 0 warning(s) :-)"),
            self.s2f(""),
            self.s2f("\x01"),
            self.s2f("&Ok"),
        ]
        MsgItems = self.ffi.new("wchar_t *[]", _MsgItems)
        self.info.Message(
            self.info.ModuleNumber,  # GUID
            self.ffic.FMSG_WARNING | self.ffic.FMSG_LEFTALIGN,  # Flags
            self.s2f("Contents"),  # HelpTopic
            MsgItems,  # Items
            len(MsgItems),  # ItemsNumber
            1,  # ButtonsNumber
        )
        return -1