OberonCore
https://forum.oberoncore.ru/

Рацпредложение - отличие заголовков окон исх./док./рес.
https://forum.oberoncore.ru/viewtopic.php?f=114&t=574
Страница 1 из 1

Автор:  Trurl [ Пятница, 20 Июль, 2007 11:01 ]
Заголовок сообщения:  Рацпредложение - отличие заголовков окон исх./док./рес.

В HostWindows.GenPathTitle:
Код:
  IF  s2 # "" THEN
    IF (CAP(s1[0]) = "M") & (CAP(s1[1]) = "O") & (CAP(s1[2]) = "D") & (s1[3] = 0X)  THEN
       title := "("+s2+")";
    ELSIF (CAP(s1[0]) = "D") & (CAP(s1[1]) = "O") & (CAP(s1[2]) = "C") & (CAP(s1[3]) = "U") & (s1[4] = 0X)  THEN
        title := "["+s2+"]";
    ELSIF (CAP(s1[0]) = "R") & (CAP(s1[1]) = "S") & (CAP(s1[2]) = "R") & (CAP(s1[3]) = "C") & (s1[4] = 0X)   THEN
        title := "{"+s2+"}";
    END
  END

Автор:  Борис Рюмшин [ Пятница, 20 Июль, 2007 11:55 ]
Заголовок сообщения:  Re: Рацпредложение

Наведём красоту?

Автор:  Trurl [ Пятница, 20 Июль, 2007 12:17 ]
Заголовок сообщения:  Re: Рацпредложение

Просто для удобства: чтобы исходники/документация/ресурсы отличались заголовками.

Автор:  Евгений Темиргалеев [ Среда, 01 Январь, 2014 16:34 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

пример применения рацпредложения: viewtopic.php?p=33418#p33418

Автор:  Иван Денисов [ Среда, 01 Январь, 2014 17:06 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

Добавил рацпреложение в Красноярскую сборку, буду держать в голове для версии центра.

Автор:  Евгений Темиргалеев [ Среда, 16 Ноябрь, 2016 04:04 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

Есть более свободное решение. Даже без хука --- вообще без изменения стандартных модулей.

Просто пишется произвольный модуль, который по экшену раз в несколько секунд обходит все окна и перевычисляет их заголовки. Такой модуль является приложением к конкретной сборке, поэтому без проблем может позволить себе любые "вольности". Импорт же специфических модулей в HostWindows всегда проблематичен.

Ниже пример, который
1) отмечает документы из подсистем (viewtopic.php?p=33418#p33418)
2) добавляет путь документов, открытых по абсолютному пути. Эту штуку придумал Иван Горячев в 1.6 сборке сообщества (http://oberoncore.ru/projects/bb16ce).

ipuiK46 и ipuiK401 см. в архиве http://oberoncore.ru/bbcc/subs/ipui/

Код:
MODULE ipuiK401;

   IMPORT
      Log,
      Services, Windows, Strings, Files, Converters, Views,
      HostFiles, ipuiK46;

   TYPE
      Action = POINTER TO RECORD (Services.Action) END;

   VAR
      a: Action;
      baseLoc: HostFiles.Locator;

   PROCEDURE Append (VAR s: ARRAY OF CHAR; t: ARRAY OF CHAR);
      VAR len: INTEGER; i, j: INTEGER; ch: CHAR;
   BEGIN
      len := LEN(s);
      i := 0; WHILE s[i] # 0X DO INC(i) END;
      j := 0; REPEAT ch := t[j]; s[i] := ch; INC(j); INC(i) UNTIL (ch = 0X) OR (i = len);
      s[len - 1] := 0X;
      IF (ch # 0X) & (i = len) THEN s[len - 2] := "…" END
   END Append;

   PROCEDURE CheckMod (w: Windows.Window; OUT title: Views.Title; OUT done: BOOLEAN);
      VAR
         loc: Files.Locator; ch: CHAR; s1, s2: HostFiles.FullName; i, j: INTEGER;
         name: Files.Name; pos: INTEGER;
   BEGIN
      done := FALSE;
      IF (w.loc # NIL) & (w.conv = Converters.list) THEN
         loc := w.loc; ipuiK46.GetName(w.name, Files.docType, name);
         WITH loc: HostFiles.Locator DO
            i := 0; ch := loc.path[0]; j := 0; s2 := "";
            WHILE ch # 0X DO
               IF (ch = "\") OR (ch = "/") THEN
                  s1[j] := 0X; s2 := s1$; j := 0
               ELSE
                  s1[j] := ch; INC(j)
               END;
               INC(i); ch := loc.path[i]
            END;
            s1[j] := 0X;
            title := ""; done := TRUE;
            IF s2 # "" THEN
               IF (CAP(s1[0]) = "M") & (CAP(s1[1]) = "O") & (CAP(s1[2]) = "D") & (s1[3] = 0X) THEN
                  title := "("+s2+"/Mod)"
               ELSIF (CAP(s1[0]) = "D") & (CAP(s1[1]) = "O") & (CAP(s1[2]) = "C") & (CAP(s1[3]) = "U") & (s1[4] = 0X) THEN
                  title := "("+s2+"/Docu)";
               ELSIF (CAP(s1[0]) = "R") & (CAP(s1[1]) = "S") & (CAP(s1[2]) = "R") & (CAP(s1[3]) = "C") & (s1[4] = 0X) THEN
                  title := "("+s2+"/Rsrc)"
               END
            END;
            Append(title, name);
            IF baseLoc # NIL THEN
               Strings.Find(loc.path, baseLoc.path, 0, pos);
               IF pos # 0 THEN
                  Append(title, " | " + loc.path)
               END
            END
         ELSE
         END
      END
   END CheckMod;

   PROCEDURE UpdateWindowTitles*;
      VAR
         w: Windows.Window; title: Views.Title; done: BOOLEAN;
   BEGIN
      IF Windows.dir # NIL THEN w := Windows.dir.First() ELSE w := NIL END;
      WHILE w # NIL DO
         (* Log.String(w.name); Log.Ln; *)
         CheckMod(w, title, done);
         IF done THEN
            (* Log.Tab; Log.String(title); Log.Ln; *)
            w.SetTitle(title)
         END;
         w := Windows.dir.Next(w)
      END
   END UpdateWindowTitles;

   PROCEDURE (a: Action) Do;
   BEGIN
      UpdateWindowTitles;
      Services.DoLater(a, Services.Ticks() + 3 * Services.resolution)
   END Do;

   PROCEDURE GetBaseLoc;
      VAR
         loc: Files.Locator;
   BEGIN
      loc := Files.stdDir.This("");
      IF loc IS HostFiles.Locator THEN
         baseLoc := loc(HostFiles.Locator)
      ELSE
         baseLoc := NIL
      END
   END GetBaseLoc;

BEGIN
   GetBaseLoc;
   NEW(a);
   Services.DoLater(a, Services.now);
   Log.String("ipuiK401.UpdateWindowTitles включён"); Log.Ln
CLOSE
   Services.RemoveAction(a);
   Log.String("ipuiK401.UpdateWindowTitles выключен"); Log.Ln
END ipuiK401.

Автор:  Иван Денисов [ Среда, 16 Ноябрь, 2016 08:26 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

В сборку Центра это предложение было добавлено в немного измененном виде.

Вложение:
center_var_windows.png
center_var_windows.png [ 8.83 КБ | Просмотров: 11991 ]

Автор:  Евгений Темиргалеев [ Среда, 16 Ноябрь, 2016 10:48 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

Иван Денисов писал(а):
В сборку Центра это предложение было добавлено в немного измененном виде.
Т.е. в исходном, по предложению Трурля (viewtopic.php?p=6912#p6912). Или там ещё что-то прибавилось?

Автор:  Иван Денисов [ Среда, 16 Ноябрь, 2016 12:47 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

Евгений Темиргалеев писал(а):
Иван Денисов писал(а):
В сборку Центра это предложение было добавлено в немного измененном виде.
Т.е. в исходном, по предложению Трурля (viewtopic.php?p=6912#p6912). Или там ещё что-то прибавилось?

Смысл был немного изменен, а реализация как я понимаю не изменилась.

J.Templ писал(а):
As proposed by Trurl in CPC 1.7 rc5 but with a different association of the bracket form:
Mod () //as in BB1.6; the most used document class should not be changed
Rsrc [] //symbolizes the rectangular shape of forms
Docu {}

Автор:  prospero78 [ Вторник, 11 Апрель, 2017 16:22 ]
Заголовок сообщения:  Re: Рацпредложение - отличие заголовков окон исх./док./рес.

А я бы всё-таки добавил в заголовке более психологически комфортный квалификатор: "(Obx)Lines -- Исходник"
Квалификатор должен стоять именно сзади, чтобы в свёрнутом виде не затирал имя модуля. Ко все прочему, ещё можно и национальный вариант сделать небольшим движением руки))

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/