ReactOS Package Manager (marked in audit list as [OK]) Requested by crashfourit Added: trunk/rosapps/ Added: trunk/rosapps/packmgr/ Added: trunk/rosapps/packmgr/cmd-line/ Added: trunk/rosapps/packmgr/cmd-line/main.c Added: trunk/rosapps/packmgr/cmd-line/main.h Added: trunk/rosapps/packmgr/cmd-line/ros-get.rc Added: trunk/rosapps/packmgr/cmd-line/rosget.rbuild Added: trunk/rosapps/packmgr/directory.rbuild Added: trunk/rosapps/packmgr/gui/ Added: trunk/rosapps/packmgr/gui/cz.rc Added: trunk/rosapps/packmgr/gui/de.rc Added: trunk/rosapps/packmgr/gui/en.rc Added: trunk/rosapps/packmgr/gui/es.rc Added: trunk/rosapps/packmgr/gui/generic.rc Added: trunk/rosapps/packmgr/gui/help.txt Added: trunk/rosapps/packmgr/gui/main.c Added: trunk/rosapps/packmgr/gui/main.h Added: trunk/rosapps/packmgr/gui/packmgr.rbuild Added: trunk/rosapps/packmgr/gui/packmgr.rc Added: trunk/rosapps/packmgr/gui/res/ Added: trunk/rosapps/packmgr/gui/res/blank.ico Added: trunk/rosapps/packmgr/gui/res/development.ico Added: trunk/rosapps/packmgr/gui/res/games.ico Added: trunk/rosapps/packmgr/gui/res/graphics.ico Added: trunk/rosapps/packmgr/gui/res/inet.ico Added: trunk/rosapps/packmgr/gui/res/install.ico Added: trunk/rosapps/packmgr/gui/res/installed.ico Added: trunk/rosapps/packmgr/gui/res/installsource.ico Added: trunk/rosapps/packmgr/gui/res/multimedia.ico Added: trunk/rosapps/packmgr/gui/res/office.ico Added: trunk/rosapps/packmgr/gui/res/others.ico Added: trunk/rosapps/packmgr/gui/res/packetmanager.ico Added: trunk/rosapps/packmgr/gui/res/toolbar.bmp Added: trunk/rosapps/packmgr/gui/res/tools.ico Added: trunk/rosapps/packmgr/gui/res/uninstall.ico Added: trunk/rosapps/packmgr/gui/res/update.ico Added: trunk/rosapps/packmgr/gui/resource.h Added: trunk/rosapps/packmgr/lib/ Added: trunk/rosapps/packmgr/lib/cz.rc Added: trunk/rosapps/packmgr/lib/de.rc Added: trunk/rosapps/packmgr/lib/download.cpp Added: trunk/rosapps/packmgr/lib/en.rc Added: trunk/rosapps/packmgr/lib/error.h Added: trunk/rosapps/packmgr/lib/es.rc Added: trunk/rosapps/packmgr/lib/expat.h Added: trunk/rosapps/packmgr/lib/functions.cpp Added: trunk/rosapps/packmgr/lib/log.cpp Added: trunk/rosapps/packmgr/lib/log.h Added: trunk/rosapps/packmgr/lib/main.cpp Added: trunk/rosapps/packmgr/lib/options.cpp Added: trunk/rosapps/packmgr/lib/options.xml Added: trunk/rosapps/packmgr/lib/package.cpp Added: trunk/rosapps/packmgr/lib/package.def Added: trunk/rosapps/packmgr/lib/package.h Added: trunk/rosapps/packmgr/lib/package.hpp Added: trunk/rosapps/packmgr/lib/package.rbuild Added: trunk/rosapps/packmgr/lib/package.rc Added: trunk/rosapps/packmgr/lib/script.cpp Added: trunk/rosapps/packmgr/lib/script.h Added: trunk/rosapps/packmgr/lib/tree.cpp Added: trunk/rosapps/packmgr/tree/ Added: trunk/rosapps/packmgr/tree/7zip.inst.rps Added: trunk/rosapps/packmgr/tree/7zip.xml Added: trunk/rosapps/packmgr/tree/abiword.inst.rps Added: trunk/rosapps/packmgr/tree/abiword.xml Added: trunk/rosapps/packmgr/tree/firefox.inst.rps Added: trunk/rosapps/packmgr/tree/firefox.xml Added: trunk/rosapps/packmgr/tree/irfanview.inst.rps Added: trunk/rosapps/packmgr/tree/irfanview.xml Added: trunk/rosapps/packmgr/tree/mplayer.inst.rps Added: trunk/rosapps/packmgr/tree/mplayer.xml Added: trunk/rosapps/packmgr/tree/openoffice.inst.rps Added: trunk/rosapps/packmgr/tree/openoffice.xml Added: trunk/rosapps/packmgr/tree/putty.inst.rps Added: trunk/rosapps/packmgr/tree/putty.xml Added: trunk/rosapps/packmgr/tree/rosbe.inst.rps Added: trunk/rosapps/packmgr/tree/rosbe.xml Added: trunk/rosapps/packmgr/tree/tiny.inst.rps Added: trunk/rosapps/packmgr/tree/tiny.xml Added: trunk/rosapps/packmgr/tree/tree.xml Added: trunk/rosapps/packmgr/tree/tree_bare.xml Added: trunk/rosapps/packmgr/tree/tree_withsubs.xml Added: trunk/rosapps/packmgr/tree/tuxpaint.inst.rps Added: trunk/rosapps/packmgr/tree/tuxpaint.xml _____
Added: trunk/rosapps/packmgr/cmd-line/main.c --- trunk/rosapps/packmgr/cmd-line/main.c 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/cmd-line/main.c 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,211 @@
+//////////////////////////////////////////////////////// +// +// main.cpp +// +// Implementation of a Commandlne Interface +// for the ReactOs Package Manager +// +// Maarten Bosma, 09.01.2004 +// maarten.paul@bosma.de +// +//////////////////////////////////////////////////////////////////// + +#include "main.h" +#include <stdio.h> + + +int main (int argc, char **argv) +{ + wprintf(L"ReactOs PackageManager %d.%d.%d Commandline Interface \n\n", PACKMGR_VERSION_MAJOR, PACKMGR_VERSION_MINOR, PACKMGR_VERSION_PATCH_LEVEL); + Argv = argv; Argc = argc; + + if(argc<2) + return Help(); + + // install a package + if (!strcmp(argv[1], "install")) + Install(); + + // install a package from source + else if (!strcmp(argv[1], "src-inst")) + { + wprintf(L"Sorry but I can't do that yet. \n"); + } + + // update a package + else if (!strcmp(argv[1], "update")) + { + wprintf(L"Sorry but I can't do that yet. \n"); + } + + // update everything + else if (!strcmp(argv[1], "dist-upgrade")) + { + wprintf(L"Sorry but I can't do that yet. \n"); + } + + // remove a package + else if (!strcmp(argv[1], "remove")) + { + wprintf(L"Sorry but I can't do that yet. \n"); + } + + // search for a package + else if (!strcmp(argv[1], "show")) + { + Show(); + } + + // search for a package + else if (!strcmp(argv[1], "search")) + { + wprintf(L"Sorry but I can't do that yet. \n"); + } + + else + Help(); + + // + wprintf(L"\n"); + + + return 0; +} + +int Help (void) +{ + wprintf(L"Usage: ros-get [command] \n\n"); + + wprintf(L"Possible commands: \n"); + wprintf(L" install [package name] \t Installs a package \n\n"); + wprintf(L" show [package name] \t\t Shows you detailed information about a package \n"); + + wprintf(L"Currently unimplemented commands: \n"); + wprintf(L" src-install [package name] \t Installs a package from source code \n"); + wprintf(L" update [package name] \t Updates a package \n"); + wprintf(L" dist-update [package name] \t Updates a package \n"); + wprintf(L" remove [package name] \t Uninstalls a package \n\n"); + + wprintf(L" search [search agrument] \t Finds a package \n"); + wprintf(L" list \t\t\t\t Lists all installed programs \n"); + + return 0; +} + +int Ask (const WCHAR* question) +{ + // ask the user + wprintf(L"%s [y/n] ", question); + char answer = getchar(); + + // clear keybuffer + while(getchar()!='\n'); + wprintf(L"\n"); + + // prozess answer + if (answer == 'y') + return 1; + + else if (answer == 'n') + return 0; + + return Ask(question); +} + +int SetStatus (int status1, int status2, WCHAR* text) +{ + WCHAR errbuf[2000]; + if(text) + wprintf(L"%s\n", text); + + // If the Status is 1000 things are done + if(status1==1000) + { + wprintf(L"%s\n", PML_TransError(status2, errbuf, sizeof(errbuf)/sizeof(WCHAR))); + done = TRUE; + } + + return 0; +} + +int Install (void) +{ + pTree tree; + int i, error; + WCHAR errbuf[2000]; + + // load the tree + error = PML_LoadTree (&tree, "tree.xml", NULL); + if(error) + { + + wprintf(PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR))); + return 0; + } + + // look up the item + for (i=2; i<Argc; i++) + { + int id = PML_FindItem(tree, Argv[i]); + + if(id) + { + PML_LoadPackage(tree, id, NULL); + PML_SetAction(tree, id, 1, NULL, Ask); + } + + else + printf("Could not find the Package "%s"\n", Argv[i]); + } + + // do it + error = PML_DoIt (tree, SetStatus, Ask); + if(error) + { + + wprintf(PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR))); + PML_CloseTree (tree); + return 0; + } + + // wait + while (!done) + Sleep(1000); + + // clean up + PML_CloseTree (tree); + + return 0; +} + +int Show (void) +{ + pTree tree; + int i, error; + WCHAR errbuf[2000]; + + // load the tree + error = PML_LoadTree (&tree, "tree_bare.xml", NULL); + if(error) + { + wprintf(PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR))); + return 0; + } + + // look up the item + for (i=2; i<Argc; i++) + { + int id = PML_FindItem(tree, Argv[i]); + + if(id) + printf(PML_GetDescription(tree, id)); + + else + printf("Could not find the Package "%s"\n", Argv[i]); + } + + // clean up + PML_CloseTree (tree); + + return 0; +} _____
Added: trunk/rosapps/packmgr/cmd-line/main.h --- trunk/rosapps/packmgr/cmd-line/main.h 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/cmd-line/main.h 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,17 @@
+/////////////////////////////////////////////////// +// +// main.h +// main.cpp's lumber room :) +/////////////////////////////////////////////////// + +#include <package.h> + +int Argc; +char **Argv; +BOOL done = FALSE; + +int Help (void); +int Install (void); +int Show (void); + +int SetStatus (int status1, int status2, WCHAR* text); _____
Added: trunk/rosapps/packmgr/cmd-line/ros-get.rc --- trunk/rosapps/packmgr/cmd-line/ros-get.rc 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/cmd-line/ros-get.rc 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,8 @@
+ +#define REACTOS_STR_FILE_DESCRIPTION "ReactOS Package Manager - Cmdline Interface\0" +#define REACTOS_STR_INTERNAL_NAME "ros-get\0" +#define REACTOS_STR_ORIGINAL_FILENAME "ros-get.exe\0" + +#include <reactos/version.rc> + +/* EOF */ _____
Added: trunk/rosapps/packmgr/cmd-line/rosget.rbuild --- trunk/rosapps/packmgr/cmd-line/rosget.rbuild 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/cmd-line/rosget.rbuild 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,12 @@
+<module name="rosget" type="win32cui" installbase="system32" installname="rosget.exe"> + <include base="package">.</include> + <define name="__USE_W32API" /> + <define name="UNICODE" /> + <define name="_WIN32_IE">0x0501</define> + <define name="_WIN32_WINNT">0x0501</define> + + <library>kernel32</library> + <library>package</library> + <file>main.c</file> + <file>ros-get.rc</file> +</module> _____
Added: trunk/rosapps/packmgr/directory.rbuild --- trunk/rosapps/packmgr/directory.rbuild 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/directory.rbuild 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,9 @@
+<directory name="cmd-line"> + <xi:include href="cmd-line/rosget.rbuild" /> +</directory> +<directory name="gui"> + <xi:include href="gui/packmgr.rbuild" /> +</directory> +<directory name="lib"> + <xi:include href="lib/package.rbuild" /> +</directory> \ No newline at end of file _____
Added: trunk/rosapps/packmgr/gui/cz.rc --- trunk/rosapps/packmgr/gui/cz.rc 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/cz.rc 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,43 @@
+ +LANGUAGE LANG_CZECH, SUBLANG_DEFAULT + +/* Dialogs */ +IDD_OPTIONS DIALOG DISCARDABLE 0, 0, 180, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "NastavenÝ" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "ZatÝm zde nejsou ×ßdnÚ mo×nosti.", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOG DISCARDABLE 0, 0, 180, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "ProvßdÝm operace" +FONT 8, "MS Sans Serif" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "ZruÜit", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM "Äßdnß akce", 1, GRAYED + MENUITEM "Instalovat (doporuÞeno)", 2, GRAYED + MENUITEM "Instalovat ze zdrojov²ch k¾d¨", 3, GRAYED + MENUITEM "Aktualizovat", 4, GRAYED + MENUITEM "Odinstalovat", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "NastavenÝ", 8 + MENUITEM SEPARATOR + MENUITEM "ProvÚst", 6 + END +END + _____
Added: trunk/rosapps/packmgr/gui/de.rc --- trunk/rosapps/packmgr/gui/de.rc 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/de.rc 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,43 @@
+ +LANGUAGE LANG_GERMAN, SUBLANG_GERMAN + +/* Dialogs */ +IDD_OPTIONS DIALOG DISCARDABLE 0, 0, 180, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Optionen" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "Leider gibt es noch keine Optionen.", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOG DISCARDABLE 0, 0, 180, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Performing Operations" +FONT 8, "MS Sans Serif" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "Abort", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM "Keine Action", 1, GRAYED + MENUITEM "Intallieren (empfohlen)", 2, GRAYED + MENUITEM "Intallieren vom Quellcode", 3, GRAYED + MENUITEM "Aktualisieren", 4, GRAYED + MENUITEM "Deinstallieren", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "Optionen", 8 + MENUITEM SEPARATOR + MENUITEM "DoIt", 6 + END +END + _____
Added: trunk/rosapps/packmgr/gui/en.rc --- trunk/rosapps/packmgr/gui/en.rc 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/en.rc 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,43 @@
+ +LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US + +/* Dialogs */ +IDD_OPTIONS DIALOG DISCARDABLE 0, 0, 180, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Options" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "There are no options yet.", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOG DISCARDABLE 0, 0, 180, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Performing Operations" +FONT 8, "MS Sans Serif" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "Abort", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM "No Action", 1, GRAYED + MENUITEM "Install (recommended)", 2, GRAYED + MENUITEM "Install from Source", 3, GRAYED + MENUITEM "Update", 4, GRAYED + MENUITEM "Uninstall", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "Options", 8 + MENUITEM SEPARATOR + MENUITEM "DoIt", 6 + END +END + _____
Added: trunk/rosapps/packmgr/gui/es.rc --- trunk/rosapps/packmgr/gui/es.rc 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/es.rc 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,43 @@
+ +LANGUAGE LANG_SPANISH, SUBLANG_NEUTRAL + +/* Dialogs */ +IDD_OPTIONS DIALOG DISCARDABLE 0, 0, 180, 200 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Opciones" +FONT 8, "MS Sans Serif" +BEGIN + LTEXT "A·n no hay opciones disponibles.", 0, 50, 95, 80, 8 +END + +IDD_DOIT DIALOG DISCARDABLE 0, 0, 180, 100 +STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU +CAPTION "Realizando las operaciones" +FONT 8, "MS Sans Serif" +BEGIN + + CTEXT "{Status}", IDC_TSTATUS, 0, 10, 180, 8 + + CONTROL "", IDC_STATUS1, "msctls_progress32", PBS_SMOOTH, 20, 25, 140, 15 + + CONTROL "", IDC_STATUS2, "msctls_progress32", PBS_SMOOTH, 20, 45, 140, 15 + + PUSHBUTTON "Abort", IDC_CANCEL, 65, 70, 50, 14, WS_DISABLED +END + +IDR_POPUP MENU DISCARDABLE +BEGIN + POPUP "PopUp", MENUBARBREAK + BEGIN + MENUITEM "Ninguna acci¾n", 1, GRAYED + MENUITEM "Instalar (recomendado)", 2, GRAYED + MENUITEM "Instalar desde el c¾digo fuente", 3, GRAYED + MENUITEM "Actualizar", 4, GRAYED + MENUITEM "Desinstalar", 5, GRAYED + MENUITEM SEPARATOR + MENUITEM "Opciones", 8 + MENUITEM SEPARATOR + MENUITEM "íHazlo!", 6 + END +END + _____
Added: trunk/rosapps/packmgr/gui/generic.rc --- trunk/rosapps/packmgr/gui/generic.rc 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/generic.rc 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,34 @@
+ +LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL + +IDI_MAIN ICON DISCARDABLE "res/packetmanager.ico" +IDB_TOOLBAR BITMAP DISCARDABLE "res/toolbar.bmp" + +/* TreeIcons - Categories */ +1 ICON DISCARDABLE "res/blank.ico" +2 ICON DISCARDABLE "res/inet.ico" +3 ICON DISCARDABLE "res/office.ico" +4 ICON DISCARDABLE "res/graphics.ico" +5 ICON DISCARDABLE "res/multimedia.ico" +6 ICON DISCARDABLE "res/development.ico" +7 ICON DISCARDABLE "res/games.ico" +8 ICON DISCARDABLE "res/tools.ico" +9 ICON DISCARDABLE "res/others.ico" +10 ICON DISCARDABLE "res/installed.ico" + +/* TreeIcons - Actions */ +11 ICON DISCARDABLE "res/install.ico" +12 ICON DISCARDABLE "res/installsource.ico" +13 ICON DISCARDABLE "res/update.ico" +14 ICON DISCARDABLE "res/uninstall.ico" + +/* HotKeys */ + +IDR_HOTKEYS ACCELERATORS DISCARDABLE +BEGIN + "1", 2, VIRTKEY, CONTROL + "2", 3, VIRTKEY, CONTROL + "3", 4, VIRTKEY, CONTROL + "4", 5, VIRTKEY, CONTROL + "0", 1, VIRTKEY, CONTROL +END _____
Added: trunk/rosapps/packmgr/gui/help.txt --- trunk/rosapps/packmgr/gui/help.txt 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/help.txt 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,8 @@
+Welcome to ReactOS's Package Manager ! + +WARNING: This is still pre-alfa software you can't do much with it yet. + +This is the online help. You can show it at any time by clicking on the the Questionmark Icon above. + +You can use this package manager like this: click on the +You can also use the Buttons [ctrl] + [0] to [4] to set the action. \ No newline at end of file _____
Added: trunk/rosapps/packmgr/gui/main.c --- trunk/rosapps/packmgr/gui/main.c 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/main.c 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,453 @@
+//////////////////////////////////////////////////////// +// +// main.cpp +// +// Implementation of the Package Manager GUI +// +// +// Maarten Bosma, 09.01.2004 +// maarten.paul@bosma.de +// +//////////////////////////////////////////////////////////////////// + +#include "main.h" + +// This is the struct where the toolbar is defined +const TBBUTTON Buttons [] = +{ + {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}, + + {0, 1, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // No Action + {1, 2, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Install + {2, 3, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Install from source + {3, 4, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Update + {4, 5, TBSTATE_INDETERMINATE, TBSTYLE_BUTTON}, // Unistall + + {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}, + {5, 6, TBSTATE_ENABLED, TBSTYLE_BUTTON}, // DoIt (tm) + {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}, + + {6, 7, TBSTATE_ENABLED, TBSTYLE_BUTTON}, // Help + {7, 8, TBSTATE_ENABLED, TBSTYLE_BUTTON}, // Options + + {0, 0, TBSTATE_ENABLED, TBSTYLE_SEP}, +}; + + +// Application's Entry Point +int WINAPI WinMain (HINSTANCE hinst, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) +{ + HWND hwnd; + MSG msg; + WNDCLASSEX wc = {0}; + WCHAR errbuf[2000]; + + // Window creation + wc.cbSize = sizeof(WNDCLASSEX); + wc.lpszClassName = L"pgkmgr"; + wc.style = CS_HREDRAW | CS_VREDRAW; + wc.lpfnWndProc = (WNDPROC)WndProc; + wc.hInstance = hinst; + wc.hIcon = LoadIcon(hinst, MAKEINTRESOURCE(IDI_MAIN)); + wc.hbrBackground = (HBRUSH)(COLOR_SCROLLBAR); + + RegisterClassEx(&wc); + + hwnd = CreateWindow(L"pgkmgr", + L"ReactOS - Package Manager v0.3", + WS_OVERLAPPEDWINDOW, + CW_USEDEFAULT, + CW_USEDEFAULT, + 500, 600, + NULL, NULL, + hinst, + NULL); + + + // Toolbar creation + InitCommonControls(); + + hTBar = CreateToolbarEx(hwnd, WS_CHILD|WS_VISIBLE|TBSTYLE_FLAT, 0, 8, hinst, IDB_TOOLBAR, + Buttons, sizeof(Buttons)/sizeof(TBBUTTON), TBSIZE, TBSIZE, TBSIZE, TBSIZE, sizeof(TBBUTTON)); + + // Show the windows + ShowWindow(hwnd, SW_SHOW); + UpdateWindow(hwnd); + + // Load the tree + int error = PML_LoadTree(&tree, "tree_bare.xml", AddItem); + + if(error) + { + MessageBox(0,PML_TransError(error, errbuf, sizeof(errbuf)/sizeof(WCHAR)),0,0); + return 0; + } + + // Read the help + Help(); + + // Start getting messages + while(GetMessage(&msg,NULL,0,0)) + { + if(!TranslateAccelerator(hwnd, hHotKeys, &msg)) + { + TranslateMessage(&msg); + DispatchMessage(&msg); + } + } + + // Close our handle + PML_CloseTree (tree); + + return 0; +} + +// Add a item to our tree +int AddItem (int id, const char* name, int parent, int icon) +{ + TV_INSERTSTRUCT tvins; + + tvins.item.lParam = (UINT)id; + tvins.item.mask = TVIF_TEXT|TVIF_PARAM; + tvins.item.pszText = (WCHAR*)name; //that is ok + tvins.item.cchTextMax = strlen(name); + tvins.hInsertAfter = TVI_LAST; + + if(icon) + { + tvins.item.iImage = icon; + tvins.item.iSelectedImage = icon; + tvins.item.mask |= TVIF_IMAGE | TVIF_SELECTEDIMAGE; + } + + if (parent==0) + tvins.hParent = TVI_ROOT; + else + tvins.hParent = nodes[parent]; + + nodes[id] = (HTREEITEM)SendMessage(hTree, TVM_INSERTITEMA, 0, (LPARAM)&tvins); + + return 0; +} + +// Load the Help from file and display it +void Help (void) +{ + int i; + char buffer [2000]; + FILE* file = fopen ("help.txt", "r"); + + if(!file) + return; + + for(i=0; i<2000; i++) + { + buffer[i] = getc(file); + if(buffer[i]==EOF) break; + } + buffer[i] = 0; + + SetText(buffer); +} + +// Create our Controls +void InitControls (HWND hwnd) +{ + + HINSTANCE hinst = GetModuleHandle(NULL); + WCHAR errbuf[2000]; + + // Create the controls + hTree = CreateWindowEx(0, WC_TREEVIEW, L"TreeView", WS_CHILD|WS_VISIBLE|WS_BORDER|TVS_HASLINES|TVS_LINESATROOT|TVS_HASBUTTON S, + 0, 0, 0, 0, hwnd, NULL, hinst, NULL); + + hEdit = CreateWindowEx(WS_EX_CLIENTEDGE, L"edit", PML_TransError(IDS_LOAD, errbuf, sizeof(errbuf)/sizeof(WCHAR)), WS_CHILD|WS_VISIBLE|ES_MULTILINE, + 0, 0, 100, 100, hwnd, NULL, hinst, NULL); + + hPopup = LoadMenu(hinst, MAKEINTRESOURCE(IDR_POPUP)); + + // Create Tree Icons + HIMAGELIST hIcon = ImageList_Create(16, 16, ILC_MASK|ILC_COLOR32, 1, 1); + SendMessage(hTree, TVM_SETIMAGELIST, TVSIL_NORMAL, (LPARAM)(HIMAGELIST)hIcon); + + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(1))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(11))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(12))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(13))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(14))); + + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(2))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(3))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(4))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(5))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(6))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(7))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(8))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(9))); + ImageList_AddIcon(hIcon, LoadIcon(hinst, MAKEINTRESOURCE(10))); + + // Setup Hotkeys + hHotKeys = LoadAccelerators (hinst, MAKEINTRESOURCE(IDR_HOTKEYS)); +} + +// Set the Icons +int SetIcon (int id, int icon) +{ + TVITEMEX item; + + item.hItem = nodes[id]; + item.iImage = icon; + item.iSelectedImage = icon; + item.mask = TVIF_IMAGE | TVIF_SELECTEDIMAGE; + + TreeView_SetItem(hTree, &item); + + return 1; +} + +// Set the Icons +int Ask (const WCHAR* message) +{ + int ans = MessageBox (0,message,0,MB_YESNO); + + if(ans == IDYES) + return 1; + + return 0; +} + +// En- or Disable a Button inside of the toolbar and the Context Menu +int SetButton (DWORD id, BOOL state) +{ + // Change the Toorbar Button + TBBUTTONINFO ti; + + ti.cbSize = sizeof (ti); + ti.dwMask = TBIF_STATE; + + if(state) + ti.fsState = TBSTATE_ENABLED; + else + ti.fsState = TBSTATE_INDETERMINATE; + + SendMessage (hTBar, TB_SETBUTTONINFO, id, (LPARAM)&ti); + + // Change the Context Menu item + MENUITEMINFO mi; + + mi.cbSize = sizeof (mi); + mi.fMask = MIIM_STATE; + + if(state) + mi.fState = MFS_ENABLED; + + else + mi.fState = MFS_GRAYED; + + SetMenuItemInfo(hPopup, id, FALSE, &mi); + + return 0; +} + +// Set the text of the text box +int SetText (const char* text) +{ + int i, j; + char buffer [2000]; + + if(!text) + return 1; + + // the windows does not need "\n" + // for new lines but "\r\n" + for(i=0,j=0; text[i]; i++,j++) + { + buffer[j] = text[i]; + if(buffer[j] == '\n') + { + buffer[j] = '\r'; + buffer[++j] = '\n'; + } + } + buffer[j] = 0; + + SetWindowTextA(hEdit, buffer); + + return 0; +} + +// Windows Message Callback (this is where most things happen) +LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) +{ + switch (message) + { + // at the very beginning ... + case WM_CREATE: + { + InitControls(hwnd); + } + break; + + // calculate the size of the controls + case WM_SIZE: + { + RECT rcl; + SendMessage(hTBar, TB_AUTOSIZE, 0L, 0L); + GetWindowRect(hTBar, &rcl); + + int win_top = rcl.bottom - rcl.top; + int win_hight = HIWORD(lParam) - win_top; + + MoveWindow(hTree, 0, win_top, LOWORD(lParam), splitter_pos*win_hight/100, TRUE); + MoveWindow(hEdit, 0, (splitter_pos*win_hight/100)+win_top, LOWORD(lParam), win_hight, TRUE); + } + break; + + // for the treeview + case WM_NOTIFY: + { + if(((LPNMHDR)lParam)->code == TVN_SELCHANGED) + { + selected = ((LPNMTREEVIEW)lParam)->itemNew.lParam; + PML_LoadPackage (tree, selected, SetButton); + SetText(PML_GetDescription (tree, selected)); + } + + else if ((int)(((LPNMHDR)lParam)->code) == NM_RCLICK) // <= aarrggg LISP + { + // which item has been click on + HTREEITEM item = TreeView_GetDropHilight(hTree); + + if(item != NULL) + { + // mark the one as seleacted + SendMessage (hTree, TVM_SELECTITEM, TVGN_CARET, (LPARAM)item); + TreeView_EnsureVisible (hTree, item); + } + + // create the context menu + if(selected != 0) + { + POINT pt; + GetCursorPos (&pt); + TrackPopupMenu (GetSubMenu(hPopup, 0), 0, (UINT)pt.x, (UINT)pt.y, 0, hwnd, NULL); + } + } + } + break; + + // for the toolbar + case WM_COMMAND: + { + // All Actions + if(LOWORD(wParam) <= 5 && LOWORD(wParam) >= 1) + { + if(selected) + if(PML_SetAction(tree, selected, LOWORD(wParam)-1, SetIcon, Ask) == ERR_OK) + break; + + MessageBeep(MB_ICONHAND); + } + + // DoIt + else if(LOWORD(wParam)==6) + { + if(PML_DoIt(tree, SetStatus, Ask) == ERR_OK) + DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_DOIT), hwnd, StatusProc); + else + MessageBeep(MB_ICONHAND); + } + + // Help + else if(LOWORD(wParam)==7) + Help(); + + // Options + else if(LOWORD(wParam)==8) + DialogBox(GetModuleHandle(NULL), MAKEINTRESOURCE(IDD_OPTIONS), hwnd, OptionsProc); + } + break; + + // prozess hotkeys + case WM_HOTKEY: + { + if(PML_SetAction(tree, selected, wParam, SetIcon, Ask) != ERR_OK) + MessageBeep(MB_ICONHAND); + } + break; + + // ... at the very end + case WM_DESTROY: + { + PostQuitMessage(0); + return 0; + } + } + + return DefWindowProc (hwnd, message, wParam, lParam); +} + +// Warning: This function is called from another thread +int SetStatus (int status1, int status2, WCHAR* text) +{ + WCHAR errbuf[2000]; + + // Set the Rage to 1000 + SendMessage(GetDlgItem(hStatus, IDC_STATUS1), PBM_SETRANGE32, 0, 1000); + SendMessage(GetDlgItem(hStatus, IDC_STATUS2), PBM_SETRANGE32, 0, 1000); + + // The prozessbars and the text filds + if(text) + SetDlgItemText(hStatus, IDC_TSTATUS, text); + + if(status1!=-1) + SendMessage(GetDlgItem(hStatus, IDC_STATUS1), PBM_SETPOS, status1, 0); + + if(status2!=-1) + SendMessage(GetDlgItem(hStatus, IDC_STATUS2), PBM_SETPOS, status2, 0); + + // If the Status is 1000 everything is done + if(status1==1000) + { + EndDialog(hStatus, TRUE); + MessageBox(0,PML_TransError(status2, errbuf, sizeof(errbuf)/sizeof(WCHAR)),0,0); + } + + return 0; +} + +// Callback for the Status Dialog +INT_PTR CALLBACK StatusProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + { + hStatus = hwnd; + + } break; + + case WM_COMMAND: // can only be the about button + case WM_CLOSE: // the close-window-[x] + { + PML_Abort(); + EndDialog(hwnd, TRUE); + return 0; + } + } + + return 0; +} + +// Callback for the Options Dialog +INT_PTR CALLBACK OptionsProc (HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_CLOSE: + EndDialog(hwnd, TRUE); + return 0; + } + + return 0; +} _____
Added: trunk/rosapps/packmgr/gui/main.h --- trunk/rosapps/packmgr/gui/main.h 2006-01-30 08:00:33 UTC (rev 43) +++ trunk/rosapps/packmgr/gui/main.h 2006-01-30 18:44:22 UTC (rev 44) @@ -0,0 +1,45 @@
+/////////////////////////////////////////////////// +// +// main.h +// main.cpp's lumber room :) +/////////////////////////////////////////////////// + +#include <windows.h> +#include <commctrl.h> +#include <stdio.h> [truncated at 1000 lines; 3555 more skipped]