Что хотелось бы добавить в AkelPad (3)

Russian main discussion
  • Author
  • Message
Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Идея, которая витала в воздухе давно, - добавить возможность всем панелям плагов/тулбарам возможность автоматически скрываться при уходе курсора с области панели/тулбара и появляться при подведении курсора мыши к краю проги. Такая возможность есть в LN, AuotCAD и др. прогах, - очень удобно.

Offline
Posts: 670
Joined: Thu Jun 03, 2010 8:47 am
Location: Сочи, Хоста
Contact:

Post by Andrey_A_A »

Когда-то я просил такой скрипт
viewtopic.php?p=3370#p3370

Но очень не нравилось когда скрипт "бегает" по вкладкам и AkelPad дёргается, а если их много, то это очень не красиво )

Недавно познакомился с функцией SetRedraw, немножко модифицировал скрипт:

Сейчас, на мой взгляд очень хорошо - в заголовке окна пробегают адреса файлов, но акел не "Дёргается"

Можно ли такую же вещь добавить при работе с командами
1. Вкладок Command(4319) , Command(4320)
2. При "Поиске и Замене" - галочка "все файлы" - зачем нам видеть как программа пробегает по всем вкладкам

Code: Select all

/// CloseUnnamedAll.js
// http://tc-image.3dn.ru/forum/9-254-839-16-1332920186
// http://akelpad.sourceforge.net/forum/viewtopic.php?p=3370#p3370
//
//// Закрыть все указанные MDI документы.
//// Close all unnamed or unexisted MDI documents.
//
// Arguments:
// -CloseUnnamed=false   -Закрыть документы без имени (по умочанию = true).
// -CloseUnexisted=true  -Закрыть документы, если файлы были удалены (по умочанию = false).
//
// Example:
// -"Close only unexisted" Call("Scripts::Main", 1, "CloseUnnamedAll.js", `-CloseUnnamed=false -CloseUnexisted=true`)
 // Version v1.4 16.11.2011 + 26.04.2012
// Author: Instructor

//Arguments
var bCloseUnnamed=AkelPad.GetArgValue("CloseUnnamed", true);
var bCloseUnexisted=AkelPad.GetArgValue("CloseUnexisted", false);

//Variables
var hMainWnd=AkelPad.GetMainWnd();
var oSys=AkelPad.SystemFunction();
var lpFrameInit=0;
var lpFrameCur=0;
var bFrameClose=false;
var pFile;
var dwState=0;

if (AkelPad.IsMDI())
{
  var hMainWnd = AkelPad.GetMainWnd();
  SetRedraw(hMainWnd, false); // Добавил для себя Аверин Андрей (26.04.2012)

  //Turn off watch file
  if (hMenuMain=AkelPad.SendMessage(hMainWnd, 1222 /*AKD_GETMAININFO*/, 21 /*MI_MENUMAIN*/, 0))
  {
    dwState=oSys.Call("user32::GetMenuState", hMenuMain, 4253 /*IDM_OPTIONS_WATCHFILE*/, 0 /*MF_BYCOMMAND*/);
    if (dwState & 0x8 /*MF_CHECKED*/)
      AkelPad.Command(4253 /*IDM_OPTIONS_WATCHFILE*/);
  }

  for (;;)
  {
    if (!lpFrameCur) lpFrameCur=AkelPad.SendMessage(hMainWnd, 1288 /*AKD_FRAMEFIND*/, 1 /*FWF_CURRENT*/, 0);
    if (!lpFrameInit) lpFrameInit=lpFrameCur;

    //Is frame must be closed
    pFile=AkelPad.GetEditFile(0);
    if ((bCloseUnnamed && !pFile) ||
        (bCloseUnexisted && oSys.Call("kernel32::GetFileAttributes" + _TCHAR, pFile) == -1))
    {
      bFrameClose=true;
    }

    if (bFrameClose)
    {
      //Close MDI frame
      if (AkelPad.GetEditModified(0))
        AkelPad.SendMessage(hMainWnd, 1229 /*AKD_SETMODIFY*/, 0, false);
      if (!AkelPad.Command(4318 /*IDM_WINDOW_FRAMECLOSE*/))
        break;
      if (lpFrameInit == lpFrameCur)
        lpFrameInit=0;
      lpFrameCur=0;
      bFrameClose=false;
    }
    else
    {
      //Next MDI frame
      lpFrameCur=AkelPad.Command(4316 /*IDM_WINDOW_FRAMENEXT*/);
      if (!lpFrameCur || lpFrameCur == lpFrameInit)
        break;
    }
  }

  //Turn on watch file
  if (dwState & 0x8 /*MF_CHECKED*/)
    AkelPad.Command(4253 /*IDM_OPTIONS_WATCHFILE*/);

    SetRedraw(hMainWnd, true);
}


function SetRedraw(hWnd, bRedraw)
{
   var oSys = AkelPad.SystemFunction();
   AkelPad.SendMessage(hWnd, 11 /*WM_SETREDRAW*/, bRedraw, 0);
   bRedraw && oSys.Call("user32::InvalidateRect", hWnd, 0, true);
}

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Andrey_A_A
SetRedraw - нужно пользоваться осторожно. Везде, где команда была уместна, она была использована.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Надо бы центрировать окно
Документ был изменён. Сохранить?
---------------------------
Да Нет Отмена
, а также «Невозможно открыть файл "..."» и т.п. относительно окна AkelPad'а, а не всего экрана.
А то на разрешении 1920x1080 растягивать окно на всю ширину нет практически никакого смысла. :)

Offline
Site Admin
Posts: 6311
Joined: Thu Jul 06, 2006 7:20 am

Post by Instructor »

Infocatcher
Это стандартное поведение WINAPI функции MessageBox.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

Какой изврат... :(

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

При таскании вертикального маркера с зажатым Shift (Параметры – Редактор 1 – Перенос – Маркер) надо добавить отображение текущего положения во всплывающей подсказке.
Аналогично при таскании разделителей окна.
Еще можно утащить удобную фишку из Total Commander'а: если перемещать разделитель с зажатым Shift, то переместить можно будет только в несколько фиксированных положений.

Offline
Posts: 1862
Joined: Mon Aug 06, 2007 1:07 pm
Contact:

Post by Infocatcher »

При печати не хватает возможности вывести в колонтитуле общее количество страниц.
Для перенесенных строк надо бы сделать какую-нибудь визуальную индикацию (вроде, так сделано в Visual Studio, мне сейчас не проверить). Или ограничиться выводом номеров строк. :)

Offline
Posts: 173
Joined: Mon Dec 06, 2010 9:53 am
Location: г.Харьков, Русь

Post by San_dr »

Благодаря FullScreenEx.js от VladSh теперь очень удобно работать на широкоформатных мониторах, - кнопки в один ряд равномерно.

Code: Select all

"Режимы панелей окна" Icon("%a\AkelFiles\Plugs\ico
  {
 -"AltFullScreen - полноэкранный режим с расширенным тулбаром - Вкл/Выкл" Call("Scripts::Main", 1, "FullScreenEx.js", `-ToolBar="ToolBar-Alt"`)
 -"Полноэкранный режим с расширенным тулбаром и Псевдо-SDI- Вкл/Выкл" Call("Scripts::Main", 1, "FullScreenEx.js", `-ToolBar="ToolBar-Alt" -Menu=1 -StatusBar=1`)
.....и т.д }
А для полной реализации "Полноэкранный режим с расширенным тулбаром и Псевдо-SDI" не хватает флагов FullScreen режима - чтобы при полном раскрытии главное меню тоже не было куцым и обрубленным

Code: Select all

#Только для FullScreen
  SET(N)
.....
}
  UNSET(N)

Offline
Posts: 88
Joined: Sun Jun 03, 2012 8:15 am

Post by Visitor7 »

Хотелось бы, чтобы PMDI режим можно было приводить к виду SDI. SDI режима хватает почти для всего, кроме редких случаев когда надо провести поиск и замену сразу в большом количестве документов, хотелось бы чтобы эти возможности сосуществвали вместе.
Конкретнее, для PMDI:
- Опция, позволяющая выбирать:открывать документ при двойном клике по нему, в новой вкладке(если окно есть) или в новом окне.
- Опция, позволяющая выбирать поведение при drug&drop: открывать документ в новой вкладке или в текущей (замещать документ находящийся во вкладке, в которую его закинул).
Или хотя бы волшебную чудо-кнопку(shift например), при удержании которой во время drag`n`drop файла, он открывался бы не в новой вкладке, а в той, в которую его пихнешь. Очень удобно когда вкладки не нужны. Ну када-нить в далеком будущем))))
- Опция, позволяющая скрывать панель вкладок если вкладка только одна.
- Внутренняя команда открыть/закрыть панель вкладок. А сверху они находятся или снизу - в виде опции.

Offline
Posts: 267
Joined: Mon Mar 12, 2007 3:45 pm

Post by [Yustas.NeO] »

Предлагаю
1. Добавить возможность иметь не один, а несколько вертикальных маркеров.

2. Добавить опцию, при которой функция "Не открывать программу дважды" работает только для экземпляров, запущенных по одному и тому же пути (включая имя файла).

Offline
Posts: 876
Joined: Tue Jul 24, 2007 8:54 am

Post by Fr0sT »

Добавить опцию, при которой функция "Не открывать программу дважды" работает только для экземпляров, запущенных по одному и тому же пути (включая имя файла)
Вообще расширить до способности различать копии Акеля по директории запуска. А то и с MDI и двумя копиями Акеля не то поведение, которое ожидаешь

Offline
Posts: 3217
Joined: Wed Nov 29, 2006 1:19 pm
Location: Киев, Русь
Contact:

Post by VladSh »

Просьба в StatusUserFormat добавить начертание шрифта, а то с этими скриптами, постоянно его передёргивающими, уже путаешься... Сейчас хотел добавить, но во всём монструозном списке %-"переменных" не нашёл его :)
Хотелось бы видеть не
Шрифт=10
а, к примеру,
Courier New, 10.

KDJ
Offline
Posts: 1949
Joined: Sat Mar 06, 2010 7:40 pm
Location: Poland

Post by KDJ »

VladSh
Font style also:
FontName, FontStyle, FontSize.
Font: Courier New, 2, 10.

Offline
Posts: 176
Joined: Sat Dec 24, 2011 4:05 pm

Post by F. Phoenix »

Выбор сглаживания в диалоге шрифтов бы непомешал, где системное было бы лишь одним из вариантов.

В винде вообще с этим сглаживанием как-то не очень: шрифты с ClearType далеко не все сочетаются, для самого интерфейса оно не прет совершенно, и многие проги с ним работают довольно хреново, но в некоторых вполне ок. В общем, юзал бы GDI++, да он баженный, блин, так что пока лучшим вариантом вижу просто в отдельных прогах по возможности ClearType выставлять, как оно выставляется в том же мелкоофисе =\
Image

Кстати, никому не встречался какой-нибудь моноширный шрифт с хорошим мелким курсивом без сглаживания?
Last edited by F. Phoenix on Wed Aug 15, 2012 2:05 pm, edited 1 time in total.
Post Reply