MainWindow.vala 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. using Gtk;
  2. using GLib;
  3. using Pango;
  4. namespace Debins {
  5. [GtkTemplate (ui="/ui/MainWindow.ui")]
  6. public class MainWindow : ApplicationWindow {
  7. [GtkChild]
  8. AboutDialog dialog_about;
  9. PackageManager packageManager;
  10. // UI File elements:
  11. [GtkChild]
  12. HeaderBar headerbar;
  13. [GtkChild]
  14. Stack stack_windows;
  15. [GtkChild]
  16. Button btn_install;
  17. [GtkChild]
  18. Button btn_remove;
  19. [GtkChild]
  20. Stack stack_buttons;
  21. [GtkChild]
  22. Image img_installedIcon;
  23. [GtkChild]
  24. Label lbl_packageName;
  25. [GtkChild]
  26. Label lbl_subInfo;
  27. [GtkChild]
  28. Image img_install;
  29. [GtkChild]
  30. Image img_reinstall;
  31. [GtkChild]
  32. Image img_upgrade;
  33. [GtkChild]
  34. Image img_downgrade;
  35. [GtkChild]
  36. Label lbl_package_info;
  37. public MainWindow(App app, PackageManager? packageManager) {
  38. Object(application: app); // Calling the base class constructor
  39. if (packageManager != null){
  40. this.packageManager = packageManager;
  41. addGUIComponents();
  42. addGUIEvents();
  43. refreshGUI();
  44. stack_windows.set_visible_child_name("main");
  45. }
  46. else
  47. stack_windows.set_visible_child_name("browse");
  48. }
  49. // Open File Window:
  50. [GtkCallback]
  51. private void btn_browse_clicked(Button btn) {
  52. var fileChooser = new FileChooserNative ("Dosya Aç", this, FileChooserAction.OPEN, null, null);
  53. var debFilter = new FileFilter();
  54. debFilter.add_pattern("*.kur");
  55. fileChooser.add_filter(debFilter);
  56. if (fileChooser.run () == ResponseType.ACCEPT) {
  57. File file = File.new_for_path(fileChooser.get_filename());
  58. this.packageManager = new PackageManager(file);
  59. addGUIComponents();
  60. addGUIEvents();
  61. refreshGUI();
  62. stack_windows.set_visible_child_name("main");
  63. }
  64. fileChooser.destroy ();
  65. }
  66. // Main Window:
  67. [GtkCallback]
  68. private void btn_install_clicked(Button btn) {
  69. stack_buttons.set_visible_child_name("loading");
  70. packageManager.install();
  71. }
  72. [GtkCallback]
  73. private void btn_remove_clicked(Button btn) {
  74. stack_buttons.set_visible_child_name("loading");
  75. packageManager.uninstall();
  76. }
  77. [GtkCallback]
  78. private void btn_info_clicked(Button btn) {
  79. stack_windows.set_visible_child_name("info");
  80. }
  81. [GtkCallback]
  82. private void btn_info_back_clicked(Button btn) {
  83. stack_windows.set_visible_child_name("main");
  84. }
  85. [GtkCallback]
  86. private void btn_info_app_clicked(Button btn) {
  87. dialog_about.run();
  88. dialog_about.hide();
  89. }
  90. private void addGUIEvents() {
  91. packageManager.onOutput.connect((output) => {
  92. print(output);
  93. });
  94. packageManager.onFinished.connect((status) => {
  95. packageManager.refreshPackageInfo();
  96. stack_buttons.set_visible_child_name("buttons");
  97. this.refreshGUI();
  98. });
  99. }
  100. private void addGUIComponents() {
  101. headerbar.subtitle = packageManager.fileName;
  102. lbl_packageName.set_label(packageManager.packageName);
  103. string packageSize = packageManager.packageSize > 1000000000 ? "" + (packageManager.packageSize / 1000000000).to_string() + " GB"
  104. : packageManager.packageSize > 1000000 ? "" + (packageManager.packageSize / 1000000).to_string() + " MB"
  105. : packageManager.packageSize > 1000 ? "" + (packageManager.packageSize / 1000).to_string() + " KB"
  106. : "" + packageManager.packageSize.to_string() + " B";
  107. lbl_subInfo.set_label(packageSize + " | " + packageManager.packageVersion);
  108. }
  109. public void refreshInfo() {
  110. lbl_package_info.set_text(packageManager.packageInfo);
  111. }
  112. public void refreshGUI() {
  113. img_installedIcon.visible = packageManager.isExists;
  114. lbl_packageName.halign = (packageManager.isExists ? Align.END: Align.CENTER);
  115. if (packageManager.isUpgradeable){
  116. btn_install.image = img_upgrade;
  117. btn_install.label = "Yükselt\n" + packageManager.packageExistingVersion.to_string() + " -> " + packageManager.packageVersion;
  118. btn_install.tooltip_text = btn_install.label;
  119. // These code is just making the button's label justified center:
  120. ((btn_install.get_child() as Gtk.Alignment).get_child() as Box).foreach((item) => {
  121. if(item is Label) {
  122. Label lbl = item as Label;
  123. lbl.ellipsize = EllipsizeMode.END;
  124. lbl.justify = Justification.CENTER;
  125. }
  126. });
  127. } else if (packageManager.isDowngradeable){
  128. btn_install.image = img_downgrade;
  129. btn_install.label = "Sürüm Düşür\n" + packageManager.packageExistingVersion.to_string() + " -> " + packageManager.packageVersion;
  130. btn_install.tooltip_text = btn_install.label;
  131. // These code is just making the button's label justified center:
  132. ((btn_install.get_child() as Gtk.Alignment).get_child() as Box).foreach((item) => {
  133. if(item is Label) {
  134. Label lbl = item as Label;
  135. lbl.ellipsize = EllipsizeMode.END;
  136. lbl.justify = Justification.CENTER;
  137. }
  138. });
  139. } else if (packageManager.isExists){
  140. btn_install.image = img_reinstall;
  141. btn_install.label = "Tekrar Kur";
  142. } else {
  143. btn_install.image = img_install;
  144. btn_install.label = "Kur";
  145. }
  146. btn_remove.visible = packageManager.isExists;
  147. refreshInfo();
  148. }
  149. }
  150. }