Double Commander

Файловый менеджер

Модератор: Модераторы

Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

fpc 2.2.0 а вот лазарь лучше svn версию...
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

B4rr4cuda писал(а):Наконец-то разобрался с миксованием LCL и прямых GTK вызовов.Начинаю писать WLX апи для линукса.
Душа поет :), скоро, уже скоро у меня будет нормальный графический фм для линукса, там пара-пам.... =)


а ентими плагинами кто угодно будет менять интерфейс как захочет чель ?
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Нет, плагину будет выдаваться указатель на панель в окне просмотрщика, а вот там уж что хочешь, то и твори.
Изменение интерфейса потом попытаюсь сделать, есть мысли по этому поводу.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Attid ты меня подтолкнул к интересной мысли:
Ведь можно и интерфейс таким же макаром изменять. Только выдавать интерфейсному плагу список компонентов главного окна... Приму эту методику, как запасной вариант.

PS.
Пока я вижу и для WLX и для WI(nterface)X одну проблему:
плаг использующий GTK api не будет работать в DC скомпиленом на GTK2 и на QT.
Как быть?
Пришли в башку следующие варианты:
1) Вынести листер в отдельное приложение и скомпилить под все три интерфейса, спрашивать плагин, какой интерфейс ему нужен и вызывать необходимый.
2)Забить и предоставить плагинописателям отдуваться - писать одно и то же для всех трех интерфейсов.
Лазаровцам, в принципе, все равно (перекомпилил под нужный интерфейс и все), а вот пишущие на чистом fpc или на С завоют.
3)Жёстко извращаться, создавая для плагина пустое окно на чистом апи нужного интерфейса.

Кто что посоветует, предложит?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

2 и 3 , я за 2 =) все равно к примеру для венды и линя не будешь одно и то же делать, хотя с Алексом мы нашли способ вызывать плагины ТС в лине без переделки, но не проверяли.


про интерфейс былоб конечно круто отделить ГУИ от ядра, но боюсь что не так то просто это будет сделать, наверно думать будем ближе к версии 3,0 =)
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

отя с Алексом мы нашли способ вызывать плагины ТС в лине без переделки, но не проверяли.

А можно поподробнее? Я думал поэксперементировать с winelib. А вы как?

Эксперимент показал, что две кнопочки из библы использующей первый GTK отлично создаются и работают в GTK2 приложении, вызывающем эту библиотеку:
Библа

Код: Выделить всё

 library project1;

 {$mode objfpc}{$H+}

 uses
    gtk,glib,gdk;

  var GBox,GButton1,Gbutton2:PGtkWidget;
   procedure ButtonToPanel(X:PGtkWidget); stdcall;
   begin
     gBox:=gtk_hbox_new(false,0);
     gtk_container_set_border_width (GTK_CONTAINER (gBox), 2);
     gtk_container_add(GTK_CONTAINER(X),GBox );
     gtk_widget_show(gBox);


     GButton1:=gtk_button_new_with_label('Yehoo1');
     //gtk_container_add(GTK_CONTAINER(PGtkWidget(panel1.Handle)),GButton1);
     gtk_container_add(GTK_CONTAINER(gBox),GButton1);
     gtk_widget_show(GButton1);

     Gbutton2:=gtk_button_new_with_label('Yehoo2');
     gtk_container_add(GTK_CONTAINER(GBox),Gbutton2 );
     gtk_widget_show(Gbutton2);
   end;

   exports ButtonToPanel;

 begin
 end.


Вызов:

Код: Выделить всё

procedure TForm1.Button5Click(Sender: TObject);
 begin
   Hlib:=LoadLibrary('path to lib.so');
   if Hlib<>0 then
     begin
       Button5.Caption:='LoadLib OK';
       Button7.Caption:='UnLoadLib';
     end;
 end;

 procedure TForm1.Button6Click(Sender: TObject);
 type TPro=procedure (X:PGtkWidget); stdcall;
 var Proc:TPro;
 begin
 proc:=TPro(GetProcAddress(HLib,'ButtonToPanel'));
 if proc <> nil then
   begin
     proc(PGtkWidget(Panel1.Handle));
   end else showmessage('Error');
 end;

 procedure TForm1.Button7Click(Sender: TObject);
 begin
    if UnloadLibrary(Hlib) then
    begin
     Button5.Caption:='LoadLib';
     Button7.Caption:='UnLoadLib OK';
    end;
 end;


Правда неизвестно, как будет себя вести более сложный пример.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

Я думал поэксперементировать с winelib. А вы как?

угу также =) используя за пример вот это
Padre_Mortius
энтузиаст
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Сообщение Padre_Mortius »

framepanel.pas(204,110) Error: Can't take the address of constant expressions


Решается очень просто:
1. добавляем в список используемых модулей uFileList
2.

Код: Выделить всё

var
  ls: TFileList;
begin
  ....
  ls := pnlFile.FileList;
  pnlFile.VFS.VFSmodule.VFSList(ExtractDirLevel(pnlFile.VFS.ArcFullName, ActiveDir), ls);
  ...
end;     
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

2Padre_Mortius
Я считаю, не стоит адаптировать код под 2.3.1 версию, а точнее под эту багу фпц. Я погуглил - баг с использованием property в качестве var параметра, уже несколько раз исправляли и заново ломали.
Имхо, стоит придерживаться стайбл версий копилятора.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Я заметил, что большинство багов из трекера - исправлено. Остались в основном мелочи. Может стоит в свн вынести текущую ревизию в отдельные ветки и, подчистив, выпустить версию 0.4 альфа и 0.3 beta (или даже "0.3 почти stable" :) )?
Зачем? Тестеры нужны. После выпуска новой версии всегда всплеск активности. Надо активность поддерживать. :)
Аватара пользователя
Alexx2000
постоялец
Сообщения: 490
Зарегистрирован: 25.10.2006 00:22:07
Откуда: Мытищи
Контактная информация:

Сообщение Alexx2000 »

Можно, осталось почитать как это сделать, и как правильно работать в таком режиме.
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Создание ветки
svn copy http://doublecmd.svn.sourceforge.net/sv ... ecmd/trunk http://doublecmd.svn.sourceforge.net/sv ... hes/dc-0.3

Работать также, только рабочую копию берем из из нужной ветки.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

а что даст разделение ?
Аватара пользователя
B4rr4cuda
энтузиаст
Сообщения: 693
Зарегистрирован: 28.12.2007 06:48:35

Сообщение B4rr4cuda »

Разделение даст спокойную работу над следующей версией, недоделанные модули и тд. А в другой ветке доводка и отслеживание багов с мерджем их фиксов в текущий релиз.
Я и сам фактически с свн только знакомлюсь, но идея ветвления мне кажется логичной и удобной.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

я про что до первой бетты не вижу смысла делать ветки.
вот выпусть еще один промежуточный альфа , это я за, и если багами не завалят , то можно делать отвлетления.
Ответить